Imported Debian patch 0.66.1-1
[hcoop/debian/courier-authlib.git] / libs / gdbmobj / gdbmobj2.c
CommitLineData
d9898ee8 1/*
2** Copyright 1998 - 1999 Double Precision, Inc. See COPYING for
3** distribution information.
4*/
5
6#include "gdbmobj.h"
7
8static char *fetchkeyval(struct gdbmobj *obj, size_t *, char **, size_t *);
9extern char *gdbm_dofetch(struct gdbmobj *, const char *, size_t, size_t *);
10
11char *gdbmobj_firstkey(struct gdbmobj *obj, size_t *keylen, char **val,
12 size_t *vallen)
13{
14datum key;
15
16 if (!obj->has_dbf) return (0);
17
18 if (obj->prev_key) free(obj->prev_key);
19 obj->prev_key=0;
20
21 key=gdbm_firstkey(obj->dbf);
22
23 if (!key.dptr) return (0);
24
25 obj->prev_key=key.dptr;
26 obj->prev_key_len=key.dsize;
27 return (fetchkeyval(obj, keylen, val, vallen));
28}
29
30
31static char *fetchkeyval(struct gdbmobj *obj, size_t *keylen, char **val,
32 size_t *vallen)
33{
34 if (!obj->prev_key) return (0);
35 *val=gdbm_dofetch(obj, obj->prev_key, obj->prev_key_len, vallen);
36 *keylen=obj->prev_key_len;
37 return (obj->prev_key);
38}
39
40char *gdbmobj_nextkey(struct gdbmobj *obj, size_t *keylen,
41 char **val, size_t *vallen)
42{
43datum dkey, key;
44
45 if (!obj->has_dbf || !obj->prev_key) return (0);
46
47 dkey.dptr=(char *)obj->prev_key;
48 dkey.dsize=obj->prev_key_len;
49
50 key=gdbm_nextkey(obj->dbf, dkey);
51
52 free(obj->prev_key);
53 obj->prev_key=key.dptr;
54 obj->prev_key_len=key.dsize;
55 return (fetchkeyval(obj, keylen, val, vallen));
56}