diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2020-06-28 09:57:13 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2020-06-28 09:57:13 +0200 |
| commit | 4758050b2d5caeb61fa9536bfb1a738d6f35cc86 (patch) | |
| tree | 0dd269e1432c8d92871940a900027fcab9a4b135 | |
| parent | 1b4eb9853797ac928ed178ad3941662f00fe2658 (diff) | |
| download | vis-4758050b2d5caeb61fa9536bfb1a738d6f35cc86.tar.gz vis-4758050b2d5caeb61fa9536bfb1a738d6f35cc86.tar.xz | |
text: simplify remapping of original file content
Use mmap with MAP_FIXED which replaces existing mappings without any
race conditions between the munmap/mmap calls.
| -rw-r--r-- | text.c | 10 |
1 files changed, 1 insertions, 9 deletions
@@ -960,21 +960,13 @@ static bool text_save_begin_inplace(TextSave *ctx) { ssize_t written = write_all(newfd, block->data, size); if (written == -1 || (size_t)written != size) goto err; - if (munmap(block->data, size) == -1) - goto err; - - void *data = mmap(block->data, size, PROT_READ, MAP_SHARED, newfd, 0); + void *data = mmap(block->data, size, PROT_READ, MAP_SHARED|MAP_FIXED, newfd, 0); if (data == MAP_FAILED) goto err; - if (data != block->data) { - munmap(data, size); - goto err; - } bool close_failed = (close(newfd) == -1); newfd = -1; if (close_failed) goto err; - block->data = data; block->type = MMAP; } /* overwrite the existing file content, if something goes wrong |
