--- IO-AIO/AIO.xs 2010/09/13 01:59:05 1.173 +++ IO-AIO/AIO.xs 2011/01/07 21:47:15 1.179 @@ -18,7 +18,7 @@ #include #include -#if _POSIX_MEMLOCK || _POSIX_MAPPED_FILES +#if _POSIX_MEMLOCK || _POSIX_MEMLOCK_RANGE || _POSIX_MAPPED_FILES # include #endif @@ -120,11 +120,11 @@ #define EIO_NO_WRAPPERS 1 +#include "libeio/config.h" #include "libeio/eio.h" #ifndef POSIX_FADV_NORMAL # define POSIX_FADV_NORMAL 0 -# define NO_FADVISE 1 #endif #ifndef POSIX_FADV_SEQUENTIAL # define POSIX_FADV_SEQUENTIAL 0 @@ -142,13 +142,12 @@ # define POSIX_FADV_DONTNEED 0 #endif -#if _XOPEN_SOURCE < 600 || NO_FADVISE +#if !HAVE_POSIX_FADVISE # define posix_fadvise(a,b,c,d) errno = ENOSYS /* also return ENOSYS */ #endif #ifndef POSIX_MADV_NORMAL # define POSIX_MADV_NORMAL 0 -# define NO_MADVISE 1 #endif #ifndef POSIX_MADV_SEQUENTIAL # define POSIX_MADV_SEQUENTIAL 0 @@ -163,7 +162,7 @@ # define POSIX_MADV_DONTNEED 0 #endif -#if _XOPEN_SOURCE < 600 || NO_MADVISE +#if !HAVE_POSIX_MADVISE # define posix_madvise(a,b,c) errno = ENOSYS /* also return ENOSYS */ #endif @@ -356,6 +355,7 @@ { sv_result = sv_result_cache; sv_result_cache = 0; SvIV_set (sv_result, req->result); + SvIOK_only (sv_result); } else { @@ -529,7 +529,7 @@ } break; - case EIO_DUP2: /* EIO_DUP2 actually means aio_close(), su fudge result value */ + case EIO_DUP2: /* EIO_DUP2 actually means aio_close(), so fudge result value */ if (req->result > 0) SvIV_set (sv_result, 0); /* FALLTHROUGH */ @@ -639,7 +639,15 @@ #if !_POSIX_MAPPED_FILES # define mmap(addr,length,prot,flags,fd,offs) (errno = ENOSYS, -1) # define munmap(addr,length) (errno = ENOSYS, -1) +#endif + +#if !_POSIX_MEMORY_PROTECTION # define mprotect(addr,len,prot) (errno = ENOSYS, -1) +# define PROT_NONE 0 +# define PROT_WRITE 0 +# define MAP_PRIVATE 0 +# define MAP_SHARED 0 +# define MAP_FIXED 0 #endif #define MMAP_MAGIC PERL_MAGIC_ext @@ -1521,7 +1529,7 @@ addr = (void *)(((intptr_t)addr) + offset); eio_page_align (&addr, &len); -#if _POSIX_MEMLOCK +#if _POSIX_MEMLOCK_RANGE RETVAL = munlock (addr, len); #else RETVAL = ((errno = ENOSYS), -1);