summaryrefslogtreecommitdiff
path: root/lib/tdb2/tdb1_io.c
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2011-09-14 07:42:13 +0930
committerRusty Russell <rusty@rustcorp.com.au>2011-09-14 07:42:13 +0930
commit997592431f3e62cacef13d9b75a12a3d8058e7b7 (patch)
treea0941636f9ad0c72fc5a774b7031bbb8a3f3e4fd /lib/tdb2/tdb1_io.c
parentf7e84f8ef86c3323f70e2fa30fd8a49cab1febf9 (diff)
downloadsamba-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.c12
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;
}