1BSD/s6/size.c

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

#
/*
 * size - determine object size
 *
 * Modified by Bill Joy UCB August 23, 1977
 * to work correctly on "large" objects by using longs.
 */

struct {
	int	magic;
	int	txt_size;
	int	data_size;
	int	bss_size;
	int	sym_size;
	int	entry_loc;
	int	unused;
	int	no_reloc;
} header;

long	txt_size;
long	data_size;
long	bss_size;

long	total;
long	longof();

main(Argc, argv)
	int Argc;
	char *argv[];
{
	register char *name;
	extern int fout;
	register int argc;

	fout = dup(1);
	Argc--, argv++;
	argc = Argc;
	do {
		close(0);
		if (argc > 0)
			argc--, name = *argv++;
		else
			name = "a.out";
		if (open(name, 0) < 0) {
			perror(name);
			continue;
		}
		if (read(0, &header, sizeof header) != sizeof header) {
			Perror(name, "Can't read header");
			continue;
		}
		if (header.magic < 0407 || header.magic > 0411) {
			Perror(name, "Not object file");
			continue;
		}
		if (Argc > 1)
			printf("%s: ", name);
		txt_size = longof(0, header.txt_size);
		data_size = longof(0, header.data_size);
		bss_size = longof(0, header.bss_size);
		printf("%ld+%ld+%ld=", txt_size, data_size, bss_size);
		total = txt_size + data_size + bss_size;
		printf("%ld (%lo)\n", total, total);
		flush();
	} while (argc > 0);
}

Perror(name, mesg)
	char *name, *mesg;
{
	extern char *sys_errlist[];
	extern int errno;

	sys_errlist[0] = mesg;
	errno = 0;
	perror(name);
}

long
longof(l)
	long l;
{

	return (l);
}