From b8b4146a066884ae9493d1642ae2a70412b2a5ca Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Sat, 27 Mar 1999 21:42:43 +0000 Subject: [PATCH] Implemented mmap_file(). --- lib/lib.h | 4 ++++ lib/mmap.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 lib/mmap.c diff --git a/lib/lib.h b/lib/lib.h index e0613edd..e6ffb2b6 100644 --- a/lib/lib.h +++ b/lib/lib.h @@ -162,4 +162,8 @@ void scan_obj_tree(byte *, void (*)(ulg, byte *)); uns random_max(uns); +/* mmap.c */ + +void *mmap_file(byte *name, unsigned *len); + #endif diff --git a/lib/mmap.c b/lib/mmap.c new file mode 100644 index 00000000..47147310 --- /dev/null +++ b/lib/mmap.c @@ -0,0 +1,36 @@ +/* + * Sherlock Library -- Mapping of Files + * + * (c) 1999 Martin Mares, + */ + +#include +#include +#include +#include +#include + +#include "lib.h" + +void * +mmap_file(byte *name, unsigned *len) +{ + int fd = open(name, O_RDONLY); + struct stat st; + void *x; + + if (fd < 0) + return NULL; + if (fstat(fd, &st) < 0) + x = NULL; + else + { + if (len) + *len = st.st_size; + x = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0); + if (x == MAP_FAILED) + x = NULL; + } + close(fd); + return x; +} -- 2.39.5