version 1.2, 2016/07/20 00:23:14 |
version 1.7, 2016/10/22 10:09:27 |
|
|
#include <sys/stat.h> |
#include <sys/stat.h> |
#include <sys/types.h> |
#include <sys/types.h> |
|
|
|
#if HAVE_ENDIAN |
#include <endian.h> |
#include <endian.h> |
|
#elif HAVE_SYS_ENDIAN |
|
#include <sys/endian.h> |
|
#elif HAVE_NTOHL |
|
#include <arpa/inet.h> |
|
#endif |
#if HAVE_ERR |
#if HAVE_ERR |
#include <err.h> |
#include <err.h> |
#endif |
#endif |
Line 74 dbm_map(const char *fname) |
|
Line 80 dbm_map(const char *fname) |
|
goto fail; |
goto fail; |
magic = dbm_getint(0); |
magic = dbm_getint(0); |
if (be32toh(*magic) != MANDOCDB_MAGIC) { |
if (be32toh(*magic) != MANDOCDB_MAGIC) { |
warnx("dbm_map(%s): Bad initial magic %x (expected %x)", |
if (strncmp(dbm_base, "SQLite format 3", 15)) |
fname, be32toh(*magic), MANDOCDB_MAGIC); |
warnx("dbm_map(%s): " |
|
"Bad initial magic %x (expected %x)", |
|
fname, be32toh(*magic), MANDOCDB_MAGIC); |
|
else |
|
warnx("dbm_map(%s): " |
|
"Obsolete format based on SQLite 3", |
|
fname); |
errno = EFTYPE; |
errno = EFTYPE; |
goto fail; |
goto fail; |
} |
} |
Line 88 dbm_map(const char *fname) |
|
Line 100 dbm_map(const char *fname) |
|
} |
} |
max_offset = be32toh(*dbm_getint(3)) + sizeof(int32_t); |
max_offset = be32toh(*dbm_getint(3)) + sizeof(int32_t); |
if (st.st_size != max_offset) { |
if (st.st_size != max_offset) { |
warnx("dbm_map(%s): Inconsistent file size %llu (expected %d)", |
warnx("dbm_map(%s): Inconsistent file size %lld (expected %d)", |
fname, st.st_size, max_offset); |
fname, (long long)st.st_size, max_offset); |
errno = EFTYPE; |
errno = EFTYPE; |
goto fail; |
goto fail; |
} |
} |
|
|
dbm_get(int32_t offset) |
dbm_get(int32_t offset) |
{ |
{ |
offset = be32toh(offset); |
offset = be32toh(offset); |
if (offset < 0 || offset >= max_offset) { |
if (offset < 0) { |
|
warnx("dbm_get: Database corrupt: offset %d", offset); |
|
return NULL; |
|
} |
|
if (offset >= max_offset) { |
warnx("dbm_get: Database corrupt: offset %d > %d", |
warnx("dbm_get: Database corrupt: offset %d > %d", |
offset, max_offset); |
offset, max_offset); |
return NULL; |
return NULL; |