Merge branch 'debian'
[hcoop/debian/courier-authlib.git] / libs / bdbobj / bdbobj2.c
CommitLineData
d9898ee8 1/*
2** Copyright 1998 - 1999 Double Precision, Inc. See COPYING for
3** distribution information.
4*/
5
b0322a85 6#include "config.h"
d9898ee8 7#include <string.h>
8#include <stdlib.h>
9#include "bdbobj.h"
10
11char *bdbobj_firstkey(struct bdbobj *obj, size_t *keylen, char **val,
12 size_t *vallen)
13{
14DBT key, value;
15
16 if (!obj->has_dbf) return (0);
17
18 memset(&key, 0, sizeof(key));
19 memset(&value, 0, sizeof(value));
20
21#if DB_VERSION_MAJOR < 2
22 if ((*obj->dbf->seq)(obj->dbf, &key, &value, R_FIRST)) return (0);
23#else
24 if (obj->has_dbc)
25 {
26 (*obj->dbc->c_close)(obj->dbc);
27 obj->has_dbc=0;
28 }
29
30#if DB_VERSION_MAJOR > 2
31 if ((*obj->dbf->cursor)(obj->dbf, 0, &obj->dbc, 0)) return (0);
32#else
33#if DB_VERSION_MINOR >= 5
34 if ((*obj->dbf->cursor)(obj->dbf, 0, &obj->dbc, 0)) return (0);
35#else
36 if ((*obj->dbf->cursor)(obj->dbf, 0, &obj->dbc)) return (0);
37#endif
38#endif
39 obj->has_dbc=1;
40
41 if ((*obj->dbc->c_get)(obj->dbc, &key, &value, DB_FIRST)) return (0);
42#endif
43 *keylen=key.size;
44 *vallen=value.size;
45 if ((*val=(char *)malloc(*vallen)) == 0) return (0);
46
47 memcpy(*val, value.data, *vallen);
48 return ((char *)key.data);
49}
50
51char *bdbobj_nextkey(struct bdbobj *obj, size_t *keylen, char **val,
52 size_t *vallen)
53{
54DBT key, value;
55
56 if (!obj->has_dbf) return (0);
57
58 memset(&key, 0, sizeof(key));
59 memset(&value, 0, sizeof(value));
60
61#if DB_VERSION_MAJOR < 2
62 if ((*obj->dbf->seq)(obj->dbf, &key, &value, R_NEXT)) return (0);
63#else
64 if (!obj->has_dbc) return (0);
65
66 if ((*obj->dbc->c_get)(obj->dbc, &key, &value, DB_NEXT))
67 {
68 (*obj->dbc->c_close)(obj->dbc);
69 obj->has_dbc=0;
70 }
71#endif
72
73 *keylen=key.size;
74 *vallen=value.size;
75 if ((*val=(char *)malloc(*vallen + 1)) == 0) return (0);
76
77 memcpy(*val, value.data, *vallen);
78 (*val)[*vallen]=0;
79
80 return ((char *)key.data);
81}