xref: /inferno-os/utils/ksize/ksize.c (revision 7ef44d652ae9e5e1f5b3465d73684e4a54de73c0)
1 #include	<lib9.h>
2 #include	<bio.h>
3 #include	<mach.h>
4 
5 int
6 size(char *file)
7 {
8 	int fd;
9 	Fhdr f;
10 
11 	if((fd = open(file, OREAD)) < 0){
12 		fprint(2, "size: ");
13 		perror(file);
14 		return 1;
15 	}
16 	if(crackhdr(fd, &f)) {
17 		print("%ldt + %ldd + %ldb = %ld\t%s\n", f.txtsz, f.datsz,
18 			f.bsssz, f.txtsz+f.datsz+f.bsssz, file);
19 		close(fd);
20 		return 0;
21 	}
22 
23 	/* get error string from libmach and display */
24 	fprint(2, "ksize: %s %r\n", file);
25 	close(fd);
26 	return 1;
27 }
28 
29 void
30 main(int argc, char *argv[])
31 {
32 	char *err;
33 	int i;
34 
35 	ARGBEGIN {
36 	default:
37 		fprint(2, "usage: ksize [a.out ...]\n");
38 		exits("usage");
39 	} ARGEND;
40 
41 	err = 0;
42 	if(argc == 0)
43 		if(size("8.out"))
44 			err = "error";
45 	for(i=0; i<argc; i++)
46 		if(size(argv[i]))
47 			err = "error";
48 	exits(err);
49 }
50