From 9c45d9ad13fdf439d44d7443ae75da15ea0223ed Mon Sep 17 00:00:00 2001 From: Sam Varshavchik Date: Mon, 19 Aug 2013 16:39:41 -0400 Subject: Initial checkin Imported from subversion report, converted to git. Updated all paths in scripts and makefiles, reflecting the new directory hierarchy. --- gdbmobj/gdbmobj2.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 gdbmobj/gdbmobj2.c (limited to 'gdbmobj/gdbmobj2.c') 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)); +} -- cgit v1.2.3