version 1.3, 2016/08/05 23:15:08 |
version 1.8, 2017/02/17 14:43:54 |
Line 80 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 94 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; |
Line 165 dbm_getint(int32_t offset) |
|
Line 175 dbm_getint(int32_t offset) |
|
int32_t |
int32_t |
dbm_addr(const void *p) |
dbm_addr(const void *p) |
{ |
{ |
return htobe32((char *)p - dbm_base); |
return htobe32((const char *)p - dbm_base); |
} |
} |
|
|
int |
int |