Loading...
--- /dev/null
+++ Libc/Libc-763.12/db/hash/FreeBSD/ndbm.c.patch
@@ -0,0 +1,62 @@
+--- ndbm.c.orig 2009-11-06 12:41:16.000000000 -0800
++++ ndbm.c 2009-11-06 12:41:27.000000000 -0800
+@@ -47,6 +47,9 @@ __FBSDID("$FreeBSD: src/lib/libc/db/hash
+ #include <string.h>
+ #include <errno.h>
+
++#include <db.h>
++#define _DBM
++typedef DB DBM;
+ #include <ndbm.h>
+ #include "hash.h"
+
+@@ -58,7 +61,8 @@ __FBSDID("$FreeBSD: src/lib/libc/db/hash
+ extern DBM *
+ dbm_open(file, flags, mode)
+ const char *file;
+- int flags, mode;
++ int flags;
++ mode_t mode;
+ {
+ HASHINFO info;
+ char path[MAXPATHLEN];
+@@ -124,10 +128,14 @@ dbm_firstkey(db)
+ 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);
+@@ -142,13 +150,20 @@ extern datum
+ 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);