2.11BSD/src/bin/strip.c

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

/*
 * Copyright (c) 1983 Regents of the University of California.
 * All rights reserved.  The Berkeley software License Agreement
 * specifies the terms and conditions for redistribution.
 */

#if	defined(DOSCCS) && !defined(lint)
char copyright[] =
"@(#) Copyright (c) 1983 Regents of the University of California.\n\
 All rights reserved.\n";

static char sccsid[] = "@(#)strip.c	5.1.1 (2.11BSD GTE) 1/1/94";
#endif

#include <a.out.h>
#include <signal.h>
#include <stdio.h>
#include <sys/file.h>

struct	xexec head;
int	status;

main(argc, argv)
	char *argv[];
{
	register i;

	signal(SIGHUP, SIG_IGN);
	signal(SIGINT, SIG_IGN);
	signal(SIGQUIT, SIG_IGN);
	for (i = 1; i < argc; i++) {
		strip(argv[i]);
		if (status > 1)
			break;
	}
	exit(status);
}

strip(name)
	char *name;
{
	register f;
	long size;

	f = open(name, O_RDWR);
	if (f < 0) {
		fprintf(stderr, "strip: "); perror(name);
		status = 1;
		goto out;
	}
	if (read(f, (char *)&head, sizeof (head)) < 0 || N_BADMAG(head.e)) {
		printf("strip: %s not in a.out format\n", name);
		status = 1;
		goto out;
	}
	if ((head.e.a_syms == 0) && ((head.e.a_flag & 1) != 0))
		goto out;

	size = N_DATOFF(head) + head.e.a_data;
	head.e.a_syms = 0;
	head.e.a_flag |= 1;
	if (ftruncate(f, size) < 0) {
		fprintf("strip: "); perror(name);
		status = 1;
		goto out;
	}
	(void) lseek(f, (long)0, L_SET);
	(void) write(f, (char *)&head.e, sizeof (head.e));
out:
	close(f);
}