X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb2%2Fio.c;h=d422d9632618fd47653878cd904a90b15645e878;hp=4166cd4c67caf0475684fc03a0e9de86e714500e;hb=6b7c3c840eafbec211b9f58751c5ff754302a68e;hpb=6e3d9e8a66bf8b45150500f176452ee8e9ee9927 diff --git a/ccan/tdb2/io.c b/ccan/tdb2/io.c index 4166cd4c..d422d963 100644 --- a/ccan/tdb2/io.c +++ b/ccan/tdb2/io.c @@ -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;