summaryrefslogtreecommitdiff
path: root/source3/tdb
diff options
context:
space:
mode:
authorMartin Pool <mbp@samba.org>2001-12-10 05:22:04 +0000
committerMartin Pool <mbp@samba.org>2001-12-10 05:22:04 +0000
commitdddef5d5b2a575ec901129ca0d105e7ba796c5ce (patch)
tree2374a278455a0f7e8b94a4fe2a19557de112a8d9 /source3/tdb
parenta23800be1939a8fb18413c41abf1c4988f78444f (diff)
downloadsamba-dddef5d5b2a575ec901129ca0d105e7ba796c5ce.tar.gz
samba-dddef5d5b2a575ec901129ca0d105e7ba796c5ce.tar.bz2
samba-dddef5d5b2a575ec901129ca0d105e7ba796c5ce.zip
Refactor code to check whether already open into its own function.
(This used to be commit 52ef112e10dbe273b6e66c4a5081f468e4630b7d)
Diffstat (limited to 'source3/tdb')
-rw-r--r--source3/tdb/tdb.c29
1 files 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 */