From 4bb1ae1d27874e3c1bf2817b740da096ac322f15 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Fri, 16 Feb 2001 17:56:06 +0000 Subject: [PATCH] Added unmapping and writeable mappings. --- lib/lib.h | 3 ++- lib/mmap.c | 13 ++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/lib.h b/lib/lib.h index b397c89b..9283e7aa 100644 --- a/lib/lib.h +++ b/lib/lib.h @@ -178,6 +178,7 @@ uns random_max(uns); /* mmap.c */ -void *mmap_file(byte *name, unsigned *len); +void *mmap_file(byte *name, unsigned *len, int writeable); +void munmap_file(void *start, unsigned len); #endif diff --git a/lib/mmap.c b/lib/mmap.c index 62101f8d..e461e1ee 100644 --- a/lib/mmap.c +++ b/lib/mmap.c @@ -13,13 +13,14 @@ #include #ifndef MAP_FAILED +#warning System includes do not define MAP_FAILED. #define MAP_FAILED ((void *)-1L) #endif void * -mmap_file(byte *name, unsigned *len) +mmap_file(byte *name, unsigned *len, int writeable) { - int fd = open(name, O_RDONLY); + int fd = open(name, writeable ? O_RDWR : O_RDONLY); struct stat st; void *x; @@ -31,10 +32,16 @@ mmap_file(byte *name, unsigned *len) { if (len) *len = st.st_size; - x = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0); + x = mmap(NULL, st.st_size, writeable ? (PROT_READ | PROT_WRITE) : PROT_READ, MAP_SHARED, fd, 0); if (x == MAP_FAILED) x = NULL; } close(fd); return x; } + +void +munmap_file(void *start, unsigned len) +{ + munmap(start, len); +} -- 2.39.2