#include <string.h>
#include <errno.h>
+#include <db.h>
+#define _DBM
+typedef DB DBM;
#include <ndbm.h>
#include "hash.h"
* NULL on failure
*/
extern DBM *
-dbm_open(file, flags, mode)
- const char *file;
- int flags, mode;
+dbm_open(const char *file, int flags, mode_t mode)
{
HASHINFO info;
char path[MAXPATHLEN];
int status;
datum retkey;
DBT dbtretkey, dbtretdata;
+ HTAB *htab = (HTAB *)(db->internal);
status = (db->seq)(db, &dbtretkey, &dbtretdata, R_FIRST);
- if (status)
+ if (status) {
dbtretkey.data = NULL;
+ htab->nextkey_eof = 1;
+ } else
+ htab->nextkey_eof = 0;
retkey.dptr = dbtretkey.data;
retkey.dsize = dbtretkey.size;
return (retkey);
dbm_nextkey(db)
DBM *db;
{
- int status;
+ int status = 1;
datum retkey;
DBT dbtretkey, dbtretdata;
+ HTAB *htab = (HTAB *)(db->internal);
- status = (db->seq)(db, &dbtretkey, &dbtretdata, R_NEXT);
- if (status)
+ if (htab->nextkey_eof)
dbtretkey.data = NULL;
+ else {
+ status = (db->seq)(db, &dbtretkey, &dbtretdata, R_NEXT);
+ if (status) {
+ dbtretkey.data = NULL;
+ htab->nextkey_eof = 1;
+ }
+ }
retkey.dptr = dbtretkey.data;
retkey.dsize = dbtretkey.size;
return (retkey);