1: #include <a.out.h>
2: int a_magic[] = {A_MAGIC1, A_MAGIC2, A_MAGIC3, A_MAGIC4, 0};
3: #define SPACE 100 /* number of symbols read at a time */
4:
5: nlist(name, list)
6: char *name;
7: struct nlist *list;
8: {
9: register struct nlist *p, *q;
10: int f, n, m, i;
11: long sa;
12: struct exec buf;
13: struct nlist space[SPACE];
14:
15: for(p = list; p->n_name[0]; p++) {
16: p->n_type = 0;
17: p->n_value = 0;
18: }
19: f = open(name, 0);
20: if(f < 0)
21: return(-1);
22: read(f, (char *)&buf, sizeof buf);
23: for(i=0; a_magic[i]; i++)
24: if(a_magic[i] == buf.a_magic) break;
25: if(a_magic[i] == 0){
26: close(f);
27: return(-1);
28: }
29: sa = buf.a_text + (long)buf.a_data;
30: if(buf.a_flag != 1) sa *= 2;
31: sa += sizeof buf;
32: lseek(f, sa, 0);
33: n = buf.a_syms;
34:
35: while(n){
36: m = sizeof space;
37: if(n < sizeof space)
38: m = n;
39: read(f, (char *)space, m);
40: n -= m;
41: for(q = space; (m -= sizeof(struct nlist)) >= 0; q++) {
42: for(p = list; p->n_name[0]; p++) {
43: for(i=0;i<8;i++)
44: if(p->n_name[i] != q->n_name[i]) goto cont;
45: p->n_value = q->n_value;
46: p->n_type = q->n_type;
47: break;
48: cont: ;
49: }
50: }
51: }
52: close(f);
53: return(0);
54: }
Defined functions
nlist
defined in line
5; used 5 times
Defined variables
Defined macros
SPACE
defined in line
3; used 1 times