mirror of /home/gitosis/repositories/libowfat.git
Mirror of :pserver:cvs@cvs.fefe.de:/cvs libowfat
https://www.fefe.de/libowfat/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
913 B
40 lines
913 B
#include "cdb.h" |
|
|
|
static int doit(struct cdb *c,uint32 *kpos) { |
|
unsigned char buf[8]; |
|
uint32 eod,klen; |
|
if (cdb_read(c,buf,4,0)) return -1; |
|
uint32_unpack((char*)buf,&eod); |
|
if (eod<8 || eod-8<*kpos) return 0; |
|
c->kpos=*kpos+8; |
|
if (c->kpos<*kpos) return -1; /* wraparound */ |
|
cdb_findstart(c); |
|
c->hslots=1; |
|
if (cdb_read(c,buf,8,*kpos) == -1) return -1; |
|
uint32_unpack((char*)buf,&klen); |
|
uint32_unpack((char*)buf+4,&c->dlen); |
|
c->dpos=c->kpos+klen; |
|
*kpos+=8+klen+c->dlen; |
|
return 1; |
|
} |
|
|
|
int cdb_firstkey(struct cdb *c,uint32 *kpos) { |
|
*kpos=2048; |
|
return doit(c,kpos); |
|
} |
|
|
|
int cdb_nextkey(struct cdb *c,uint32 *kpos) { |
|
return doit(c,kpos); |
|
} |
|
|
|
int cdb_successor(struct cdb *c,const unsigned char *key,unsigned long int klen) { |
|
int r; |
|
uint32 kpos; |
|
if (key) { |
|
r=cdb_find(c,key,klen); |
|
if (r<1) return r; |
|
kpos=c->dpos+c->dlen; |
|
} else |
|
kpos=2048; |
|
return doit(c,&kpos); |
|
}
|
|
|