From 7806609773bdd12424bf61fe37182dda0e2e2ef2 Mon Sep 17 00:00:00 2001 From: "m.milanovic@levi9.com" Date: Thu, 4 Sep 2014 15:05:42 +0200 Subject: [PATCH] Added mg_mmap and mg_munmap utility functions for memory mapping files --- mongoose.c | 25 +++++++++++++++++++++++++ mongoose.h | 2 ++ 2 files changed, 27 insertions(+) diff --git a/mongoose.c b/mongoose.c index f8fa05ea..3b2259fd 100644 --- a/mongoose.c +++ b/mongoose.c @@ -5141,3 +5141,28 @@ struct mg_server *mg_create_server(void *server_data, mg_handler_t handler) { server->event_handler = handler; return server; } + +#ifdef _WIN32 +static void *mmap(void *addr, int64_t len, int prot, int flags, int fd, + int offset) { + HANDLE fh = (HANDLE) _get_osfhandle(fd); + HANDLE mh = CreateFileMapping(fh, 0, PAGE_READONLY, 0, 0, 0); + void *p = MapViewOfFile(mh, FILE_MAP_READ, 0, 0, (size_t) len); + CloseHandle(mh); + return p; +} +#define munmap(x, y) UnmapViewOfFile(x) +#define MAP_FAILED NULL +#define MAP_PRIVATE 0 +#define PROT_READ 0 +#else +#include +#endif + +void *mg_mmap(FILE *fp, size_t size) { + return mmap(NULL, size, PROT_READ, MAP_PRIVATE, fileno(fp), 0); +} + +void mg_munmap(void *p, size_t size) { + munmap(p, size); +} diff --git a/mongoose.h b/mongoose.h index 8361cce0..d39808ee 100644 --- a/mongoose.h +++ b/mongoose.h @@ -135,6 +135,8 @@ int mg_url_encode(const char *src, size_t s_len, char *dst, size_t dst_len); int mg_url_decode(const char *src, int src_len, char *dst, int dst_len, int); int mg_terminate_ssl(struct mg_connection *c, const char *cert); int mg_forward(struct mg_connection *, const char *host, int port, int use_ssl); +void *mg_mmap(FILE *fp, size_t size); +void mg_munmap(void *p, size_t size); // Templates support