Module: wine Branch: refs/heads/master Commit: b7d5b31cf1d8b5553544e9da714c177fe239e384 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=b7d5b31cf1d8b5553544e9da...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Apr 13 21:53:41 2006 +0200
libwine: Reorganize the mmap code a bit to avoid some #ifdefs.
---
libs/wine/mmap.c | 64 ++++++++++++++++++++++++++++++------------------------ 1 files changed, 35 insertions(+), 29 deletions(-)
diff --git a/libs/wine/mmap.c b/libs/wine/mmap.c index 3d25f26..dbfa8a2 100644 --- a/libs/wine/mmap.c +++ b/libs/wine/mmap.c @@ -25,6 +25,7 @@ #include <ctype.h> #include <fcntl.h> #include <stdlib.h> +#include <stdio.h> #include <string.h> #include <sys/types.h> #ifdef HAVE_SYS_MMAN_H @@ -50,14 +51,32 @@ struct reserved_area static struct list reserved_areas = LIST_INIT(reserved_areas); static const int granularity_mask = 0xffff; /* reserved areas have 64k granularity */
+#ifdef HAVE_MMAP + #ifndef MAP_NORESERVE #define MAP_NORESERVE 0 #endif - -#ifndef HAVE_MMAP -static inline int munmap( void *ptr, size_t size ) { return 0; } +#ifndef MAP_PRIVATE +#define MAP_PRIVATE 0 +#endif +#ifndef MAP_ANON +#define MAP_ANON 0 #endif
+static inline int get_fdzero(void) +{ + static int fd = -1; + + if (MAP_ANON == 0 && fd == -1) + { + if ((fd = open( "/dev/zero", O_RDONLY )) == -1) + { + perror( "/dev/zero: open" ); + exit(1); + } + } + return fd; +}
#if (defined(__svr4__) || defined(__NetBSD__)) && !defined(MAP_TRYFIXED) /*********************************************************************** @@ -172,30 +191,12 @@ static int try_mmap_fixed (void *addr, s */ void *wine_anon_mmap( void *start, size_t size, int prot, int flags ) { -#ifdef HAVE_MMAP - static int fdzero = -1; - -#ifdef MAP_ANON - flags |= MAP_ANON; -#else - if (fdzero == -1) - { - if ((fdzero = open( "/dev/zero", O_RDONLY )) == -1) - { - perror( "/dev/zero: open" ); - exit(1); - } - } -#endif /* MAP_ANON */ - #ifdef MAP_SHARED flags &= ~MAP_SHARED; #endif
/* Linux EINVAL's on us if we don't pass MAP_PRIVATE to an anon mmap */ -#ifdef MAP_PRIVATE - flags |= MAP_PRIVATE; -#endif + flags |= MAP_PRIVATE | MAP_ANON;
if (!(flags & MAP_FIXED)) { @@ -208,19 +209,14 @@ void *wine_anon_mmap( void *start, size_ /* If available, this will attempt a fixed mapping in-kernel */ flags |= MAP_TRYFIXED; #elif defined(__svr4__) || defined(__NetBSD__) || defined(__APPLE__) - if ( try_mmap_fixed( start, size, prot, flags, fdzero, 0 ) ) + if ( try_mmap_fixed( start, size, prot, flags, get_fdzero(), 0 ) ) return start; #endif } - return mmap( start, size, prot, flags, fdzero, 0 ); -#else - return (void *)-1; -#endif + return mmap( start, size, prot, flags, get_fdzero(), 0 ); }
-#ifdef HAVE_MMAP - /*********************************************************************** * reserve_area * @@ -329,6 +325,16 @@ void mmap_init(void)
#else /* HAVE_MMAP */
+void *wine_anon_mmap( void *start, size_t size, int prot, int flags ) +{ + return (void *)-1; +} + +static inline int munmap( void *ptr, size_t size ) +{ + return 0; +} + void mmap_init(void) { }