summaryrefslogtreecommitdiffstats
path: root/gdbmobj/gdbmobj2.c
diff options
context:
space:
mode:
authorSam Varshavchik2013-08-19 16:39:41 -0400
committerSam Varshavchik2013-08-25 14:43:51 -0400
commit9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch)
tree7a81a04cb51efb078ee350859a64be2ebc6b8813 /gdbmobj/gdbmobj2.c
parenta9520698b770168d1f33d6301463bb70a19655ec (diff)
downloadcourier-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.c56
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));
+}