From 54c99af1553e4093dd007c19eff81a7ae55297b3 Mon Sep 17 00:00:00 2001 From: Michael Koch Date: Thu, 20 Mar 2003 11:14:35 +0000 Subject: 2003-03-20 Michael Koch * gnu/java/nio/FileChannelImpl.java (address): Removed. (map_address): New member variable. (length): Make it package private. (fd): Make it package private. (buf): Make it package private. (file_obj): Make it package private. (FileChannelImpl): New constructor. (nio_mmap_file): Use RawData instead of long. (nio_munmap_file): Use RawData instead of long. (nio_msync): Use RawData instead of long. (implCloseChannel): New implementation using map_address. (read): Reformated. (map): Implemented. (create_direct_mapped_buffer): Implemented, use RawData, throws IOException. (force): Use map_address instead of address. * gnu/java/nio/MappedByteFileBuffer.java (address): Removed. (map_address): New member variable. (MappedByteFileBuffer): Use map_address instead of address, reformated. (several methods): Use map_address instead of address, replaced long with RawData where appropriate. * gnu/java/nio/natFileChannelImpl.cc (nio_mmap_file): Replaced long with RawData. (nio_munmap_file): Replaced long with RawData. (nio_msync): Replaced long with RawData. * gnu/java/nio/natMappedByteFileBuffer.cc (several methods): Replaced long with RawData where appropriate. From-SVN: r64612 --- libjava/gnu/java/nio/FileChannelImpl.java | 70 +++++++++++++++++-------------- 1 file changed, 38 insertions(+), 32 deletions(-) (limited to 'libjava/gnu/java/nio/FileChannelImpl.java') diff --git a/libjava/gnu/java/nio/FileChannelImpl.java b/libjava/gnu/java/nio/FileChannelImpl.java index 22835401816..c233d8210a7 100644 --- a/libjava/gnu/java/nio/FileChannelImpl.java +++ b/libjava/gnu/java/nio/FileChannelImpl.java @@ -52,6 +52,7 @@ import java.nio.channels.NonReadableChannelException; import java.nio.channels.NonWritableChannelException; import java.nio.channels.ReadableByteChannel; import java.nio.channels.WritableByteChannel; +import gnu.gcj.RawData; /** * This file is not user visible ! @@ -63,11 +64,14 @@ import java.nio.channels.WritableByteChannel; public class FileChannelImpl extends FileChannel { - public long address; - public int length; - public FileDescriptor fd; - public MappedByteBuffer buf; - public Object file_obj; // just to keep it live... + // GCJ LOCAL: This variable stores a pointer to the memory + // where the file is mapped. + RawData map_address; + + int length; + FileDescriptor fd; + MappedByteBuffer buf; + Object file_obj; // just to keep it live... public FileChannelImpl (FileDescriptor fd, boolean write, Object obj) { @@ -80,24 +84,27 @@ public class FileChannelImpl extends FileChannel this.file_obj = obj; } + public FileChannelImpl () + { + this (new FileDescriptor (-1), true, null); + } + private native long implPosition (); private native FileChannel implPosition (long newPosition); private native FileChannel implTruncate (long size); - private native long nio_mmap_file (long pos, long size, int mode); - private native void nio_unmmap_file (long address, int size); - private native void nio_msync (long address, int length); + private native RawData nio_mmap_file (long pos, long size, int mode); + private native void nio_unmmap_file (RawData map_address, int size); + private native void nio_msync (RawData map_address, int length); public native long size () throws IOException; protected void implCloseChannel() throws IOException { - // FIXME - - if (address != 0) + if (map_address != null) { - //nio_unmmap_file (fd, address, (int) length); - address = 0; + nio_unmmap_file (map_address, (int) length); + map_address = null; } if (file_obj instanceof RandomAccessFile) @@ -126,9 +133,9 @@ public class FileChannelImpl extends FileChannel throw new EOFException("file not mapped"); } - for (int i=0; i Integer.MAX_VALUE) throw new IllegalArgumentException (); -// int cmode = mode.m; -// address = nio_mmap_file (fd, position, size, cmode); -// length = size; -// buf = new MappedByteFileBuffer (this); -// return buf; - return null; + int cmode = mode.m; + map_address = nio_mmap_file (position, size, cmode); + length = (int) size; + buf = new MappedByteFileBuffer (this); + return buf; } - static MappedByteBuffer create_direct_mapped_buffer (long address, + static MappedByteBuffer create_direct_mapped_buffer (RawData map_address, long length) + throws IOException { -// FileChannelImpl ch = new FileChannelImpl (-1, null); -// ch.address = address; -// ch.length = (int) length; -// ch.buf = new MappedByteFileBuffer (ch); -// return ch.buf; - return null; + FileChannelImpl ch = new FileChannelImpl (); + ch.map_address = map_address; + ch.length = (int) length; + ch.buf = new MappedByteFileBuffer (ch); + return ch.buf; } public long write (ByteBuffer[] srcs) @@ -253,7 +259,7 @@ public class FileChannelImpl extends FileChannel // FIXME: What to do with metaData ? - nio_msync (address, length); + nio_msync (map_address, length); } public long transferTo (long position, long count, WritableByteChannel target) -- cgit v1.2.3