34 if (fstat(fd,&st) == 0)
35 if (st.st_size <= 0xffffffff) {
36 x = mmap(0,st.st_size,PROT_READ,MAP_SHARED,fd,0);
47 if ((pos > c->
size) || (c->
size - pos < len))
goto FORMAT;
55 r = read(c->
fd,buf,len);
57 if (r == -1)
return -1;
58 if (r == 0)
goto FORMAT;
70 static int match(
struct cdb *c,
const char *key,
unsigned int len,uint32 pos)
78 if (
cdb_read(c,buf,n,pos) == -1)
return -1;
95 if (
cdb_read(c,buf,8,(u << 3) & 2047) == -1)
return -1;
115 if (
cdb_read(c,buf,8,pos) == -1)
return -1;
118 switch(
match(c,key,len,pos + 8)) {
123 c->
dpos = pos + 8 + len;
int cdb_find(struct cdb *c, const char *key, unsigned int len)
void byte_copy(void *, unsigned int, const void *)
int cdb_read(struct cdb *c, char *buf, unsigned int len, uint32 pos)
int byte_diff(const void *, unsigned int n, const void *)
int seek_set(int, seek_pos)
void cdb_free(struct cdb *c)
int cdb_findnext(struct cdb *c, const char *key, unsigned int len)
void uint32_unpack(const char s[4], uint32 *u)
void cdb_init(struct cdb *c, int fd)
void cdb_findstart(struct cdb *c)
uint32 cdb_hash(const char *, unsigned int)