Annotation of 42BSD/bin/strip.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.