2003-03-02 Michael Koch <konqueror@gmx.de>
authorMichael Koch <konqueror@gmx.de>
Sun, 2 Mar 2003 15:57:13 +0000 (15:57 +0000)
committerMichael Koch <mkoch@gcc.gnu.org>
Sun, 2 Mar 2003 15:57:13 +0000 (15:57 +0000)
* 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

libjava/ChangeLog
libjava/gnu/java/nio/FileChannelImpl.java
libjava/gnu/java/nio/natFileChannelImpl.cc

index 4f3af596055310e7afd882b9b8147f715410197d..7d8c17bf9d14cc977bec57709625dab647d31eb9 100644 (file)
@@ -1,3 +1,26 @@
+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:
index 31779bbc64e78ba3939be0cd7ed1becf116f0c7c..22835401816ceb6fd2154a552e0cb4ce5628060a 100644 (file)
@@ -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);
 }
index 87386305bc685be04208aecdd2254dc6ceb44c1b..8ba838255b59313e6472a5380c7c73386b5a4faa 100644 (file)
@@ -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"));
 }