From dddef5d5b2a575ec901129ca0d105e7ba796c5ce Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 10 Dec 2001 05:22:04 +0000 Subject: Refactor code to check whether already open into its own function. (This used to be commit 52ef112e10dbe273b6e66c4a5081f468e4630b7d) --- source3/tdb/tdb.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/source3/tdb/tdb.c b/source3/tdb/tdb.c index 3b0946d580..cda4caba1a 100644 --- a/source3/tdb/tdb.c +++ b/source3/tdb/tdb.c @@ -1373,6 +1373,20 @@ int tdb_store(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, int flag) return ret; } +static int tdb_already_open(dev_t device, + ino_t ino) +{ + TDB_CONTEXT *i; + + for (i = tdbs; i; i = i->next) { + if (i->device == device && i->inode == ino) { + return 1; + } + } + + return 0; +} + /* open the database, creating it if necessary The open_flags and mode are passed straight to the open call on the @@ -1392,7 +1406,7 @@ TDB_CONTEXT *tdb_open_ex(char *name, int hash_size, int tdb_flags, int open_flags, mode_t mode, tdb_log_func log_fn) { - TDB_CONTEXT tdb[1], *ret, *i; + TDB_CONTEXT tdb[1], *ret; struct stat st; int rev = 0, locked; @@ -1463,13 +1477,12 @@ TDB_CONTEXT *tdb_open_ex(char *name, int hash_size, int tdb_flags, goto fail; /* Is it already in the open list? If so, fail. */ - if (tdb_already_open(st.st_dev, st.st_ino) - for (i = tdbs; i; i = i->next) { - if (i->device == st.st_dev && i->inode == st.st_ino) { - errno = EBUSY; - close(tdb->fd); - goto fail; - } + if (tdb_already_open(st.st_dev, st.st_ino)) { + TDB_LOG((tdb, 2, + "tdb_open_ex: %s (%d,%d) is already open\n", + name, st.st_dev, st.st_ino)); + errno = EBUSY; + goto fail; } /* map the database and fill in the return structure */ -- cgit