|
|
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.