Loading...
db/hash/FreeBSD/ndbm.c.patch /dev/null Libc-594.9.5
--- /dev/null
+++ Libc/Libc-594.9.5/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);