gstreamer/win32/vs7/mman.c

88 lines
1.8 KiB
C
Raw Normal View History

/* $Id$
* =============================================================================
*
* = LIBRARY
* pace
*
* = FILENAME
* pace/win32/mman.c
*
* = AUTHOR
* Luther Baker
*
* ============================================================================= */
#include "mman.h"
void *
mmap (void *addr, size_t len, int prot, int flags, HANDLE fildes, long off)
{
void *addr_mapping = 0;
int nt_flags = 0;
HANDLE file_mapping = INVALID_HANDLE_VALUE;
if (flags | MAP_PRIVATE) {
prot = PAGE_WRITECOPY;
nt_flags = FILE_MAP_COPY;
} else if (flags | MAP_SHARED) {
if (prot | PAGE_READONLY)
nt_flags = FILE_MAP_READ;
if (prot | PAGE_READWRITE)
nt_flags = FILE_MAP_WRITE;
}
file_mapping = CreateFileMapping (fildes, 0, prot, 0, 0, 0);
if (file_mapping == 0)
return MAP_FAILED;
# if defined (PACE_OS_EXTRA_MMAP_FLAGS)
nt_flags |= PACE_OS_EXTRA_MMAP_FLAGS;
# endif /* PACE_OS_EXTRA_MMAP_FLAGS */
//ACE_UNUSED_ARG (addr); /* WinCE does not allow specifying <addr>.*/
addr_mapping = MapViewOfFile (file_mapping, nt_flags, 0, off, len);
/* Only close this down if we used the temporary. */
if (file_mapping == INVALID_HANDLE_VALUE)
CloseHandle (file_mapping);
if (addr_mapping == 0)
return MAP_FAILED;
else if ((flags | MAP_FIXED)
&& addr_mapping != addr) {
errno = 22;
return MAP_FAILED;
} else
return addr_mapping;
}
int
mprotect (void *addr, size_t len, int prot)
{
DWORD dummy; /* Sigh! */
return VirtualProtect (addr, len, prot, &dummy) ? 0 : -1;
}
int
msync (void *addr, size_t len, int flags)
{
//PACE_UNUSED_ARG (flags);
if (!FlushViewOfFile (addr, len))
return -1;
return 0;
}
int
munmap (void *addr, size_t len)
{
//PACE_UNUSED_ARG (len);
if (!UnmapViewOfFile (addr))
return -1;
return 0;
}