2 ** Copyright 1998 - 1999 Double Precision, Inc. See COPYING for
3 ** distribution information.
10 char *bdbobj_firstkey(struct bdbobj
*obj
, size_t *keylen
, char **val
,
15 if (!obj
->has_dbf
) return (0);
17 memset(&key
, 0, sizeof(key
));
18 memset(&value
, 0, sizeof(value
));
20 #if DB_VERSION_MAJOR < 2
21 if ((*obj
->dbf
->seq
)(obj
->dbf
, &key
, &value
, R_FIRST
)) return (0);
25 (*obj
->dbc
->c_close
)(obj
->dbc
);
29 #if DB_VERSION_MAJOR > 2
30 if ((*obj
->dbf
->cursor
)(obj
->dbf
, 0, &obj
->dbc
, 0)) return (0);
32 #if DB_VERSION_MINOR >= 5
33 if ((*obj
->dbf
->cursor
)(obj
->dbf
, 0, &obj
->dbc
, 0)) return (0);
35 if ((*obj
->dbf
->cursor
)(obj
->dbf
, 0, &obj
->dbc
)) return (0);
40 if ((*obj
->dbc
->c_get
)(obj
->dbc
, &key
, &value
, DB_FIRST
)) return (0);
44 if ((*val
=(char *)malloc(*vallen
)) == 0) return (0);
46 memcpy(*val
, value
.data
, *vallen
);
47 return ((char *)key
.data
);
50 char *bdbobj_nextkey(struct bdbobj
*obj
, size_t *keylen
, char **val
,
55 if (!obj
->has_dbf
) return (0);
57 memset(&key
, 0, sizeof(key
));
58 memset(&value
, 0, sizeof(value
));
60 #if DB_VERSION_MAJOR < 2
61 if ((*obj
->dbf
->seq
)(obj
->dbf
, &key
, &value
, R_NEXT
)) return (0);
63 if (!obj
->has_dbc
) return (0);
65 if ((*obj
->dbc
->c_get
)(obj
->dbc
, &key
, &value
, DB_NEXT
))
67 (*obj
->dbc
->c_close
)(obj
->dbc
);
74 if ((*val
=(char *)malloc(*vallen
+ 1)) == 0) return (0);
76 memcpy(*val
, value
.data
, *vallen
);
79 return ((char *)key
.data
);