[BACK]Return to dbm_map.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/dbm_map.c between version 1.2 and 1.7

version 1.2, 2016/07/20 00:23:14 version 1.7, 2016/10/22 10:09:27
Line 24 
Line 24 
 #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;
         }          }
Line 131  void *
Line 143  void *
 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;

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.7

CVSweb