Alexandre Julliard : libwine:
Reorganize the mmap code a bit to avoid some #ifdefs.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Apr 14 04:13:17 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: b7d5b31cf1d8b5553544e9da714c177fe239e384
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=b7d5b31cf1d8b5553544e9da714c177fe239e384
Author: Alexandre Julliard <julliard at 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)
{
}
More information about the wine-cvs
mailing list