diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2011-09-14 07:42:13 +0930 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2011-09-14 07:42:13 +0930 |
commit | 997592431f3e62cacef13d9b75a12a3d8058e7b7 (patch) | |
tree | a0941636f9ad0c72fc5a774b7031bbb8a3f3e4fd /lib/tdb2/tdb1_io.c | |
parent | f7e84f8ef86c3323f70e2fa30fd8a49cab1febf9 (diff) | |
download | samba-997592431f3e62cacef13d9b75a12a3d8058e7b7.tar.gz samba-997592431f3e62cacef13d9b75a12a3d8058e7b7.tar.bz2 samba-997592431f3e62cacef13d9b75a12a3d8058e7b7.zip |
tdb2: use tdb->flags & TDB_RDONLY instead of tdb->read_only for TDB1 code.
There's also a semantic change here: for tdb1, being read-only meant no
locking, and it was an error to try to lock a r/o database. For TDB2, you'd
need to specify TDB_NOLOCK, which suppresses locking silently.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
(Imported from CCAN commit 4dc29a338fadeac805b369b4b0851c02f1b152c7)
Diffstat (limited to 'lib/tdb2/tdb1_io.c')
-rw-r--r-- | lib/tdb2/tdb1_io.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/tdb2/tdb1_io.c b/lib/tdb2/tdb1_io.c index f61db51e24..a738bd0901 100644 --- a/lib/tdb2/tdb1_io.c +++ b/lib/tdb2/tdb1_io.c @@ -82,7 +82,7 @@ static int tdb1_write(struct tdb1_context *tdb, tdb1_off_t off, return 0; } - if (tdb->read_only || tdb->traverse_read) { + if ((tdb->flags & TDB_RDONLY) || tdb->traverse_read) { tdb->last_error = TDB_ERR_RDONLY; return -1; } @@ -213,8 +213,14 @@ void tdb1_mmap(struct tdb1_context *tdb) #if HAVE_MMAP if (!(tdb->flags & TDB_NOMMAP)) { + int mmap_flags; + if ((tdb->open_flags & O_ACCMODE) == O_RDONLY) + mmap_flags = PROT_READ; + else + mmap_flags = PROT_READ | PROT_WRITE; + tdb->file->map_ptr = mmap(NULL, tdb->file->map_size, - PROT_READ|(tdb->read_only? 0:PROT_WRITE), + mmap_flags, MAP_SHARED|MAP_FILE, tdb->file->fd, 0); /* @@ -241,7 +247,7 @@ static int tdb1_expand_file(struct tdb1_context *tdb, tdb1_off_t size, tdb1_off_ { char buf[8192]; - if (tdb->read_only || tdb->traverse_read) { + if ((tdb->flags & TDB_RDONLY) || tdb->traverse_read) { tdb->last_error = TDB_ERR_RDONLY; return -1; } |