int nlist(const char *filename, struct nlist *nl) { int result = -1; unsigned oldver; Elf *elf; int fd; if ((oldver = elf_version(EV_CURRENT)) != EV_NONE) { if ((fd = open(filename, O_RDONLY)) != -1) { if ((elf = elf_begin(fd, ELF_C_READ, NULL))) { result = _elf_nlist(elf, nl); elf_end(elf); } close(fd); } elf_version(oldver); } if (result) { while (nl->n_name && *nl->n_name) { nl->n_value = 0; nl++; } } return result; }
int nlist(const char * name, struct nlist * list) { register struct nlist *p; char magic_buf[EI_NIDENT]; int fd; for (p = list; p->n_name && p->n_name[0]; p++) { /* n_name can be ptr */ p->n_type = 0; p->n_value = 0L; p->n_scnum = 0; p->n_sclass = 0; p->n_numaux = 0; } if ((fd = open(name, 0)) < 0) return (-1); if (read(fd, magic_buf, EI_NIDENT) == -1) { (void) close(fd); return (-1); } if (lseek(fd, 0L, 0) == -1L) { /* rewind to beginning of object file */ (void) close(fd); return (-1); } #ifndef _LP64 if (ISELF && (magic_buf[EI_CLASS] == ELFCLASS32)) #else if (ISELF) /* 64-bit case handles both Elf32 and Elf64 */ #endif return (_elf_nlist(fd, list)); else { (void) close(fd); return (-1); } }