1BSD/s6/size.c
#
/*
* 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);
}