version 1.5, 2002/03/19 21:19:39 |
version 1.6, 2002/03/29 19:32:18 |
|
|
#include "pmdb.h" |
#include "pmdb.h" |
#include "symbol.h" |
#include "symbol.h" |
|
|
#if defined(__OpenBSD__) && (OpenBSD < 200106) |
|
/* OpenBSD prior to 2.9 have a broken pread on big-endian archs. */ |
|
#define IGNORE_PREAD_ERRORS |
|
#endif |
|
|
|
struct aout_symbol_handle { |
struct aout_symbol_handle { |
struct sym_table ash_st; |
struct sym_table ash_st; |
int ash_fd; |
int ash_fd; |
|
|
return (1); |
return (1); |
|
|
if (pread(fd, &ahdr, sizeof(ahdr), 0) != sizeof(ahdr)) { |
if (pread(fd, &ahdr, sizeof(ahdr), 0) != sizeof(ahdr)) { |
#ifndef IGNORE_PREAD_ERRORS |
|
error = 1; |
error = 1; |
#endif |
|
} |
} |
|
|
if (!error && N_BADMAG(ahdr)) { |
if (!error && N_BADMAG(ahdr)) { |
|
|
} |
} |
|
|
if (pread(ash->ash_fd, &ahdr, sizeof(ahdr), 0) != sizeof(ahdr)) { |
if (pread(ash->ash_fd, &ahdr, sizeof(ahdr), 0) != sizeof(ahdr)) { |
#ifndef IGNORE_PREAD_ERRORS |
|
warn("pread(header)"); |
warn("pread(header)"); |
goto fail; |
goto fail; |
#endif |
|
} |
} |
|
|
if (N_BADMAG(ahdr)) { |
if (N_BADMAG(ahdr)) { |
|
|
|
|
if (pread(ash->ash_fd, &ash->ash_strsize, sizeof(u_int32_t), |
if (pread(ash->ash_fd, &ash->ash_strsize, sizeof(u_int32_t), |
stroff) != sizeof(u_int32_t)) { |
stroff) != sizeof(u_int32_t)) { |
#ifndef IGNORE_PREAD_ERRORS |
|
warn("pread(strsize)"); |
warn("pread(strsize)"); |
goto fail; |
goto fail; |
#endif |
|
} |
} |
|
|
if ((ash->ash_strtab = mmap(NULL, ash->ash_strsize, PROT_READ, |
if ((ash->ash_strtab = mmap(NULL, ash->ash_strsize, PROT_READ, |