summaryrefslogtreecommitdiffstats
path: root/libjava/gnu/java/nio/channels
diff options
context:
space:
mode:
authorandreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-13 23:07:58 +0000
committerandreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-13 23:07:58 +0000
commit0f4a3a798c1e0cc8cad013c987dd40bad0f8ee75 (patch)
treef3ebe9ec8cc1764ebfe3d5305ac24af28dd15aad /libjava/gnu/java/nio/channels
parentefd7a05ec9b878761185ae1540df8f17c345a85c (diff)
downloadppe42-gcc-0f4a3a798c1e0cc8cad013c987dd40bad0f8ee75.tar.gz
ppe42-gcc-0f4a3a798c1e0cc8cad013c987dd40bad0f8ee75.zip
2004-03-14 Andreas Tobler <a.tobler@schweiz.ch>
* 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
Diffstat (limited to 'libjava/gnu/java/nio/channels')
-rw-r--r--libjava/gnu/java/nio/channels/natFileChannelPosix.cc24
1 files changed, 22 insertions, 2 deletions
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 <sys/mman.h>
+
+// 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 <typename T_implPtr, typename T_implLen>
+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 <typename T_implPtr, typename T_implLen, typename T_msync>
+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
}
OpenPOWER on IntegriCloud