lighttpd 1.4.x
https://www.lighttpd.net/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.7 KiB
71 lines
1.7 KiB
#ifndef LI_SYS_MMAP_H |
|
#define LI_SYS_MMAP_H |
|
#include "first.h" |
|
|
|
#if defined(HAVE_SYS_MMAN_H) |
|
|
|
#include <sys/mman.h> |
|
|
|
#elif defined(_WIN32) |
|
|
|
#include <Windows.h> |
|
#include <HandleAPI.h> |
|
#include <io.h> |
|
#include <MemoryAPI.h> |
|
|
|
#ifndef MAP_FAILED |
|
#define MAP_FAILED ((void *)-1) |
|
#endif |
|
#ifndef MAP_PRIVATE |
|
#define MAP_PRIVATE 0 |
|
#endif |
|
#ifndef MAP_SHARED |
|
#define MAP_SHARED 0 |
|
#endif |
|
#ifndef PROT_READ |
|
#define PROT_READ PAGE_READONLY |
|
#endif |
|
|
|
#define HAVE_MMAP 1 |
|
|
|
#define munmap(addr, length) UnmapViewOfFile((LPCVOID)(addr)) |
|
|
|
static inline void * |
|
mmap (void *addr, size_t length, int prot, int flags, int fd, off_t offset) |
|
{ |
|
/* XXX: this limited implementation maps args only to read-only mmap */ |
|
if (prot != PAGE_READONLY) /*(for PAGE_READONLY and FILE_MAP_READ)*/ |
|
return MAP_FAILED; |
|
UNUSED(flags); |
|
|
|
HANDLE mh = CreateFileMapping((HANDLE) _get_osfhandle(fd), |
|
NULL, PAGE_READONLY, |
|
(sizeof(size_t) > 4) ? length >> 32 : 0, |
|
length & 0xffffffff, NULL); |
|
if (NULL == mh) |
|
return MAP_FAILED; |
|
|
|
LPVOID p = MapViewOfFileEx(mh, FILE_MAP_READ, |
|
(sizeof(off_t) > 4) ? offset >> 32 : 0, |
|
offset & 0xffffffff, length, addr); |
|
CloseHandle(mh); |
|
return (NULL != p) ? (void *)p : MAP_FAILED; |
|
} |
|
|
|
#else |
|
|
|
# define MAP_SHARED 0 |
|
# define MAP_PRIVATE 0 |
|
# define PROT_READ 0 |
|
|
|
# define mmap(a, b, c, d, e, f) (-1) |
|
# define munmap(a, b) (-1) |
|
|
|
#endif /* HAVE_SYS_MMAN_H */ |
|
|
|
/* NetBSD 1.3.x needs it; also make it available if mmap() is not present */ |
|
#if !defined(MAP_FAILED) |
|
# define MAP_FAILED ((char*)-1) |
|
#endif |
|
|
|
#endif
|
|
|