gdbmobj2.c
上传用户:s81996212
上传日期:2007-01-04
资源大小:722k
文件大小:1k
- /*
- ** Copyright 1998 - 1999 Double Precision, Inc. See COPYING for
- ** distribution information.
- */
- #include "gdbmobj.h"
- static char *fetchkeyval(struct gdbmobj *obj, size_t *, char **, size_t *);
- extern char *gdbm_dofetch(struct gdbmobj *, const char *, size_t, size_t *);
- char *gdbmobj_firstkey(struct gdbmobj *obj, size_t *keylen, char **val,
- size_t *vallen)
- {
- datum key;
- if (!obj->has_dbf) return (0);
- if (obj->prev_key) free(obj->prev_key);
- obj->prev_key=0;
- key=gdbm_firstkey(obj->dbf);
- if (!key.dptr) return (0);
- obj->prev_key=key.dptr;
- obj->prev_key_len=key.dsize;
- return (fetchkeyval(obj, keylen, val, vallen));
- }
- static char *fetchkeyval(struct gdbmobj *obj, size_t *keylen, char **val,
- size_t *vallen)
- {
- if (!obj->prev_key) return (0);
- *val=gdbm_dofetch(obj, obj->prev_key, obj->prev_key_len, vallen);
- *keylen=obj->prev_key_len;
- return (obj->prev_key);
- }
- char *gdbmobj_nextkey(struct gdbmobj *obj, size_t *keylen,
- char **val, size_t *vallen)
- {
- datum dkey, key;
- if (!obj->has_dbf || !obj->prev_key) return (0);
- dkey.dptr=(char *)obj->prev_key;
- dkey.dsize=obj->prev_key_len;
- key=gdbm_nextkey(obj->dbf, dkey);
- free(obj->prev_key);
- obj->prev_key=key.dptr;
- obj->prev_key_len=key.dsize;
- return (fetchkeyval(obj, keylen, val, vallen));
- }