|
|
1.1 ! root 1: #ifndef lint ! 2: static char *sccsid = "@(#)strip.c 4.5 (Berkeley) 7/6/83"; ! 3: #endif ! 4: ! 5: #include <a.out.h> ! 6: #include <signal.h> ! 7: #include <stdio.h> ! 8: #include <sys/file.h> ! 9: ! 10: struct exec head; ! 11: int status; ! 12: int pagesize; ! 13: ! 14: main(argc, argv) ! 15: char *argv[]; ! 16: { ! 17: register i; ! 18: ! 19: pagesize = getpagesize(); ! 20: signal(SIGHUP, SIG_IGN); ! 21: signal(SIGINT, SIG_IGN); ! 22: signal(SIGQUIT, SIG_IGN); ! 23: for (i = 1; i < argc; i++) { ! 24: strip(argv[i]); ! 25: if (status > 1) ! 26: break; ! 27: } ! 28: exit(status); ! 29: } ! 30: ! 31: strip(name) ! 32: char *name; ! 33: { ! 34: register f; ! 35: long size; ! 36: ! 37: f = open(name, O_RDWR); ! 38: if (f < 0) { ! 39: fprintf(stderr, "strip: "); perror(name); ! 40: status = 1; ! 41: goto out; ! 42: } ! 43: if (read(f, (char *)&head, sizeof (head)) < 0 || N_BADMAG(head)) { ! 44: printf("strip: %s not in a.out format\n", name); ! 45: status = 1; ! 46: goto out; ! 47: } ! 48: if ((head.a_syms == 0) && (head.a_trsize == 0) && (head.a_drsize ==0)) { ! 49: printf("strip: %s already stripped\n", name); ! 50: goto out; ! 51: } ! 52: size = (long)head.a_text + head.a_data; ! 53: head.a_syms = head.a_trsize = head.a_drsize = 0; ! 54: if (head.a_magic == ZMAGIC) ! 55: size += pagesize - sizeof (head); ! 56: if (ftruncate(f, size + sizeof (head)) < 0) { ! 57: fprintf("strip: "); perror(name); ! 58: status = 1; ! 59: goto out; ! 60: } ! 61: (void) lseek(f, (long)0, L_SET); ! 62: (void) write(f, (char *)&head, sizeof (head)); ! 63: out: ! 64: close(f); ! 65: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.