From 0f4a3a798c1e0cc8cad013c987dd40bad0f8ee75 Mon Sep 17 00:00:00 2001 From: andreast Date: Sat, 13 Mar 2004 23:07:58 +0000 Subject: 2004-03-14 Andreas Tobler * gnu/java/nio/channels/natFileChannelPosix.cc: Implement munmap_adaptor and msync_adaptor for older POSIX_C_SOURCES specs. (MappedByteBufferImpl::unmapImpl): Use munmap_adaptor. (MappedByteBufferImpl::forceImpl): Use msync_adptor. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@79462 138bc75d-0d04-0410-961f-82ee72b054a4 --- .../gnu/java/nio/channels/natFileChannelPosix.cc | 24 ++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'libjava/gnu/java/nio/channels') diff --git a/libjava/gnu/java/nio/channels/natFileChannelPosix.cc b/libjava/gnu/java/nio/channels/natFileChannelPosix.cc index 86537872821..44beae6641d 100644 --- a/libjava/gnu/java/nio/channels/natFileChannelPosix.cc +++ b/libjava/gnu/java/nio/channels/natFileChannelPosix.cc @@ -56,6 +56,26 @@ details. */ #ifdef HAVE_MMAP #include + +// Use overload resolution to find out the argument types. +// E.g. Solaris 2.6 uses different argument types for munmap and msync. +// This is in case _POSIX_C_SOURCES is smaller than 3. + +template +static inline int +munmap_adaptor(int (*munmap)(T_implPtr caddr, T_implLen sizet), + void* caddr, size_t sizet) +{ + return munmap ((T_implPtr) caddr, (T_implLen) sizet); +} + +template +static inline int +msync_adaptor(int (*msync)(T_implPtr caddr, T_implLen sizet, T_msync msynct), + void* caddr, size_t sizet, int msynct) +{ + return msync ((T_implPtr) caddr, (T_implLen) sizet, (T_msync) msynct); +} #endif using gnu::gcj::RawData; @@ -498,7 +518,7 @@ void MappedByteBufferImpl::unmapImpl () { #if defined(HAVE_MMAP) - munmap((void*) implPtr, implLen); + munmap_adaptor(munmap, implPtr, implLen); #endif } @@ -517,6 +537,6 @@ void MappedByteBufferImpl::forceImpl () { #if defined(HAVE_MMAP) - ::msync((void*) implPtr, implLen, MS_SYNC); + ::msync_adaptor(msync, implPtr, implLen, MS_SYNC); #endif } -- cgit v1.2.3