aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorMichael Koch <konqueror@gmx.de>2003-03-02 15:57:13 +0000
committerMichael Koch <mkoch@gcc.gnu.org>2003-03-02 15:57:13 +0000
commita339cb5bd9cc8a2fc232055dd5f8a1f9f45f093c (patch)
tree7f7a771b552d63a7e8628e711227791e9c6ab053 /libjava
parent05eb3436761139129acaf9e4d035fe10e62a8c8e (diff)
downloadgcc-a339cb5bd9cc8a2fc232055dd5f8a1f9f45f093c.zip
gcc-a339cb5bd9cc8a2fc232055dd5f8a1f9f45f093c.tar.gz
gcc-a339cb5bd9cc8a2fc232055dd5f8a1f9f45f093c.tar.bz2
2003-03-02 Michael Koch <konqueror@gmx.de>
* gnu/java/nio/FileChannelImpl.java (fd): Type FileDescriptor instead of int. (lengthInternal): Removed. (FileChannelImpl): Fixed arguments, check type of file object. (size): Made it native. (implPosition): New native method. (implTruncate): New native method. (position): Implemented. (truncate): Implemented. (nio_mmap_file): Changed arguments. (nio_munmap_file): Changed arguments. (nio_msync): Changed arguments. * gnu/java/nio/natFileChannelImpl.cc (lengthInternal): Removed. (size): New method. (implPosition): New method. (implTruncate): New method. (nio_mmap_file): Changed arguments. (nio_munmap_file): Changed arguments. (nio_msync): Changed arguments. From-SVN: r63668
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog23
-rw-r--r--libjava/gnu/java/nio/FileChannelImpl.java75
-rw-r--r--libjava/gnu/java/nio/natFileChannelImpl.cc31
3 files changed, 85 insertions, 44 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 4f3af59..7d8c17b 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,5 +1,28 @@
2003-03-02 Michael Koch <konqueror@gmx.de>
+ * gnu/java/nio/FileChannelImpl.java
+ (fd): Type FileDescriptor instead of int.
+ (lengthInternal): Removed.
+ (FileChannelImpl): Fixed arguments, check type of file object.
+ (size): Made it native.
+ (implPosition): New native method.
+ (implTruncate): New native method.
+ (position): Implemented.
+ (truncate): Implemented.
+ (nio_mmap_file): Changed arguments.
+ (nio_munmap_file): Changed arguments.
+ (nio_msync): Changed arguments.
+ * gnu/java/nio/natFileChannelImpl.cc
+ (lengthInternal): Removed.
+ (size): New method.
+ (implPosition): New method.
+ (implTruncate): New method.
+ (nio_mmap_file): Changed arguments.
+ (nio_munmap_file): Changed arguments.
+ (nio_msync): Changed arguments.
+
+2003-03-02 Michael Koch <konqueror@gmx.de>
+
* java/awt/dnd/DropTargetContext.java:
Compile fix: Forgot to commit import.
diff --git a/libjava/gnu/java/nio/FileChannelImpl.java b/libjava/gnu/java/nio/FileChannelImpl.java
index 31779bb..2283540 100644
--- a/libjava/gnu/java/nio/FileChannelImpl.java
+++ b/libjava/gnu/java/nio/FileChannelImpl.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.java.nio;
import java.io.EOFException;
+import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -64,41 +65,41 @@ public class FileChannelImpl extends FileChannel
{
public long address;
public int length;
- public int fd;
+ public FileDescriptor fd;
public MappedByteBuffer buf;
public Object file_obj; // just to keep it live...
- /**
- * This method came from java.io.RandomAccessFile
- * It is private there so we will repeat it here.
- */
- private native long lengthInternal (int native_fd) throws IOException;
-
- public FileChannelImpl (int fd, Object obj)
+ public FileChannelImpl (FileDescriptor fd, boolean write, Object obj)
{
+ if (!(obj instanceof RandomAccessFile)
+ && !(obj instanceof FileInputStream)
+ && !(obj instanceof FileOutputStream))
+ throw new InternalError ();
+
this.fd = fd;
this.file_obj = obj;
}
- public long size () throws IOException
- {
- if (!isOpen ())
- throw new ClosedChannelException ();
+ 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);
- return lengthInternal (fd);
- }
+ public native long size () throws IOException;
protected void implCloseChannel() throws IOException
{
+ // FIXME
+
if (address != 0)
{
- nio_unmmap_file (fd, address, (int) length);
+ //nio_unmmap_file (fd, address, (int) length);
address = 0;
}
- // FIXME
- fd = 0;
-
if (file_obj instanceof RandomAccessFile)
{
RandomAccessFile o = (RandomAccessFile) file_obj;
@@ -121,14 +122,14 @@ public class FileChannelImpl extends FileChannel
int s = (int)size();
if (buf == null)
- {
+ {
throw new EOFException("file not mapped");
- }
+ }
for (int i=0; i<s; i++)
- {
+ {
dst.put( buf.get() );
- }
+ }
return s;
}
@@ -165,15 +166,15 @@ public class FileChannelImpl extends FileChannel
int w = 0;
if (buf == null)
- {
+ {
throw new EOFException ("file not mapped");
- }
+ }
while (src.hasRemaining ())
- {
+ {
buf.put (src.get ());
w++;
- }
+ }
return w;
}
@@ -195,14 +196,14 @@ public class FileChannelImpl extends FileChannel
public long write(ByteBuffer[] srcs, int offset, int length)
throws IOException
{
- long res = 0;
+ long result = 0;
for (int i = offset;i < offset + length;i++)
- {
- res += write (srcs[i]);
- }
+ {
+ result += write (srcs[i]);
+ }
- return res;
+ return result;
}
public MappedByteBuffer map (FileChannel.MapMode mode, long position,
@@ -252,7 +253,7 @@ public class FileChannelImpl extends FileChannel
// FIXME: What to do with metaData ?
- nio_msync (fd, address, length);
+ nio_msync (address, length);
}
public long transferTo (long position, long count, WritableByteChannel target)
@@ -322,7 +323,7 @@ public class FileChannelImpl extends FileChannel
if (!isOpen ())
throw new ClosedChannelException ();
- throw new Error ("not implemented");
+ return implPosition ();
}
public FileChannel position (long newPosition)
@@ -334,7 +335,7 @@ public class FileChannelImpl extends FileChannel
if (!isOpen ())
throw new ClosedChannelException ();
- throw new Error ("not implemented");
+ return implPosition (newPosition);
}
public FileChannel truncate (long size)
@@ -348,10 +349,6 @@ public class FileChannelImpl extends FileChannel
// FIXME: check for NonWritableChannelException
- throw new Error ("not implemented");
+ return implTruncate (size);
}
-
- private static native long nio_mmap_file (int fd, long pos, int size, int mode);
- private static native void nio_unmmap_file (int fd, long address, int size);
- private static native void nio_msync (int fd, long address, int length);
}
diff --git a/libjava/gnu/java/nio/natFileChannelImpl.cc b/libjava/gnu/java/nio/natFileChannelImpl.cc
index 8738630..8ba8382 100644
--- a/libjava/gnu/java/nio/natFileChannelImpl.cc
+++ b/libjava/gnu/java/nio/natFileChannelImpl.cc
@@ -25,29 +25,50 @@ details. */
#endif
#include <gnu/java/nio/FileChannelImpl.h>
+#include <java/io/FileDescriptor.h>
#include <java/io/IOException.h>
#include <java/nio/channels/FileChannel.h>
jlong
-gnu::java::nio::FileChannelImpl::lengthInternal (jint fd)
+gnu::java::nio::FileChannelImpl::size ()
{
- throw new ::java::io::IOException (JvNewStringUTF ("lengthInternal not implemented"));
+ return fd->length ();
}
jlong
-gnu::java::nio::FileChannelImpl::nio_mmap_file (jint, jlong, jint, jint)
+gnu::java::nio::FileChannelImpl::implPosition ()
+{
+ return fd->getFilePointer ();
+}
+
+java::nio::channels::FileChannel*
+gnu::java::nio::FileChannelImpl::implPosition (jlong newPosition)
+{
+ fd->seek (newPosition, ::java::io::FileDescriptor::SET, true);
+ return this;
+}
+
+java::nio::channels::FileChannel*
+gnu::java::nio::FileChannelImpl::implTruncate (jlong size)
+{
+ fd->setLength (size);
+ return this;
+}
+
+jlong
+gnu::java::nio::FileChannelImpl::nio_mmap_file (jlong, jlong, jint)
{
throw new ::java::io::IOException (JvNewStringUTF ("mmap not implemented"));
}
void
-gnu::java::nio::FileChannelImpl::nio_unmmap_file (jint, jlong, jint)
+gnu::java::nio::FileChannelImpl::nio_unmmap_file (jlong, jint)
{
throw new ::java::io::IOException (JvNewStringUTF ("munmap not implemented"));
}
void
-gnu::java::nio::FileChannelImpl::nio_msync (jint, jlong, jint)
+gnu::java::nio::FileChannelImpl::nio_msync (jlong, jint)
{
throw new ::java::io::IOException (JvNewStringUTF ("msync not implemented"));
}