/* 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
#include <sys/mman.h>
#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;
{
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);
+}