V10/cmd/strip/strip.c
#include "strip.h"
#include "hash.h"
#include <signal.h>
main(argc, argv)
int argc; char **argv;
{
register Adotout *a;
register struct nlist *sym;
int sighup();
prognam = *argv;
++stripflag;
if (argc < 2) {
fprintf(stderr, "Usage: %s [options] file.out...\n", prognam);
exit(1);
}
while (--argc > 0 && (*++argv)[0] == '-' && (*argv)[1])
switch ((*argv)[1]) {
case 'D':
++strdebug; break;
case 'v':
++prtflag; break;
case 'g':
++gflag; /* fall through */
case 's':
++shrinkflag; stripflag = 0; break;
default:
fatal("unknown option " ,*argv);
}
Signal(SIGHUP, sighup);
Signal(SIGINT, sighup);
Signal(SIGQUIT, sighup);
while (--argc >= 0) {
tmpnam[0] = 0;
if ((a = rdout(*argv++, !stripflag)) == 0)
continue;
if (prtflag)
prtout(a);
if (a->hd.a_syms == 0) {
fprintf(stderr, "%s already stripped\n", a->name);
freeout(a);
continue;
}
if (shrinkflag)
shrink(a);
symwrite(a);
freeout(a);
}
exit(0);
}
fatal(m1, m2)
char *m1, *m2;
{
if (m1)
fprintf(stderr,"%s: %s%s\n", prognam, m1, m2);
if (!copyrace && tmpnam[0])
unlink(tmpnam);
exit(1);
}
sighup(s)
{
if (copyrace) {
signal(s, sighup);
return;
}
if (tmpnam[0])
unlink(tmpnam);
exit(1);
}