Update to another gettext public build
[platform/upstream/gstreamer.git] / win32 / vs7 / mman.c
1 /* $Id$
2
3  * =============================================================================
4  *
5  * = LIBRARY
6  *    pace
7  *
8  * = FILENAME
9  *    pace/win32/mman.c
10  *
11  * = AUTHOR
12  *    Luther Baker
13  *
14  * ============================================================================= */
15
16 #include "mman.h"
17
18 void *
19 mmap (void *addr, size_t len, int prot, int flags, HANDLE fildes, long off)
20 {
21   void *addr_mapping = 0;
22   int nt_flags = 0;
23   HANDLE file_mapping = INVALID_HANDLE_VALUE;
24
25   if (flags | MAP_PRIVATE) {
26     prot = PAGE_WRITECOPY;
27     nt_flags = FILE_MAP_COPY;
28   } else if (flags | MAP_SHARED) {
29     if (prot | PAGE_READONLY)
30       nt_flags = FILE_MAP_READ;
31     if (prot | PAGE_READWRITE)
32       nt_flags = FILE_MAP_WRITE;
33   }
34
35   file_mapping = CreateFileMapping (fildes, 0, prot, 0, 0, 0);
36   if (file_mapping == 0)
37     return MAP_FAILED;
38
39 # if defined (PACE_OS_EXTRA_MMAP_FLAGS)
40   nt_flags |= PACE_OS_EXTRA_MMAP_FLAGS;
41 # endif /* PACE_OS_EXTRA_MMAP_FLAGS */
42
43   //ACE_UNUSED_ARG (addr);        /* WinCE does not allow specifying <addr>.*/
44   addr_mapping = MapViewOfFile (file_mapping, nt_flags, 0, off, len);
45
46   /* Only close this down if we used the temporary. */
47   if (file_mapping == INVALID_HANDLE_VALUE)
48     CloseHandle (file_mapping);
49
50   if (addr_mapping == 0)
51     return MAP_FAILED;
52
53   else if ((flags | MAP_FIXED)
54       && addr_mapping != addr) {
55     errno = 22;
56     return MAP_FAILED;
57   } else
58     return addr_mapping;
59 }
60
61 int
62 mprotect (void *addr, size_t len, int prot)
63 {
64   DWORD dummy;                  /* Sigh! */
65
66   return VirtualProtect (addr, len, prot, &dummy) ? 0 : -1;
67 }
68
69
70 int
71 msync (void *addr, size_t len, int flags)
72 {
73   //PACE_UNUSED_ARG (flags);
74   if (!FlushViewOfFile (addr, len))
75     return -1;
76   return 0;
77 }
78
79 int
80 munmap (void *addr, size_t len)
81 {
82   //PACE_UNUSED_ARG (len);
83   if (!UnmapViewOfFile (addr))
84     return -1;
85   return 0;
86
87 }