Loading...
--- /dev/null
+++ Libc/Libc-594.1.4/db/hash/FreeBSD/ndbm.c.patch
@@ -0,0 +1,62 @@
+--- ndbm.c.org 2006-09-08 18:47:42.000000000 -0700
++++ ndbm.c 2006-09-08 18:48:03.000000000 -0700
+@@ -51,6 +51,9 @@
+ #include <string.h>
+ #include <errno.h>
+
++#include <db.h>
++#define _DBM
++typedef DB DBM;
+ #include <ndbm.h>
+ #include "hash.h"
+
+@@ -62,7 +65,8 @@
+ extern DBM *
+ dbm_open(file, flags, mode)
+ const char *file;
+- int flags, mode;
++ int flags;
++ mode_t mode;
+ {
+ HASHINFO info;
+ char path[MAXPATHLEN];
+@@ -128,10 +132,14 @@
+ 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);
+@@ -146,13 +154,20 @@
+ 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);