hash.c.patch   [plain text]


--- hash.c.orig	2009-11-06 12:41:16.000000000 -0800
+++ hash.c	2009-11-06 12:41:27.000000000 -0800
@@ -54,7 +54,7 @@ __FBSDID("$FreeBSD: src/lib/libc/db/hash
 #include <db.h>
 #include "hash.h"
 #include "page.h"
-#include "extern.h"
+#include "hash_extern.h"
 
 static int   alloc_segs(HTAB *, int);
 static int   flush_meta(HTAB *);
@@ -104,8 +104,7 @@ __hash_open(const char *file, int flags,
 	int bpages, hdrsize, new_table, nsegs, save_errno;
 
 	if ((flags & O_ACCMODE) == O_WRONLY) {
-		errno = EINVAL;
-		return (NULL);
+		flags += O_RDWR - O_WRONLY; /* POSIX */
 	}
 
 	if (!(hashp = (HTAB *)calloc(1, sizeof(HTAB))))
@@ -684,7 +683,7 @@ found:
 			return (ERROR);
 		break;
 	default:
-		abort();
+		LIBC_ABORT("illegal action (%d)", action);
 	}
 	save_bufp->flags &= ~BUF_PIN;
 	return (SUCCESS);