From 0829fccda43d2590554fd3fc29e5b580d4a731f6 Mon Sep 17 00:00:00 2001 From: Bill Joy Date: Wed, 10 Oct 1979 03:51:17 -0800 Subject: [PATCH] BSD 3 development Work on file usr/src/libc/gen/nlist.c Synthesized-from: 3bsd --- usr/src/libc/gen/nlist.c | 59 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 usr/src/libc/gen/nlist.c diff --git a/usr/src/libc/gen/nlist.c b/usr/src/libc/gen/nlist.c new file mode 100644 index 0000000000..54eed0e9a7 --- /dev/null +++ b/usr/src/libc/gen/nlist.c @@ -0,0 +1,59 @@ +#include +int a_magic[] = {A_MAGIC1, A_MAGIC2, A_MAGIC3, A_MAGIC4, 0}; +#define SPACE 100 /* number of symbols read at a time */ + +nlist(name, list) +char *name; +struct nlist *list; +{ + register struct nlist *p, *q; + register int f, n, m, i, nreq; + long sa; + struct exec buf; + struct nlist space[SPACE]; + + for(p = list, nreq = 0; p->n_name[0]; p++, nreq++) { + p->n_type = 0; + p->n_value = 0; + } + f = open(name, 0); + if(f < 0) + return(-1); + read(f, (char *)&buf, sizeof buf); + for(i=0; a_magic[i]; i++) + if(a_magic[i] == buf.a_magic) break; + if(a_magic[i] == 0){ + close(f); + return(-1); + } + sa = buf.a_text + (long)buf.a_data; + sa += buf.a_trsize + buf.a_drsize; + sa += sizeof buf; + lseek(f, sa, 0); + n = buf.a_syms; + + while(n){ + m = sizeof space; + if(n < sizeof space) + m = n; + read(f, (char *)space, m); + n -= m; + for(q = space; (m -= sizeof(struct nlist)) >= 0; q++) { + for(p = list; p->n_name[0]; p++) { + for(i=0;i<8;i++) + if(p->n_name[i] != q->n_name[i]) goto cont; + p->n_value = q->n_value; + p->n_type = q->n_type; + if(--nreq == 0) + goto alldone; + break; + cont: ; + } + } + } +alldone: + close(f); + return(0); +} + + -- 2.20.1