diff options
| author | Sam Varshavchik | 2013-08-19 16:39:41 -0400 | 
|---|---|---|
| committer | Sam Varshavchik | 2013-08-25 14:43:51 -0400 | 
| commit | 9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch) | |
| tree | 7a81a04cb51efb078ee350859a64be2ebc6b8813 /gdbmobj/gdbmobj2.c | |
| parent | a9520698b770168d1f33d6301463bb70a19655ec (diff) | |
| download | courier-libs-9c45d9ad13fdf439d44d7443ae75da15ea0223ed.tar.bz2 | |
Initial checkin
Imported from subversion report, converted to git. Updated all paths in
scripts and makefiles, reflecting the new directory hierarchy.
Diffstat (limited to 'gdbmobj/gdbmobj2.c')
| -rw-r--r-- | gdbmobj/gdbmobj2.c | 56 | 
1 files changed, 56 insertions, 0 deletions
| diff --git a/gdbmobj/gdbmobj2.c b/gdbmobj/gdbmobj2.c new file mode 100644 index 0000000..e107800 --- /dev/null +++ b/gdbmobj/gdbmobj2.c @@ -0,0 +1,56 @@ +/* +** Copyright 1998 - 1999 Double Precision, Inc.  See COPYING for +** distribution information. +*/ + +#include	"gdbmobj.h" + +static char *fetchkeyval(struct gdbmobj *obj, size_t *, char **, size_t *); +extern char *gdbm_dofetch(struct gdbmobj *, const char *, size_t, size_t *); + +char	*gdbmobj_firstkey(struct gdbmobj *obj, size_t *keylen, char **val, +	size_t *vallen) +{ +datum	key; + +	if (!obj->has_dbf)	return (0); + +	if (obj->prev_key)	free(obj->prev_key); +	obj->prev_key=0; + +	key=gdbm_firstkey(obj->dbf); + +	if (!key.dptr)	return (0); + +	obj->prev_key=key.dptr; +	obj->prev_key_len=key.dsize; +	return (fetchkeyval(obj, keylen, val, vallen)); +} + + +static char *fetchkeyval(struct gdbmobj *obj, size_t *keylen, char **val, +	size_t *vallen) +{ +	if (!obj->prev_key)	return (0); +	*val=gdbm_dofetch(obj, obj->prev_key, obj->prev_key_len, vallen); +	*keylen=obj->prev_key_len; +	return (obj->prev_key); +} + +char	*gdbmobj_nextkey(struct gdbmobj *obj, size_t *keylen, +	char **val, size_t *vallen) +{ +datum	dkey, key; + +	if (!obj->has_dbf || !obj->prev_key)	return (0); + +	dkey.dptr=(char *)obj->prev_key; +	dkey.dsize=obj->prev_key_len; + +	key=gdbm_nextkey(obj->dbf, dkey); + +	free(obj->prev_key); +	obj->prev_key=key.dptr; +	obj->prev_key_len=key.dsize; +	return (fetchkeyval(obj, keylen, val, vallen)); +} | 
