skalibs

Mirror/fork of https://skarnet.org/software/skalibs/
git clone https://ccx.te2000.cz/git/skalibs
Log | Files | Refs | README | LICENSE

cdb_traverse_next.c (618B)


      1 /* ISC license. */
      2 
      3 #include <stdint.h>
      4 
      5 #include <skalibs/uint32.h>
      6 #include <skalibs/cdb.h>
      7 #include "cdb-internal.h"
      8 
      9 int cdb_traverse_next (cdb const *c, cdb_data *key, cdb_data *data, uint32_t *pos)
     10 {
     11   uint32_t eod ;
     12   char const *p = cdb_p(c, 4, 0) ;
     13   if (!p) return -1 ;
     14   uint32_unpack(p, &eod) ;
     15   if (eod < 8 || eod - 8 < *pos) return 0 ;
     16   if (*pos + 8 < *pos) return -1 ;
     17   p = cdb_p(c, 8, *pos) ;
     18   if (!p) return -1 ;
     19   uint32_unpack(p, &key->len) ;
     20   uint32_unpack(p + 4, &data->len) ;
     21   key->s = c->map + *pos + 8 ;
     22   data->s = key->s + key->len ;
     23   *pos += 8 + key->len + data->len ;
     24   return 1 ;
     25 }