aboutsummaryrefslogtreecommitdiff
path: root/lib/libc/db/btree/bt_open.c
diff options
context:
space:
mode:
authorsvn2git <svn2git@FreeBSD.org>1994-05-01 08:00:00 +0000
committersvn2git <svn2git@FreeBSD.org>1994-05-01 08:00:00 +0000
commita16f65c7d117419bd266c28a1901ef129a337569 (patch)
tree2626602f66dc3551e7a7c7bc9ad763c3bc7ab40a /lib/libc/db/btree/bt_open.c
parent8503f4f13f77abf7adc8f7e329c6f9c1d52b6a20 (diff)
Diffstat (limited to 'lib/libc/db/btree/bt_open.c')
-rw-r--r--lib/libc/db/btree/bt_open.c38
1 files changed, 25 insertions, 13 deletions
diff --git a/lib/libc/db/btree/bt_open.c b/lib/libc/db/btree/bt_open.c
index f918124042e8..feeffa4c6bf2 100644
--- a/lib/libc/db/btree/bt_open.c
+++ b/lib/libc/db/btree/bt_open.c
@@ -35,7 +35,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)bt_open.c 8.1 (Berkeley) 6/4/93";
+static char sccsid[] = "@(#)bt_open.c 8.3 (Berkeley) 9/16/93";
#endif /* LIBC_SCCS and not lint */
/*
@@ -83,9 +83,9 @@ static int tmp __P((void));
*
*/
DB *
-__bt_open(fname, flags, mode, openinfo)
+__bt_open(fname, flags, mode, openinfo, dflags)
const char *fname;
- int flags, mode;
+ int flags, mode, dflags;
const BTREEINFO *openinfo;
{
BTMETA m;
@@ -156,19 +156,17 @@ __bt_open(fname, flags, mode, openinfo)
/* Allocate and initialize DB and BTREE structures. */
if ((t = malloc(sizeof(BTREE))) == NULL)
goto err;
- t->bt_fd = -1; /* Don't close unopened fd on error. */
- if ((t->bt_dbp = dbp = malloc(sizeof(DB))) == NULL)
- goto err;
+ memset(t, 0, sizeof(BTREE));
t->bt_bcursor.pgno = P_INVALID;
- t->bt_bcursor.index = 0;
- t->bt_stack = NULL;
- t->bt_sp = t->bt_maxstack = 0;
- t->bt_kbuf = t->bt_dbuf = NULL;
- t->bt_kbufsz = t->bt_dbufsz = 0;
+ t->bt_fd = -1; /* Don't close unopened fd on error. */
t->bt_lorder = b.lorder;
t->bt_order = NOT;
t->bt_cmp = b.compare;
t->bt_pfx = b.prefix;
+ t->bt_rfd = -1;
+
+ if ((t->bt_dbp = dbp = malloc(sizeof(DB))) == NULL)
+ goto err;
t->bt_flags = 0;
if (t->bt_lorder != machine_lorder)
SET(t, B_NEEDSWAP);
@@ -199,8 +197,7 @@ __bt_open(fname, flags, mode, openinfo)
goto einval;
}
- if ((t->bt_fd =
- open(fname, flags & __USE_OPEN_FLAGS, mode)) < 0)
+ if ((t->bt_fd = open(fname, flags, mode)) < 0)
goto err;
} else {
@@ -314,6 +311,14 @@ __bt_open(fname, flags, mode, openinfo)
if (nroot(t) == RET_ERROR)
goto err;
+ /* Global flags. */
+ if (dflags & DB_LOCK)
+ SET(t, B_DB_LOCK);
+ if (dflags & DB_SHMEM)
+ SET(t, B_DB_SHMEM);
+ if (dflags & DB_TXN)
+ SET(t, B_DB_TXN);
+
return (dbp);
einval: errno = EINVAL;
@@ -420,6 +425,13 @@ __bt_fd(dbp)
t = dbp->internal;
+ /* Toss any page pinned across calls. */
+ if (t->bt_pinned != NULL) {
+ mpool_put(t->bt_mp, t->bt_pinned, 0);
+ t->bt_pinned = NULL;
+ }
+
+ /* In-memory database can't have a file descriptor. */
if (ISSET(t, B_INMEM)) {
errno = ENOENT;
return (-1);