|
@@ -42,16 +42,23 @@ void tdb_munmap(struct tdb_file *file)
|
|
|
|
|
|
|
|
void tdb_mmap(struct tdb_context *tdb)
|
|
void tdb_mmap(struct tdb_context *tdb)
|
|
|
{
|
|
{
|
|
|
|
|
+ int mmap_flags;
|
|
|
|
|
+
|
|
|
if (tdb->flags & TDB_INTERNAL)
|
|
if (tdb->flags & TDB_INTERNAL)
|
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
if (tdb->flags & TDB_NOMMAP)
|
|
if (tdb->flags & TDB_NOMMAP)
|
|
|
return;
|
|
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. */
|
|
/* size_t can be smaller than off_t. */
|
|
|
if ((size_t)tdb->file->map_size == tdb->file->map_size) {
|
|
if ((size_t)tdb->file->map_size == tdb->file->map_size) {
|
|
|
tdb->file->map_ptr = mmap(NULL, 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);
|
|
MAP_SHARED, tdb->file->fd, 0);
|
|
|
} else
|
|
} else
|
|
|
tdb->file->map_ptr = MAP_FAILED;
|
|
tdb->file->map_ptr = MAP_FAILED;
|