2 ** Copyright 1998 - 1999 Double Precision, Inc. See COPYING for
3 ** distribution information.
8 static char *fetchkeyval(struct gdbmobj
*obj
, size_t *, char **, size_t *);
9 extern char *gdbm_dofetch(struct gdbmobj
*, const char *, size_t, size_t *);
11 char *gdbmobj_firstkey(struct gdbmobj
*obj
, size_t *keylen
, char **val
,
16 if (!obj
->has_dbf
) return (0);
18 if (obj
->prev_key
) free(obj
->prev_key
);
21 key
=gdbm_firstkey(obj
->dbf
);
23 if (!key
.dptr
) return (0);
25 obj
->prev_key
=key
.dptr
;
26 obj
->prev_key_len
=key
.dsize
;
27 return (fetchkeyval(obj
, keylen
, val
, vallen
));
31 static char *fetchkeyval(struct gdbmobj
*obj
, size_t *keylen
, char **val
,
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
);
40 char *gdbmobj_nextkey(struct gdbmobj
*obj
, size_t *keylen
,
41 char **val
, size_t *vallen
)
45 if (!obj
->has_dbf
|| !obj
->prev_key
) return (0);
47 dkey
.dptr
=(char *)obj
->prev_key
;
48 dkey
.dsize
=obj
->prev_key_len
;
50 key
=gdbm_nextkey(obj
->dbf
, dkey
);
53 obj
->prev_key
=key
.dptr
;
54 obj
->prev_key_len
=key
.dsize
;
55 return (fetchkeyval(obj
, keylen
, val
, vallen
));