]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/io.c
tdb2: save open_flags instead of mmap_flags.
[ccan] / ccan / tdb2 / io.c
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;