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 }