minix/commands/acksize/acksize.c
Ben Gras 6a73e85ad1 retire _PROTOTYPE
. only good for obsolete K&R support
	. also remove a stray ansi.h and the proto cmd
2012-03-25 16:17:10 +02:00

64 lines
1.4 KiB
C

/* size - tell size of an object file Author: Andy Tanenbaum */
#include <sys/types.h>
#include <fcntl.h>
#include <a.out.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int heading; /* set when heading printed */
int error;
int main(int argc, char **argv);
void size(char *name);
int main(argc, argv)
int argc;
char *argv[];
{
int i;
if (argc == 1) {
size("a.out");
exit(error);
}
for (i = 1; i < argc; i++) size(argv[i]);
return(error);
}
void size(name)
char *name;
{
int fd, separate;
long dynam, allmem;
struct exec exec;
if ((fd = open(name, O_RDONLY)) < 0) {
fprintf(stderr, "size: can't open %s\n", name);
error = 1;
return;
}
if (read(fd, (char *)&exec, sizeof(struct exec)) != sizeof(struct exec)) {
fprintf(stderr, "size: %s: header too short\n", name);
error = 1;
close(fd);
return;
}
if (BADMAG(exec)) {
fprintf(stderr, "size: %s not an object file\n", name);
error = 1;
close(fd);
return;
}
separate = (exec.a_flags & A_SEP ? 1 : 0);
dynam = exec.a_total - exec.a_text - exec.a_data - exec.a_bss;
if (separate) dynam += exec.a_text;
allmem = (separate ? exec.a_total + exec.a_text : exec.a_total);
if (heading++ == 0) printf(" text data bss stack memory\n");
printf("%7ld %7ld %7ld %8ld %8ld %s\n",
exec.a_text, exec.a_data, exec.a_bss, dynam, allmem, name);
close(fd);
}