V9/cmd/strip/strip.c

Compare this file to the similar file:
Show the results in this format:

#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);
}