xref: /original-bsd/usr.bin/size/size.c (revision c4ab11eb)
1d323d6e5Sbill /*
2b9ac39a4Sbostic  * Copyright (c) 1988, 1993
3b9ac39a4Sbostic  *	The Regents of the University of California.  All rights reserved.
4d01f0582Sbostic  *
56f4686beSbostic  * %sccs.include.redist.c%
6d323d6e5Sbill  */
790c67981Sbill 
8d01f0582Sbostic #ifndef lint
9b9ac39a4Sbostic static char copyright[] =
10b9ac39a4Sbostic "@(#) Copyright (c) 1988, 1993\n\
11b9ac39a4Sbostic 	The Regents of the University of California.  All rights reserved.\n";
12d01f0582Sbostic #endif /* not lint */
13d323d6e5Sbill 
14d01f0582Sbostic #ifndef lint
15*c4ab11ebShibler static char sccsid[] = "@(#)size.c	8.2 (Berkeley) 12/09/93";
16d01f0582Sbostic #endif /* not lint */
17d01f0582Sbostic 
18d01f0582Sbostic #include <sys/param.h>
19d01f0582Sbostic #include <sys/file.h>
2092f7cfd1Sbostic #include <errno.h>
21d01f0582Sbostic #include <a.out.h>
2292f7cfd1Sbostic #include <unistd.h>
2392f7cfd1Sbostic #include <stdlib.h>
24d01f0582Sbostic #include <stdio.h>
2592f7cfd1Sbostic #include <string.h>
2690c67981Sbill 
2792f7cfd1Sbostic void	err __P((const char *, ...));
2892f7cfd1Sbostic int	show __P((int, char *));
2992f7cfd1Sbostic void	usage __P((void));
3092f7cfd1Sbostic 
3192f7cfd1Sbostic int
main(argc,argv)32d323d6e5Sbill main(argc, argv)
33d01f0582Sbostic 	int argc;
3492f7cfd1Sbostic 	char *argv[];
35d323d6e5Sbill {
3692f7cfd1Sbostic 	int ch, eval;
3792f7cfd1Sbostic 
3892f7cfd1Sbostic 	while ((ch = getopt(argc, argv, "")) != EOF)
3992f7cfd1Sbostic 		switch(ch) {
4092f7cfd1Sbostic 		case '?':
4192f7cfd1Sbostic 		default:
4292f7cfd1Sbostic 			usage();
4392f7cfd1Sbostic 		}
4492f7cfd1Sbostic 	argc -= optind;
4592f7cfd1Sbostic 	argv += optind;
4692f7cfd1Sbostic 
4792f7cfd1Sbostic 	eval = 0;
4892f7cfd1Sbostic 	if (*argv)
4992f7cfd1Sbostic 		do {
5092f7cfd1Sbostic 			eval |= show(argc, *argv);
5192f7cfd1Sbostic 		} while (*++argv);
5292f7cfd1Sbostic 	else
5392f7cfd1Sbostic 		eval |= show(1, "a.out");
5492f7cfd1Sbostic 	exit(eval);
5592f7cfd1Sbostic }
5692f7cfd1Sbostic 
5792f7cfd1Sbostic int
show(count,name)5892f7cfd1Sbostic show(count, name)
5992f7cfd1Sbostic 	int count;
6092f7cfd1Sbostic 	char *name;
6192f7cfd1Sbostic {
6292f7cfd1Sbostic 	static int first = 1;
63d01f0582Sbostic 	struct exec head;
64d01f0582Sbostic 	u_long total;
6592f7cfd1Sbostic 	int fd;
66d323d6e5Sbill 
6792f7cfd1Sbostic 	if ((fd = open(name, O_RDONLY, 0)) < 0) {
6892f7cfd1Sbostic 		err("%s: %s", name, strerror(errno));
6992f7cfd1Sbostic 		return (1);
70d323d6e5Sbill 	}
7192f7cfd1Sbostic 	if (read(fd, &head, sizeof(head)) != sizeof(head) || N_BADMAG(head)) {
72*c4ab11ebShibler 		(void)close(fd);
7392f7cfd1Sbostic 		err("%s: not in a.out format", name);
7492f7cfd1Sbostic 		return (1);
75d323d6e5Sbill 	}
76d01f0582Sbostic 	(void)close(fd);
7792f7cfd1Sbostic 
78d01f0582Sbostic 	if (first) {
79d01f0582Sbostic 		first = 0;
8092f7cfd1Sbostic 		(void)printf("text\tdata\tbss\tdec\thex\n");
8190c67981Sbill 	}
82d01f0582Sbostic 	total = head.a_text + head.a_data + head.a_bss;
8392f7cfd1Sbostic 	(void)printf("%lu\t%lu\t%lu\t%lu\t%lx", head.a_text, head.a_data,
84d01f0582Sbostic 	    head.a_bss, total, total);
8592f7cfd1Sbostic 	if (count > 1)
8692f7cfd1Sbostic 		(void)printf("\t%s", name);
8792f7cfd1Sbostic 	(void)printf("\n");
8892f7cfd1Sbostic 	return (0);
89d323d6e5Sbill }
9092f7cfd1Sbostic 
9192f7cfd1Sbostic void
usage()9292f7cfd1Sbostic usage()
9392f7cfd1Sbostic {
9492f7cfd1Sbostic 	(void)fprintf(stderr, "usage: size [file ...]\n");
9592f7cfd1Sbostic 	exit(1);
9692f7cfd1Sbostic }
9792f7cfd1Sbostic 
9892f7cfd1Sbostic #if __STDC__
9992f7cfd1Sbostic #include <stdarg.h>
10092f7cfd1Sbostic #else
10192f7cfd1Sbostic #include <varargs.h>
10292f7cfd1Sbostic #endif
10392f7cfd1Sbostic 
10492f7cfd1Sbostic void
10592f7cfd1Sbostic #if __STDC__
err(const char * fmt,...)10692f7cfd1Sbostic err(const char *fmt, ...)
10792f7cfd1Sbostic #else
10892f7cfd1Sbostic err(fmt, va_alist)
10992f7cfd1Sbostic 	char *fmt;
11092f7cfd1Sbostic         va_dcl
11192f7cfd1Sbostic #endif
11292f7cfd1Sbostic {
11392f7cfd1Sbostic 	va_list ap;
11492f7cfd1Sbostic #if __STDC__
11592f7cfd1Sbostic 	va_start(ap, fmt);
11692f7cfd1Sbostic #else
11792f7cfd1Sbostic 	va_start(ap);
11892f7cfd1Sbostic #endif
11992f7cfd1Sbostic 	(void)fprintf(stderr, "size: ");
12092f7cfd1Sbostic 	(void)vfprintf(stderr, fmt, ap);
12192f7cfd1Sbostic 	va_end(ap);
12292f7cfd1Sbostic 	(void)fprintf(stderr, "\n");
123d323d6e5Sbill }
124