2 ** Copyright 1998 - 1999 Double Precision, Inc. See COPYING for
3 ** distribution information.
11 char *bdbobj_firstkey(struct bdbobj
*obj
, size_t *keylen
, char **val
,
16 if (!obj
->has_dbf
) return (0);
18 memset(&key
, 0, sizeof(key
));
19 memset(&value
, 0, sizeof(value
));
21 #if DB_VERSION_MAJOR < 2
22 if ((*obj
->dbf
->seq
)(obj
->dbf
, &key
, &value
, R_FIRST
)) return (0);
26 (*obj
->dbc
->c_close
)(obj
->dbc
);
30 #if DB_VERSION_MAJOR > 2
31 if ((*obj
->dbf
->cursor
)(obj
->dbf
, 0, &obj
->dbc
, 0)) return (0);
33 #if DB_VERSION_MINOR >= 5
34 if ((*obj
->dbf
->cursor
)(obj
->dbf
, 0, &obj
->dbc
, 0)) return (0);
36 if ((*obj
->dbf
->cursor
)(obj
->dbf
, 0, &obj
->dbc
)) return (0);
41 if ((*obj
->dbc
->c_get
)(obj
->dbc
, &key
, &value
, DB_FIRST
)) return (0);
45 if ((*val
=(char *)malloc(*vallen
)) == 0) return (0);
47 memcpy(*val
, value
.data
, *vallen
);
48 return ((char *)key
.data
);
51 char *bdbobj_nextkey(struct bdbobj
*obj
, size_t *keylen
, char **val
,
56 if (!obj
->has_dbf
) return (0);
58 memset(&key
, 0, sizeof(key
));
59 memset(&value
, 0, sizeof(value
));
61 #if DB_VERSION_MAJOR < 2
62 if ((*obj
->dbf
->seq
)(obj
->dbf
, &key
, &value
, R_NEXT
)) return (0);
64 if (!obj
->has_dbc
) return (0);
66 if ((*obj
->dbc
->c_get
)(obj
->dbc
, &key
, &value
, DB_NEXT
))
68 (*obj
->dbc
->c_close
)(obj
->dbc
);
75 if ((*val
=(char *)malloc(*vallen
+ 1)) == 0) return (0);
77 memcpy(*val
, value
.data
, *vallen
);
80 return ((char *)key
.data
);