OSDN Git Service

2004-03-14 Andreas Tobler <a.tobler@schweiz.ch>
authorandreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 13 Mar 2004 23:07:58 +0000 (23:07 +0000)
committerandreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 13 Mar 2004 23:07:58 +0000 (23:07 +0000)
* 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

libjava/ChangeLog
libjava/gnu/java/nio/channels/natFileChannelPosix.cc

index a051d73..b3199d9 100644 (file)
@@ -1,3 +1,10 @@
+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.
+
 2004-03-12  Michael Koch  <konqueror@gmx.de>
 
        * java/text/DateFormatSymbols.java: Fixed file name in copyright.
index 8653787..44beae6 100644 (file)
@@ -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
 }