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