|
|
1.1 ! root 1: static char *sccsid = "@(#)strip.c 4.1 (Berkeley) 10/1/80"; ! 2: #include <a.out.h> ! 3: #include <signal.h> ! 4: #include <pagsiz.h> ! 5: ! 6: #define BUFSIZ BSIZE ! 7: ! 8: char *tname; ! 9: char *mktemp(); ! 10: struct exec head; ! 11: int status; ! 12: int tf; ! 13: ! 14: main(argc, argv) ! 15: char *argv[]; ! 16: { ! 17: register i; ! 18: ! 19: signal(SIGHUP, SIG_IGN); ! 20: signal(SIGINT, SIG_IGN); ! 21: signal(SIGQUIT, SIG_IGN); ! 22: tname = mktemp("/tmp/sXXXXX"); ! 23: close(creat(tname, 0600)); ! 24: tf = open(tname, 2); ! 25: if(tf < 0) { ! 26: printf("cannot create temp file\n"); ! 27: exit(2); ! 28: } ! 29: for(i=1; i<argc; i++) { ! 30: strip(argv[i]); ! 31: if(status > 1) ! 32: break; ! 33: } ! 34: close(tf); ! 35: unlink(tname); ! 36: exit(status); ! 37: } ! 38: ! 39: strip(name) ! 40: char *name; ! 41: { ! 42: register f; ! 43: long size; ! 44: int i; ! 45: ! 46: f = open(name, 0); ! 47: if(f < 0) { ! 48: printf("cannot open %s\n", name); ! 49: status = 1; ! 50: goto out; ! 51: } ! 52: read(f, (char *)&head, sizeof(head)); ! 53: if (N_BADMAG(head)) { ! 54: printf("%s not in a.out format\n", name); ! 55: status = 1; ! 56: goto out; ! 57: } ! 58: if ((head.a_syms == 0) && (head.a_trsize == 0) && (head.a_drsize ==0)) { ! 59: printf("%s already stripped\n", name); ! 60: goto out; ! 61: } ! 62: size = (long)head.a_text + head.a_data; ! 63: head.a_syms = head.a_trsize = head.a_drsize = 0 ; ! 64: lseek(tf, (long)0, 0); ! 65: write(tf, (char *)&head, sizeof(head)); ! 66: if (head.a_magic == ZMAGIC) ! 67: size += PAGSIZ - sizeof (head); ! 68: if (copy(name, f, tf, size)) { ! 69: status = 1; ! 70: goto out; ! 71: } ! 72: size += sizeof(head); ! 73: close(f); ! 74: f = creat(name, 0666); ! 75: if(f < 0) { ! 76: printf("%s cannot recreate\n", name); ! 77: status = 1; ! 78: goto out; ! 79: } ! 80: lseek(tf, (long)0, 0); ! 81: if(copy(name, tf, f, size)) ! 82: status = 2; ! 83: ! 84: out: ! 85: close(f); ! 86: } ! 87: ! 88: copy(name, fr, to, size) ! 89: char *name; ! 90: long size; ! 91: { ! 92: register s, n; ! 93: char buf[BUFSIZ]; ! 94: ! 95: while(size != 0) { ! 96: s = BUFSIZ; ! 97: if(size < BUFSIZ) ! 98: s = size; ! 99: n = read(fr, buf, s); ! 100: if(n != s) { ! 101: printf("%s unexpected eof\n", name); ! 102: return(1); ! 103: } ! 104: n = write(to, buf, s); ! 105: if(n != s) { ! 106: printf("%s unexpected write eof\n", name); ! 107: return(1); ! 108: } ! 109: size -= s; ! 110: } ! 111: return(0); ! 112: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.