tdb2: save open_flags instead of mmap_flags.
authorRusty Russell <rusty@rustcorp.com.au>
Tue, 13 Sep 2011 21:44:13 +0000 (07:14 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Tue, 13 Sep 2011 21:44:13 +0000 (07:14 +0930)
It's more consistent with what tdb1 does, and slightly more encapsulated.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
(Imported from CCAN commit 6b7c3c840eafbec211b9f58751c5ff754302a68e)

lib/tdb2/io.c
lib/tdb2/open.c
lib/tdb2/private.h

index 4166cd4c67caf0475684fc03a0e9de86e714500e..d422d9632618fd47653878cd904a90b15645e878 100644 (file)
@@ -42,16 +42,23 @@ void tdb_munmap(struct tdb_file *file)
 
 void tdb_mmap(struct tdb_context *tdb)
 {
+       int mmap_flags;
+
        if (tdb->flags & TDB_INTERNAL)
                return;
 
        if (tdb->flags & TDB_NOMMAP)
                return;
 
+       if ((tdb->open_flags & O_ACCMODE) == O_RDONLY)
+               mmap_flags = PROT_READ;
+       else
+               mmap_flags = PROT_READ | PROT_WRITE;
+
        /* size_t can be smaller than off_t. */
        if ((size_t)tdb->file->map_size == tdb->file->map_size) {
                tdb->file->map_ptr = mmap(NULL, tdb->file->map_size,
-                                         tdb->mmap_flags,
+                                         mmap_flags,
                                          MAP_SHARED, tdb->file->fd, 0);
        } else
                tdb->file->map_ptr = MAP_FAILED;
index bf901c7b35338d38c9e69020aa0584a118d71923..2dd474cc81451b3c84090a1931a3fda15b882695 100644 (file)
@@ -369,6 +369,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
        tdb->log_fn = NULL;
        tdb->transaction = NULL;
        tdb->access = NULL;
+       tdb->open_flags = open_flags;
        tdb->last_error = TDB_SUCCESS;
        tdb->file = NULL;
        tdb->lock_fn = tdb_fcntl_lock;
@@ -416,11 +417,9 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
 
        if ((open_flags & O_ACCMODE) == O_RDONLY) {
                tdb->read_only = true;
-               tdb->mmap_flags = PROT_READ;
                openlock = F_RDLCK;
        } else {
                tdb->read_only = false;
-               tdb->mmap_flags = PROT_READ | PROT_WRITE;
                openlock = F_WRLCK;
        }
 
index a43fa4ac56401a6b462f9894e86d9783a2f6e4f1..f8985743ddfd1ba787f5556038b187cff36320c1 100644 (file)
@@ -346,8 +346,8 @@ struct tdb_context {
        /* Operating read-only? (Opened O_RDONLY, or in traverse_read) */
        bool read_only;
 
-       /* mmap read only? */
-       int mmap_flags;
+       /* Open flags passed to tdb_open. */
+       int open_flags;
 
        /* the flags passed to tdb_open, for tdb_reopen. */
        uint32_t flags;