Mercurial > hg > cdb
changeset 1:41b9b6a160d1
access functions,
use all 32 bits for anything to do with a mapped cdb file
| author | Henry S. Thompson <ht@inf.ed.ac.uk> |
|---|---|
| date | Wed, 29 Jan 2025 12:34:14 +0000 |
| parents | 2cb46628feec |
| children | 45f98bfd1dfb |
| files | cdb.c cdb.h |
| diffstat | 2 files changed, 48 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/cdb.c Wed Jan 29 10:50:34 2025 +0000 +++ b/cdb.c Wed Jan 29 12:34:14 2025 +0000 @@ -9,7 +9,15 @@ #include "byte.h" #include "cdb.h" -void cdb_free(struct cdb *c) + +static Cdb c; + +Cdb* cdb_new(void) +{ + return &c; +} + +void cdb_free(Cdb *c) { if (c->map) { munmap(c->map,c->size); @@ -17,12 +25,28 @@ } } -void cdb_findstart(struct cdb *c) +uint32 cdb_len() { + return c.dlen; +} + +uint32 cdb_pos() { + return c.dpos; +} + +char *cdb_mmap() { + return c.map; +} + +uint32 cdb_msize() { + return c.size; +} + +void cdb_findstart(Cdb *c) { c->loop = 0; } -void cdb_init(struct cdb *c,int fd) +void cdb_init(Cdb *c,int fd) { struct stat st; char *x; @@ -41,7 +65,7 @@ } } -int cdb_read(struct cdb *c,char *buf,unsigned int len,uint32 pos) +int cdb_read(Cdb *c,char *buf,unsigned int len,uint32 pos) { if (c->map) { if ((pos > c->size) || (c->size - pos < len)) goto FORMAT; @@ -67,7 +91,7 @@ return -1; } -static int match(struct cdb *c,char *key,unsigned int len,uint32 pos) +static int match(Cdb *c,char *key,unsigned int len,uint32 pos) { char buf[32]; int n; @@ -84,7 +108,7 @@ return 1; } -int cdb_findnext(struct cdb *c,char *key,unsigned int len) +int cdb_findnext(Cdb *c,char *key,unsigned int len) { char buf[8]; uint32 pos; @@ -129,7 +153,7 @@ return 0; } -int cdb_find(struct cdb *c,char *key,unsigned int len) +int cdb_find(Cdb *c,char *key,unsigned int len) { cdb_findstart(c); return cdb_findnext(c,key,len);
--- a/cdb.h Wed Jan 29 10:50:34 2025 +0000 +++ b/cdb.h Wed Jan 29 12:34:14 2025 +0000 @@ -22,14 +22,25 @@ uint32 dlen; /* initialized if cdb_findnext() returns 1 */ } ; -extern void cdb_free(struct cdb *); -extern void cdb_init(struct cdb *,int fd); +typedef struct cdb Cdb; + +extern Cdb* cdb_new(void); + +extern void cdb_free(Cdb *); +extern void cdb_init(Cdb *,int fd); + +extern int cdb_read(Cdb *,char *,unsigned int,uint32); -extern int cdb_read(struct cdb *,char *,unsigned int,uint32); +extern void cdb_findstart(Cdb *); +extern int cdb_findnext(Cdb *,char *,unsigned int); +extern int cdb_find(Cdb *,char *,unsigned int); -extern void cdb_findstart(struct cdb *); -extern int cdb_findnext(struct cdb *,char *,unsigned int); -extern int cdb_find(struct cdb *,char *,unsigned int); +extern uint32 cdb_pos(); +extern uint32 cdb_len(); + +extern char *cdb_mmap(); +extern uint32 cdb_msize(); + #define cdb_datapos(c) ((c)->dpos) #define cdb_datalen(c) ((c)->dlen)
