1 /* ISC license. */
2 
3 #include <skalibs/uint32.h>
4 #include <skalibs/cdb.h>
5 
cdb_nextkey(struct cdb * c,uint32_t * kpos)6 int cdb_nextkey (struct cdb *c, uint32_t *kpos)
7 {
8   char buf[8] ;
9   uint32_t eod, klen ;
10   if (cdb_read(c, buf, 4, 0) < 0) return -1 ;
11   uint32_unpack(buf, &eod) ;
12   if (eod < 8 || eod - 8 < *kpos) return 0 ;
13   c->kpos = *kpos + 8 ;
14   if (c->kpos < *kpos) return -1 ; /* wraparound */
15   cdb_findstart(c) ;
16   c->hslots = 1 ;
17   if (cdb_read(c, buf, 8, *kpos) < 0) return -1 ;
18   uint32_unpack(buf, &klen) ;
19   uint32_unpack(buf + 4, &c->dlen) ;
20   c->dpos = c->kpos + klen ;
21   *kpos += 8 + klen + c->dlen ;
22   return 1 ;
23 }
24