diff options
| author | andreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-03-13 23:07:58 +0000 |
|---|---|---|
| committer | andreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-03-13 23:07:58 +0000 |
| commit | 0f4a3a798c1e0cc8cad013c987dd40bad0f8ee75 (patch) | |
| tree | f3ebe9ec8cc1764ebfe3d5305ac24af28dd15aad /libjava/gnu/java/nio/channels | |
| parent | efd7a05ec9b878761185ae1540df8f17c345a85c (diff) | |
| download | ppe42-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.cc | 24 |
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 } |

