Annotation of researchv9/cmd/strip/rdout.c, revision 1.1.1.1

1.1       root        1: #include "strip.h"
                      2: 
                      3: Adotout *
                      4: rdout(name, sflag)
                      5: register char *name;
                      6: {
                      7:        register Adotout *a; Adotout *rderr();
                      8:        if ((a = Calloc(Adotout, 1)) == 0)
                      9:                return rderr(a, name);
                     10:        a->name = name;
                     11:        if ((a->fd = open(a->name, 0)) < 0)
                     12:                return rderr(a, "cannot open file");
                     13:        fstat(a->fd, &a->filstat);
                     14:        if (Read(a->fd, (char *)&a->hd, sizeof(struct exec)))
                     15:                return rderr(a, "cannot read header");
                     16:        if (N_BADMAG(a->hd))
                     17:                return rderr(a, "bad magic number");
                     18: 
                     19:        if (a->nsymbols = a->hd.a_syms/sizeof(struct nlist)) {
                     20:                lseek(a->fd, N_STROFF(a->hd), 0);
                     21:                if (Read(a->fd, (char *)&a->strsize, sizeof(long)) ||
                     22:                    a->strsize < 4)
                     23:                        return rderr(a, "read failed on string table size");
                     24:        }
                     25: 
                     26:        if (sflag && a->nsymbols) {
                     27:                if ((a->symtab = Malloc(struct nlist, a->nsymbols+1)) == 0)
                     28:                        return rderr(a, "cannot malloc symbol table");
                     29:                lseek(a->fd, N_SYMOFF(a->hd), 0);
                     30:                if (Read(a->fd, (char *)a->symtab, a->hd.a_syms))
                     31:                        return rderr(a, "read failed on symbol table");
                     32:                a->symend = (struct nlist *)((char *)a->symtab + a->hd.a_syms);
                     33:                a->symend->n_un.n_name = 0;
                     34:                a->symend->n_type = 0;
                     35:                a->symend->n_other = 0;
                     36:                a->symend->n_desc = 0;
                     37:                a->symend->n_value = 0;
                     38: 
                     39:                if ((a->strtab = Malloc(char, a->strsize)) == 0)
                     40:                        return rderr(a, "cannot malloc string table");
                     41:                lseek(a->fd, N_STROFF(a->hd), 0);
                     42:                if (Read(a->fd, (char *)a->strtab, a->strsize))
                     43:                        return rderr(a, "read failed on string table");
                     44:        }
                     45:        return a;
                     46: }
                     47: 
                     48: freeout(a)
                     49: register Adotout *a;
                     50: {
                     51:        if (a) {
                     52:                if (a->fd)
                     53:                        close(a->fd);
                     54:                Free(a->symtab);
                     55:                Free(a->strtab);
                     56:                free(a);
                     57:        }
                     58: }
                     59: 
                     60: Adotout *
                     61: rderr(a, s)
                     62: register Adotout *a; register char *s;
                     63: {
                     64:        if (a) {
                     65:                fprintf(stderr, "%s: file %s\n", s, a->name);
                     66:                freeout(a);
                     67:        } else {
                     68:                fprintf(stderr, "cannot allocate struct Adotout: file %s\n", s);
                     69:        }
                     70:        return 0;
                     71: }
                     72: 
                     73: prtout(a)
                     74: register Adotout *a;
                     75: {
                     76:        printf("magic number    = 0%o\n", a->hd.a_magic);
                     77:        printf("text size       = %d    = 0x%x\n", a->hd.a_text, a->hd.a_text);
                     78:        printf("data size       = %d    = 0x%x\n", a->hd.a_data, a->hd.a_data);
                     79:        printf("bss size        = %d    = 0x%x\n", a->hd.a_bss, a->hd.a_bss);
                     80:        printf("sym tab size    = %d (%d)\n", a->hd.a_syms, a->nsymbols);
                     81:        printf("entry point     = 0x%x\n", a->hd.a_entry);
                     82:        printf("text rel size   = %d\n", a->hd.a_trsize);
                     83:        printf("data rel size   = %d\n", a->hd.a_drsize);
                     84:        printf("str tab size    = %d\n", a->strsize);
                     85: }

unix.superglobalmegacorp.com

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