X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=support%2Fsys-mman.c;h=143148f8ca3c0e345657eb62bd406252a157f935;hb=ab0b591ca59d99a2370bf9f579b091c5edf09ae5;hp=a8463bcb00c2910b89fab4809d4fc665a6014cfe;hpb=b6b13e72e91d5b529a6306ce53bda685932c77db;p=mono.git diff --git a/support/sys-mman.c b/support/sys-mman.c index a8463bcb00c..143148f8ca3 100644 --- a/support/sys-mman.c +++ b/support/sys-mman.c @@ -4,10 +4,28 @@ * Authors: * Jonathan Pryor (jonpryor@vt.edu) * - * Copyright (C) 2004 Jonathan Pryor + * Copyright (C) 2004-2006 Jonathan Pryor */ +#include + +#ifndef __OpenBSD__ #define _XOPEN_SOURCE 600 +#endif + +#ifdef HOST_DARWIN +/* For mincore () */ +#define _DARWIN_C_SOURCE +#endif +#ifdef __FreeBSD__ +/* For mincore () */ +#define __BSD_VISIBLE 1 +#endif + +#ifdef __NetBSD__ +/* For mincore () */ +#define _NETBSD_SOURCE +#endif #include #include @@ -27,7 +45,7 @@ Mono_Posix_Syscall_mmap (void *start, mph_size_t length, int prot, int flags, mph_return_val_if_size_t_overflow (length, MAP_FAILED); mph_return_val_if_off_t_overflow (offset, MAP_FAILED); - if (Mono_Posix_FromMmapProt (prot, &_prot) == -1) + if (Mono_Posix_FromMmapProts (prot, &_prot) == -1) return MAP_FAILED; if (Mono_Posix_FromMmapFlags (flags, &_flags) == -1) return MAP_FAILED; @@ -49,7 +67,7 @@ Mono_Posix_Syscall_mprotect (void *start, mph_size_t len, int prot) int _prot; mph_return_if_size_t_overflow (len); - if (Mono_Posix_FromMmapProt (prot, &_prot) == -1) + if (Mono_Posix_FromMmapProts (prot, &_prot) == -1) return -1; return mprotect (start, (size_t) len, _prot); @@ -70,17 +88,25 @@ Mono_Posix_Syscall_msync (void *start, mph_size_t len, int flags) int Mono_Posix_Syscall_mlock (void *start, mph_size_t len) { +#if !defined(HAVE_MINCORE) + return ENOSYS; +#else mph_return_if_size_t_overflow (len); return mlock (start, (size_t) len); +#endif } int Mono_Posix_Syscall_munlock (void *start, mph_size_t len) { +#if defined(__HAIKU__) + return ENOSYS; +#else mph_return_if_size_t_overflow (len); return munlock (start, (size_t) len); +#endif } #ifdef HAVE_MREMAP @@ -96,17 +122,28 @@ Mono_Posix_Syscall_mremap (void *old_address, mph_size_t old_size, if (Mono_Posix_FromMremapFlags (flags, &_flags) == -1) return MAP_FAILED; +#if defined(linux) return mremap (old_address, (size_t) old_size, (size_t) new_size, (unsigned long) _flags); +#elif defined(__NetBSD__) + return mremap (old_address, (size_t) old_size, old_address, + (size_t) new_size, (unsigned long) _flags); +#else +#error Port me +#endif } #endif /* def HAVE_MREMAP */ int -Mono_Posix_Syscall_mincore (void *start, mph_size_t length, void *vec) +Mono_Posix_Syscall_mincore (void *start, mph_size_t length, unsigned char *vec) { +#if defined(__HAIKU__) + return ENOSYS; +#else mph_return_if_size_t_overflow (length); - return mincore (start, (size_t) length, (unsigned char*) vec); + return mincore (start, (size_t) length, (void*)vec); +#endif } #ifdef HAVE_POSIX_MADVISE @@ -132,7 +169,7 @@ Mono_Posix_Syscall_remap_file_pages (void *start, mph_size_t size, mph_return_if_size_t_overflow (size); mph_return_if_ssize_t_overflow (pgoff); - if (Mono_Posix_FromMmapProt (prot, &_prot) == -1) + if (Mono_Posix_FromMmapProts (prot, &_prot) == -1) return -1; if (Mono_Posix_FromMmapFlags (flags, &_flags) == -1) return -1;