This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

FYI: Patch: java.nio


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi list,


I commited the attached patch to fix an issue with 
package-privateness. This patch should make it possible to compile 
java.nio with the packag-private patch from Ranjit working.


Michael
- -- 
Homepage: http://www.worldforge.org/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE/EY9oWSOgCCdjSDsRAowAAJ91gNKFucQfmmhNJiw+nnV5ADrKtwCghxpJ
SZSchCJIcS5tI9Vs1sqzVsU=
=a8zl
-----END PGP SIGNATURE-----
Index: ChangeLog
===================================================================
RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v
retrieving revision 1.2029
diff -u -b -B -r1.2029 ChangeLog
--- ChangeLog	13 Jul 2003 15:29:10 -0000	1.2029
+++ ChangeLog	13 Jul 2003 16:45:46 -0000
@@ -1,5 +1,27 @@
 2003-07-13  Michael Koch  <konqueror@gmx.de>
 
+	* gnu/java/nio/FileChannelImpl.java,
+	gnu/java/nio/natFileChannelImpl.cc: Removed.
+	* java/io/FileInputStream.java,
+	java/io/FileOutputStream.java,
+	java/io/RandomAccessFile.java,
+	java/nio/MappedByteBufferImpl.java:
+	Import java.nio.channels.FileChannelImpl instead of
+	gnu.java.nio.FileChannelImpl.
+	* java/nio/channels/FileChannelImpl.java,
+	java/nio/channels/natFileChannelImpl.cc:
+	New files.
+	* Makefile.am
+	(ordinary_java_source_files):
+	Removed gnu/java/nio/FileChannelImpl.java and added
+	java/nio/channels/FileChannelImpl.java.
+	(nat source_files):
+	Removed gnu/java/nio/natFileChannelImpl.cc and added
+	java/nio/channels/natFileChannelImpl.cc.
+	* Makefile.in: Regenerated.
+
+2003-07-13  Michael Koch  <konqueror@gmx.de>
+
 	* javax/swing/plaf/basic/BasicBorders.java,
 	javax/swing/plaf/basic/BasicLabelUI.java,
 	javax/swing/plaf/basic/BasicLookAndFeel.java,
Index: Makefile.am
===================================================================
RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v
retrieving revision 1.307
diff -u -b -B -r1.307 Makefile.am
--- Makefile.am	13 Jul 2003 14:39:39 -0000	1.307
+++ Makefile.am	13 Jul 2003 16:45:49 -0000
@@ -2109,7 +2109,6 @@
 gnu/java/locale/LocaleInformation_zh_TW.java \
 gnu/java/math/MPN.java \
 gnu/java/nio/DatagramChannelImpl.java \
-gnu/java/nio/FileChannelImpl.java \
 gnu/java/nio/FileLockImpl.java \
 gnu/java/nio/PipeImpl.java \
 gnu/java/nio/SelectionKeyImpl.java \
@@ -2270,6 +2269,7 @@
 java/nio/channels/ConnectionPendingException.java \
 java/nio/channels/DatagramChannel.java \
 java/nio/channels/FileChannel.java \
+java/nio/channels/FileChannelImpl.java \
 java/nio/channels/FileLock.java \
 java/nio/channels/FileLockInterruptionException.java \
 java/nio/channels/GatheringByteChannel.java \
@@ -2576,7 +2576,6 @@
 gnu/gcj/runtime/natStringBuffer.cc \
 gnu/gcj/runtime/natVMClassLoader.cc \
 gnu/java/awt/natEmbeddedWindow.cc \
-gnu/java/nio/natFileChannelImpl.cc \
 gnu/java/nio/natFileLockImpl.cc \
 gnu/java/nio/natSelectorImpl.cc \
 java/io/natFile.cc \
@@ -2608,6 +2607,7 @@
 java/net/natPlainDatagramSocketImpl.cc \
 java/net/natPlainSocketImpl.cc \
 java/nio/natDirectByteBufferImpl.cc \
+java/nio/channels/natFileChannelImpl.cc \
 java/text/natCollator.cc \
 java/util/natResourceBundle.cc \
 java/util/natTimeZone.cc \
Index: Makefile.in
===================================================================
RCS file: /cvs/gcc/gcc/libjava/Makefile.in,v
retrieving revision 1.332
diff -u -b -B -r1.332 Makefile.in
--- Makefile.in	13 Jul 2003 14:39:40 -0000	1.332
+++ Makefile.in	13 Jul 2003 16:46:04 -0000
@@ -1873,7 +1873,6 @@
 gnu/java/locale/LocaleInformation_zh_TW.java \
 gnu/java/math/MPN.java \
 gnu/java/nio/DatagramChannelImpl.java \
-gnu/java/nio/FileChannelImpl.java \
 gnu/java/nio/FileLockImpl.java \
 gnu/java/nio/PipeImpl.java \
 gnu/java/nio/SelectionKeyImpl.java \
@@ -2034,6 +2033,7 @@
 java/nio/channels/ConnectionPendingException.java \
 java/nio/channels/DatagramChannel.java \
 java/nio/channels/FileChannel.java \
+java/nio/channels/FileChannelImpl.java \
 java/nio/channels/FileLock.java \
 java/nio/channels/FileLockInterruptionException.java \
 java/nio/channels/GatheringByteChannel.java \
@@ -2339,7 +2339,6 @@
 gnu/gcj/runtime/natStringBuffer.cc \
 gnu/gcj/runtime/natVMClassLoader.cc \
 gnu/java/awt/natEmbeddedWindow.cc \
-gnu/java/nio/natFileChannelImpl.cc \
 gnu/java/nio/natFileLockImpl.cc \
 gnu/java/nio/natSelectorImpl.cc \
 java/io/natFile.cc \
@@ -2371,6 +2370,7 @@
 java/net/natPlainDatagramSocketImpl.cc \
 java/net/natPlainSocketImpl.cc \
 java/nio/natDirectByteBufferImpl.cc \
+java/nio/channels/natFileChannelImpl.cc \
 java/text/natCollator.cc \
 java/util/natResourceBundle.cc \
 java/util/natTimeZone.cc \
@@ -2515,14 +2515,13 @@
 gnu/gcj/runtime/natNameFinder.lo gnu/gcj/runtime/natSharedLibLoader.lo \
 gnu/gcj/runtime/natStackTrace.lo gnu/gcj/runtime/natStringBuffer.lo \
 gnu/gcj/runtime/natVMClassLoader.lo gnu/java/awt/natEmbeddedWindow.lo \
-gnu/java/nio/natFileChannelImpl.lo gnu/java/nio/natFileLockImpl.lo \
-gnu/java/nio/natSelectorImpl.lo java/io/natFile.lo \
-java/io/natFileDescriptor.lo java/io/natObjectInputStream.lo \
-java/io/natVMObjectStreamClass.lo java/lang/natCharacter.lo \
-java/lang/natClass.lo java/lang/natClassLoader.lo \
-java/lang/natConcreteProcess.lo java/lang/natDouble.lo \
-java/lang/natFloat.lo java/lang/natMath.lo java/lang/natObject.lo \
-java/lang/natRuntime.lo java/lang/natString.lo \
+gnu/java/nio/natFileLockImpl.lo gnu/java/nio/natSelectorImpl.lo \
+java/io/natFile.lo java/io/natFileDescriptor.lo \
+java/io/natObjectInputStream.lo java/io/natVMObjectStreamClass.lo \
+java/lang/natCharacter.lo java/lang/natClass.lo \
+java/lang/natClassLoader.lo java/lang/natConcreteProcess.lo \
+java/lang/natDouble.lo java/lang/natFloat.lo java/lang/natMath.lo \
+java/lang/natObject.lo java/lang/natRuntime.lo java/lang/natString.lo \
 java/lang/natStringBuffer.lo java/lang/natSystem.lo \
 java/lang/natThread.lo java/lang/natVMSecurityManager.lo \
 java/lang/ref/natReference.lo java/lang/reflect/natArray.lo \
@@ -2530,7 +2529,8 @@
 java/lang/reflect/natMethod.lo java/lang/reflect/natProxy.lo \
 java/net/natNetworkInterface.lo java/net/natInetAddress.lo \
 java/net/natPlainDatagramSocketImpl.lo java/net/natPlainSocketImpl.lo \
-java/nio/natDirectByteBufferImpl.lo java/text/natCollator.lo \
+java/nio/natDirectByteBufferImpl.lo \
+java/nio/channels/natFileChannelImpl.lo java/text/natCollator.lo \
 java/util/natResourceBundle.lo java/util/natTimeZone.lo \
 java/util/zip/natDeflater.lo java/util/zip/natInflater.lo
 lib_org_xml_sax_la_LDFLAGS = 
@@ -2981,9 +2981,8 @@
 .deps/gnu/java/locale/LocaleInformation_zh_SG.P \
 .deps/gnu/java/locale/LocaleInformation_zh_TW.P \
 .deps/gnu/java/math/MPN.P .deps/gnu/java/nio/DatagramChannelImpl.P \
-.deps/gnu/java/nio/FileChannelImpl.P .deps/gnu/java/nio/FileLockImpl.P \
-.deps/gnu/java/nio/PipeImpl.P .deps/gnu/java/nio/SelectionKeyImpl.P \
-.deps/gnu/java/nio/SelectorImpl.P \
+.deps/gnu/java/nio/FileLockImpl.P .deps/gnu/java/nio/PipeImpl.P \
+.deps/gnu/java/nio/SelectionKeyImpl.P .deps/gnu/java/nio/SelectorImpl.P \
 .deps/gnu/java/nio/SelectorProviderImpl.P \
 .deps/gnu/java/nio/ServerSocketChannelImpl.P \
 .deps/gnu/java/nio/SocketChannelImpl.P \
@@ -2995,9 +2994,7 @@
 .deps/gnu/java/nio/charset/UTF_16Decoder.P \
 .deps/gnu/java/nio/charset/UTF_16Encoder.P \
 .deps/gnu/java/nio/charset/UTF_16LE.P \
-.deps/gnu/java/nio/charset/UTF_8.P \
-.deps/gnu/java/nio/natFileChannelImpl.P \
-.deps/gnu/java/nio/natFileLockImpl.P \
+.deps/gnu/java/nio/charset/UTF_8.P .deps/gnu/java/nio/natFileLockImpl.P \
 .deps/gnu/java/nio/natSelectorImpl.P \
 .deps/gnu/java/rmi/RMIMarshalledObjectInputStream.P \
 .deps/gnu/java/rmi/RMIMarshalledObjectOutputStream.P \
@@ -3527,6 +3524,7 @@
 .deps/java/nio/channels/ConnectionPendingException.P \
 .deps/java/nio/channels/DatagramChannel.P \
 .deps/java/nio/channels/FileChannel.P \
+.deps/java/nio/channels/FileChannelImpl.P \
 .deps/java/nio/channels/FileLock.P \
 .deps/java/nio/channels/FileLockInterruptionException.P \
 .deps/java/nio/channels/GatheringByteChannel.P \
@@ -3550,6 +3548,7 @@
 .deps/java/nio/channels/UnresolvedAddressException.P \
 .deps/java/nio/channels/UnsupportedAddressTypeException.P \
 .deps/java/nio/channels/WritableByteChannel.P \
+.deps/java/nio/channels/natFileChannelImpl.P \
 .deps/java/nio/channels/spi/AbstractInterruptibleChannel.P \
 .deps/java/nio/channels/spi/AbstractSelectableChannel.P \
 .deps/java/nio/channels/spi/AbstractSelectionKey.P \
Index: gnu/java/nio/FileChannelImpl.java
===================================================================
RCS file: gnu/java/nio/FileChannelImpl.java
diff -N gnu/java/nio/FileChannelImpl.java
--- gnu/java/nio/FileChannelImpl.java	27 Jun 2003 13:41:25 -0000	1.9
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,399 +0,0 @@
-/* FileChannelImpl.java -- 
-   Copyright (C) 2002 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING.  If not, write to the
-Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-02111-1307 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library.  Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module.  An independent module is a module which is not derived from
-or based on this library.  If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so.  If you do not wish to do so, delete this
-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;
-import java.io.RandomAccessFile;
-import java.nio.ByteBuffer;
-import java.nio.MappedByteBuffer;
-import java.nio.MappedByteBufferImpl;
-import java.nio.channels.ClosedChannelException;
-import java.nio.channels.FileChannel;
-import java.nio.channels.FileLock;
-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 !
- * But alas, Java does not have a concept of friendly packages
- * so this class is public. 
- * Instances of this class are created by invoking getChannel
- * Upon a Input/Output/RandomAccessFile object.
- */
-
-public class FileChannelImpl extends FileChannel
-{
-  public 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)
-  {
-    if (!(obj instanceof RandomAccessFile)
-        && !(obj instanceof FileInputStream)
-        && !(obj instanceof FileOutputStream))
-      throw new InternalError ();
-
-    this.fd = fd;
-    this.file_obj = obj;
-  }
-
-  public FileChannelImpl ()
-  {
-    this (new FileDescriptor (), true, null);
-  }
-
-  private native long implPosition ();
-  private native FileChannel implPosition (long newPosition);
-  private native FileChannel implTruncate (long size);
-  
-  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
-  {
-    if (map_address != null)
-      {
-        nio_unmmap_file (map_address, (int) length);
-        map_address = null;
-      }
-
-    if (file_obj instanceof RandomAccessFile)
-      {
-        RandomAccessFile o = (RandomAccessFile) file_obj;
-        o.close();
-      }
-    else if (file_obj instanceof FileInputStream)
-      {
-        FileInputStream o = (FileInputStream) file_obj;
-        o.close();
-      }
-    else if (file_obj instanceof FileOutputStream)
-      {
-        FileOutputStream o = (FileOutputStream) file_obj;
-        o.close();
-      }
-  }
-
-  public int read (ByteBuffer dst) throws IOException
-  {
-    // Check if file is mapped into memory.
-    if (buf != null)
-      {
-	// FIXME: implement this
-        throw new Error ("Accessing mapped buffers not implemented.");
-      }
-
-    // File not mapped, access it directly.
-    return implRead (dst);
-  }
-
-  public int read (ByteBuffer dst, long position)
-    throws IOException
-  {
-    if (position < 0)
-      throw new IllegalArgumentException ();
-
-    if (!isOpen ())
-      throw new ClosedChannelException ();
-   
-    if (file_obj instanceof FileOutputStream)
-      throw new NonReadableChannelException ();
-
-    int result;
-    long oldPosition;
-
-    oldPosition = implPosition ();
-    result = implRead (dst);
-    implPosition (oldPosition);
-    
-    return result;
-  }
-
-  private int implRead (ByteBuffer dst) throws IOException
-  {
-    int result;
-    byte[] buffer = new byte [dst.remaining ()];
-    
-    result = implRead (buffer, 0, buffer.length);
-    dst.put (buffer, 0, result);
-
-    return result;
-  }
-  
-  private native int implRead (byte[] buffer, int offset, int length)
-    throws IOException;
-
-  public long read (ByteBuffer[] dsts, int offset, int length)
-    throws IOException
-  {
-    long result = 0;
-
-    for (int i = offset; i < offset + length; i++)
-      {
-        result += read (dsts [i]);
-      }
-
-    return result;
-  }
-
-  public int write (ByteBuffer src) throws IOException
-  {
-    // Check if file is mapped into memory.
-    if (buf != null)
-      {
-	// FIXME: implement this
-        throw new Error ("Accessing mapped buffers not implemented.");
-      }
-    
-    // File not mapped, access it directly.
-    return implWrite (src);
-  }
-    
-  public int write (ByteBuffer src, long position)
-    throws IOException
-  {
-    if (position < 0)
-      throw new IllegalArgumentException ();
-
-    if (!isOpen ())
-      throw new ClosedChannelException ();
-    
-    if (file_obj instanceof FileInputStream)
-       throw new NonWritableChannelException ();
-
-    int result;
-    long oldPosition;
-
-    oldPosition = implPosition ();
-    result = implWrite (src);
-    implPosition (oldPosition);
-    
-    return result;
-  }
-
-  private int implWrite (ByteBuffer src) throws IOException
-  {
-    byte[] buffer = new byte [src.remaining ()];
-    
-    src.get (buffer, 0, buffer.length);
-    return implWrite (buffer, 0, buffer.length);
-  }
-  
-  private native int implWrite (byte[] buffer, int offset, int length)
-    throws IOException;
-  
-  public long write(ByteBuffer[] srcs, int offset, int length)
-    throws IOException
-  {
-    long result = 0;
-
-    for (int i = offset;i < offset + length;i++)
-      {
-        result += write (srcs[i]);
-      }
-    
-    return result;
-  }
-				   
-  public MappedByteBuffer map (FileChannel.MapMode mode, long position,
-                               long size)
-    throws IOException
-  {
-    if ((mode != MapMode.READ_ONLY
-         && mode != MapMode.READ_WRITE
-         && mode != MapMode.PRIVATE)
-        || position < 0
-        || size < 0
-        || size > Integer.MAX_VALUE)
-      throw new IllegalArgumentException ();
-    
-    // FIXME: Make this working.
-    int cmode = mode.m;
-    map_address = nio_mmap_file (position, size, cmode);
-    length = (int) size;
-    buf = new MappedByteBufferImpl (this);
-    return buf;
-  }
-
-  static MappedByteBuffer create_direct_mapped_buffer (RawData map_address,
-                                                       long length)
-    throws IOException
-  {
-    FileChannelImpl ch = new FileChannelImpl ();
-    ch.map_address = map_address;
-    ch.length = (int) length;
-    ch.buf = new MappedByteBufferImpl (ch);
-    return ch.buf;			 
-  }
-
-  /**
-   * msync with the disk
-   */
-  public void force (boolean metaData) throws IOException
-  {
-    if (!isOpen ())
-      throw new ClosedChannelException ();
-
-    // FIXME: What to do with metaData ?
-    
-    nio_msync (map_address, length);
-  }
-
-  public long transferTo (long position, long count, WritableByteChannel target)
-    throws IOException
-  {
-    if (position < 0
-        || count < 0)
-      throw new IllegalArgumentException ();
-
-    if (!isOpen ())
-      throw new ClosedChannelException ();
-
-    if (file_obj instanceof FileOutputStream)
-       throw new NonReadableChannelException ();
-   
-    // XXX: count needs to be casted from long to int. Dataloss ?
-    ByteBuffer buffer = ByteBuffer.allocate ((int) count);
-    read (buffer, position);
-    return target.write (buffer);
-  }
-
-  public long transferFrom (ReadableByteChannel src, long position, long count)
-    throws IOException
-  {
-    if (position < 0
-        || count < 0)
-      throw new IllegalArgumentException ();
-
-    if (!isOpen ())
-      throw new ClosedChannelException ();
-
-    if (file_obj instanceof FileInputStream)
-       throw new NonWritableChannelException ();
-
-    // XXX: count needs to be casted from long to int. Dataloss ?
-    ByteBuffer buffer = ByteBuffer.allocate ((int) count);
-    src.read (buffer);
-    return write (buffer, position);
-  }
-
-  public FileLock lock (long position, long size, boolean shared)
-    throws IOException
-  {
-    if (position < 0
-        || size < 0)
-      throw new IllegalArgumentException ();
-
-    if (!isOpen ())
-      throw new ClosedChannelException ();
-
-    if (shared &&
-        file_obj instanceof FileOutputStream)
-      throw new NonReadableChannelException ();
-	
-    if (!shared &&
-        file_obj instanceof FileInputStream)
-      throw new NonWritableChannelException ();
-	
-    throw new Error ("Not implemented");
-  }
-  
-  public FileLock tryLock (long position, long size, boolean shared)
-    throws IOException
-  {
-    if (position < 0
-        || size < 0)
-      throw new IllegalArgumentException ();
-
-    if (!isOpen ())
-      throw new ClosedChannelException ();
-
-    throw new Error ("Not implemented");
-  }
-
-  public long position ()
-    throws IOException
-  {
-    if (!isOpen ())
-      throw new ClosedChannelException ();
-
-    return implPosition ();
-  }
-  
-  public FileChannel position (long newPosition)
-    throws IOException
-  {
-    if (newPosition < 0)
-      throw new IllegalArgumentException ();
-
-    if (!isOpen ())
-      throw new ClosedChannelException ();
-
-    return implPosition (newPosition);
-  }
-  
-  public FileChannel truncate (long size)
-    throws IOException
-  {
-    if (size < 0)
-      throw new IllegalArgumentException ();
-
-    if (!isOpen ())
-      throw new ClosedChannelException ();
-
-    if (file_obj instanceof FileInputStream)
-       throw new NonWritableChannelException ();
-
-    return implTruncate (size);
-  }
-}
Index: gnu/java/nio/natFileChannelImpl.cc
===================================================================
RCS file: gnu/java/nio/natFileChannelImpl.cc
diff -N gnu/java/nio/natFileChannelImpl.cc
--- gnu/java/nio/natFileChannelImpl.cc	19 Jun 2003 09:33:58 -0000	1.7
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,94 +0,0 @@
-// natFileChannelImpl.cc
-
-/* Copyright (C) 2003  Free Software Foundation
-
-   This file is part of libgcj.
-
-This software is copyrighted work licensed under the terms of the
-Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
-details.  */
-
-#include <config.h>
-
-#include <jvm.h>
-
-#include <errno.h>
-#include <string.h>
-#include <sys/types.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-#include <gnu/gcj/RawData.h>
-#include <gnu/java/nio/FileChannelImpl.h>
-#include <java/io/FileDescriptor.h>
-#include <java/io/IOException.h>
-#include <java/nio/ByteBuffer.h>
-#include <java/nio/channels/FileChannel.h>
-
-jlong
-gnu::java::nio::FileChannelImpl::size ()
-{
-  return fd->getLength ();
-}
-
-jlong
-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;
-}
-
-jint
-gnu::java::nio::FileChannelImpl::implRead (JArray<jbyte>* buffer,
-                                           jint offset, jint len)
-{
-  return fd->read (buffer, offset, len);
-}
-
-jint
-gnu::java::nio::FileChannelImpl::implWrite (JArray<jbyte>* buffer,
-                                            jint offset, jint len)
-{
-  fd->write (buffer, offset, len);
-  return len;
-}
-
-java::nio::channels::FileChannel*
-gnu::java::nio::FileChannelImpl::implTruncate (jlong size)
-{
-  fd->setLength (size);
-  return this;
-}
-
-gnu::gcj::RawData*
-gnu::java::nio::FileChannelImpl::nio_mmap_file (jlong /*pos*/, jlong /*size*/,
-                                                jint /*mode*/)
-{
-  throw new ::java::io::IOException (JvNewStringUTF ("mmap not implemented"));
-}
-
-void
-gnu::java::nio::FileChannelImpl::nio_unmmap_file (gnu::gcj::RawData* /*address*/,
-						  jint /*size*/)
-{
-  throw new ::java::io::IOException (JvNewStringUTF ("munmap not implemented"));
-}
-
-void
-gnu::java::nio::FileChannelImpl::nio_msync (gnu::gcj::RawData* /*map_address*/,
-					    jint /*length*/)
-{
-  throw new ::java::io::IOException (JvNewStringUTF ("msync not implemented"));
-}
Index: java/io/FileInputStream.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/io/FileInputStream.java,v
retrieving revision 1.17
diff -u -b -B -r1.17 FileInputStream.java
--- java/io/FileInputStream.java	6 May 2003 10:07:28 -0000	1.17
+++ java/io/FileInputStream.java	13 Jul 2003 16:46:05 -0000
@@ -39,7 +39,7 @@
 package java.io;
 
 import java.nio.channels.FileChannel;
-import gnu.java.nio.FileChannelImpl;
+import java.nio.channels.FileChannelImpl;
 
 /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
  * "The Java Language Specification", ISBN 0-201-63451-1
Index: java/io/FileOutputStream.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/io/FileOutputStream.java,v
retrieving revision 1.14
diff -u -b -B -r1.14 FileOutputStream.java
--- java/io/FileOutputStream.java	14 Jun 2003 05:44:38 -0000	1.14
+++ java/io/FileOutputStream.java	13 Jul 2003 16:46:05 -0000
@@ -39,7 +39,7 @@
 package java.io;
 
 import java.nio.channels.FileChannel;
-import gnu.java.nio.FileChannelImpl;
+import java.nio.channels.FileChannelImpl;
 
 /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
  * "The Java Language Specification", ISBN 0-201-63451-1
Index: java/io/RandomAccessFile.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/io/RandomAccessFile.java,v
retrieving revision 1.16
diff -u -b -B -r1.16 RandomAccessFile.java
--- java/io/RandomAccessFile.java	27 Jun 2003 15:46:59 -0000	1.16
+++ java/io/RandomAccessFile.java	13 Jul 2003 16:46:05 -0000
@@ -39,7 +39,7 @@
 package java.io;
 
 import java.nio.channels.FileChannel;
-import gnu.java.nio.FileChannelImpl;
+import java.nio.channels.FileChannelImpl;
 
 /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
  * "The Java Language Specification", ISBN 0-201-63451-1
Index: java/nio/MappedByteBufferImpl.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/nio/MappedByteBufferImpl.java,v
retrieving revision 1.1
diff -u -b -B -r1.1 MappedByteBufferImpl.java
--- java/nio/MappedByteBufferImpl.java	20 Jun 2003 12:01:54 -0000	1.1
+++ java/nio/MappedByteBufferImpl.java	13 Jul 2003 16:46:06 -0000
@@ -38,8 +38,8 @@
 
 package java.nio;
 
-import gnu.java.nio.FileChannelImpl;
 import java.io.IOException;
+import java.nio.channels.FileChannelImpl;
 import gnu.gcj.RawData;
 
 public class MappedByteBufferImpl extends MappedByteBuffer
Index: java/nio/channels/FileChannelImpl.java
===================================================================
RCS file: java/nio/channels/FileChannelImpl.java
diff -N java/nio/channels/FileChannelImpl.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ java/nio/channels/FileChannelImpl.java	13 Jul 2003 16:46:06 -0000
@@ -0,0 +1,392 @@
+/* FileChannelImpl.java -- 
+   Copyright (C) 2002 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package java.nio.channels;
+
+import java.io.EOFException;
+import java.io.FileDescriptor;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
+import java.nio.MappedByteBufferImpl;
+import gnu.gcj.RawData;
+
+/**
+ * This file is not user visible !
+ * But alas, Java does not have a concept of friendly packages
+ * so this class is public. 
+ * Instances of this class are created by invoking getChannel
+ * Upon a Input/Output/RandomAccessFile object.
+ */
+
+public class FileChannelImpl extends FileChannel
+{
+  public 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)
+  {
+    if (!(obj instanceof RandomAccessFile)
+        && !(obj instanceof FileInputStream)
+        && !(obj instanceof FileOutputStream))
+      throw new InternalError ();
+
+    this.fd = fd;
+    this.file_obj = obj;
+  }
+
+  public FileChannelImpl ()
+  {
+    this (new FileDescriptor (), true, null);
+  }
+
+  private native long implPosition ();
+  private native FileChannel implPosition (long newPosition);
+  private native FileChannel implTruncate (long size);
+  
+  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
+  {
+    if (map_address != null)
+      {
+        nio_unmmap_file (map_address, (int) length);
+        map_address = null;
+      }
+
+    if (file_obj instanceof RandomAccessFile)
+      {
+        RandomAccessFile o = (RandomAccessFile) file_obj;
+        o.close();
+      }
+    else if (file_obj instanceof FileInputStream)
+      {
+        FileInputStream o = (FileInputStream) file_obj;
+        o.close();
+      }
+    else if (file_obj instanceof FileOutputStream)
+      {
+        FileOutputStream o = (FileOutputStream) file_obj;
+        o.close();
+      }
+  }
+
+  public int read (ByteBuffer dst) throws IOException
+  {
+    // Check if file is mapped into memory.
+    if (buf != null)
+      {
+	// FIXME: implement this
+        throw new Error ("Accessing mapped buffers not implemented.");
+      }
+
+    // File not mapped, access it directly.
+    return implRead (dst);
+  }
+
+  public int read (ByteBuffer dst, long position)
+    throws IOException
+  {
+    if (position < 0)
+      throw new IllegalArgumentException ();
+
+    if (!isOpen ())
+      throw new ClosedChannelException ();
+   
+    if (file_obj instanceof FileOutputStream)
+      throw new NonReadableChannelException ();
+
+    int result;
+    long oldPosition;
+
+    oldPosition = implPosition ();
+    result = implRead (dst);
+    implPosition (oldPosition);
+    
+    return result;
+  }
+
+  private int implRead (ByteBuffer dst) throws IOException
+  {
+    int result;
+    byte[] buffer = new byte [dst.remaining ()];
+    
+    result = implRead (buffer, 0, buffer.length);
+    dst.put (buffer, 0, result);
+
+    return result;
+  }
+  
+  private native int implRead (byte[] buffer, int offset, int length)
+    throws IOException;
+
+  public long read (ByteBuffer[] dsts, int offset, int length)
+    throws IOException
+  {
+    long result = 0;
+
+    for (int i = offset; i < offset + length; i++)
+      {
+        result += read (dsts [i]);
+      }
+
+    return result;
+  }
+
+  public int write (ByteBuffer src) throws IOException
+  {
+    // Check if file is mapped into memory.
+    if (buf != null)
+      {
+	// FIXME: implement this
+        throw new Error ("Accessing mapped buffers not implemented.");
+      }
+    
+    // File not mapped, access it directly.
+    return implWrite (src);
+  }
+    
+  public int write (ByteBuffer src, long position)
+    throws IOException
+  {
+    if (position < 0)
+      throw new IllegalArgumentException ();
+
+    if (!isOpen ())
+      throw new ClosedChannelException ();
+    
+    if (file_obj instanceof FileInputStream)
+       throw new NonWritableChannelException ();
+
+    int result;
+    long oldPosition;
+
+    oldPosition = implPosition ();
+    result = implWrite (src);
+    implPosition (oldPosition);
+    
+    return result;
+  }
+
+  private int implWrite (ByteBuffer src) throws IOException
+  {
+    byte[] buffer = new byte [src.remaining ()];
+    
+    src.get (buffer, 0, buffer.length);
+    return implWrite (buffer, 0, buffer.length);
+  }
+  
+  private native int implWrite (byte[] buffer, int offset, int length)
+    throws IOException;
+  
+  public long write(ByteBuffer[] srcs, int offset, int length)
+    throws IOException
+  {
+    long result = 0;
+
+    for (int i = offset;i < offset + length;i++)
+      {
+        result += write (srcs[i]);
+      }
+    
+    return result;
+  }
+				   
+  public MappedByteBuffer map (FileChannel.MapMode mode, long position,
+                               long size)
+    throws IOException
+  {
+    if ((mode != MapMode.READ_ONLY
+         && mode != MapMode.READ_WRITE
+         && mode != MapMode.PRIVATE)
+        || position < 0
+        || size < 0
+        || size > Integer.MAX_VALUE)
+      throw new IllegalArgumentException ();
+    
+    // FIXME: Make this working.
+    int cmode = mode.m;
+    map_address = nio_mmap_file (position, size, cmode);
+    length = (int) size;
+    buf = new MappedByteBufferImpl (this);
+    return buf;
+  }
+
+  static MappedByteBuffer create_direct_mapped_buffer (RawData map_address,
+                                                       long length)
+    throws IOException
+  {
+    FileChannelImpl ch = new FileChannelImpl ();
+    ch.map_address = map_address;
+    ch.length = (int) length;
+    ch.buf = new MappedByteBufferImpl (ch);
+    return ch.buf;			 
+  }
+
+  /**
+   * msync with the disk
+   */
+  public void force (boolean metaData) throws IOException
+  {
+    if (!isOpen ())
+      throw new ClosedChannelException ();
+
+    // FIXME: What to do with metaData ?
+    
+    nio_msync (map_address, length);
+  }
+
+  public long transferTo (long position, long count, WritableByteChannel target)
+    throws IOException
+  {
+    if (position < 0
+        || count < 0)
+      throw new IllegalArgumentException ();
+
+    if (!isOpen ())
+      throw new ClosedChannelException ();
+
+    if (file_obj instanceof FileOutputStream)
+       throw new NonReadableChannelException ();
+   
+    // XXX: count needs to be casted from long to int. Dataloss ?
+    ByteBuffer buffer = ByteBuffer.allocate ((int) count);
+    read (buffer, position);
+    return target.write (buffer);
+  }
+
+  public long transferFrom (ReadableByteChannel src, long position, long count)
+    throws IOException
+  {
+    if (position < 0
+        || count < 0)
+      throw new IllegalArgumentException ();
+
+    if (!isOpen ())
+      throw new ClosedChannelException ();
+
+    if (file_obj instanceof FileInputStream)
+       throw new NonWritableChannelException ();
+
+    // XXX: count needs to be casted from long to int. Dataloss ?
+    ByteBuffer buffer = ByteBuffer.allocate ((int) count);
+    src.read (buffer);
+    return write (buffer, position);
+  }
+
+  public FileLock lock (long position, long size, boolean shared)
+    throws IOException
+  {
+    if (position < 0
+        || size < 0)
+      throw new IllegalArgumentException ();
+
+    if (!isOpen ())
+      throw new ClosedChannelException ();
+
+    if (shared &&
+        file_obj instanceof FileOutputStream)
+      throw new NonReadableChannelException ();
+	
+    if (!shared &&
+        file_obj instanceof FileInputStream)
+      throw new NonWritableChannelException ();
+	
+    throw new Error ("Not implemented");
+  }
+  
+  public FileLock tryLock (long position, long size, boolean shared)
+    throws IOException
+  {
+    if (position < 0
+        || size < 0)
+      throw new IllegalArgumentException ();
+
+    if (!isOpen ())
+      throw new ClosedChannelException ();
+
+    throw new Error ("Not implemented");
+  }
+
+  public long position ()
+    throws IOException
+  {
+    if (!isOpen ())
+      throw new ClosedChannelException ();
+
+    return implPosition ();
+  }
+  
+  public FileChannel position (long newPosition)
+    throws IOException
+  {
+    if (newPosition < 0)
+      throw new IllegalArgumentException ();
+
+    if (!isOpen ())
+      throw new ClosedChannelException ();
+
+    return implPosition (newPosition);
+  }
+  
+  public FileChannel truncate (long size)
+    throws IOException
+  {
+    if (size < 0)
+      throw new IllegalArgumentException ();
+
+    if (!isOpen ())
+      throw new ClosedChannelException ();
+
+    if (file_obj instanceof FileInputStream)
+       throw new NonWritableChannelException ();
+
+    return implTruncate (size);
+  }
+}
Index: java/nio/channels/natFileChannelImpl.cc
===================================================================
RCS file: java/nio/channels/natFileChannelImpl.cc
diff -N java/nio/channels/natFileChannelImpl.cc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ java/nio/channels/natFileChannelImpl.cc	13 Jul 2003 16:46:06 -0000
@@ -0,0 +1,94 @@
+// natFileChannelImpl.cc
+
+/* Copyright (C) 2003  Free Software Foundation
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+#include <config.h>
+
+#include <jvm.h>
+
+#include <errno.h>
+#include <string.h>
+#include <sys/types.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#include <gnu/gcj/RawData.h>
+#include <java/io/FileDescriptor.h>
+#include <java/io/IOException.h>
+#include <java/nio/ByteBuffer.h>
+#include <java/nio/channels/FileChannel.h>
+#include <java/nio/channels/FileChannelImpl.h>
+
+jlong
+java::nio::channels::FileChannelImpl::size ()
+{
+  return fd->getLength ();
+}
+
+jlong
+java::nio::channels::FileChannelImpl::implPosition ()
+{
+  return fd->getFilePointer ();
+}
+
+java::nio::channels::FileChannel*
+java::nio::channels::FileChannelImpl::implPosition (jlong newPosition)
+{
+  fd->seek (newPosition, ::java::io::FileDescriptor::SET, true);
+  return this;
+}
+
+jint
+java::nio::channels::FileChannelImpl::implRead (JArray<jbyte>* buffer,
+                                                jint offset, jint len)
+{
+  return fd->read (buffer, offset, len);
+}
+
+jint
+java::nio::channels::FileChannelImpl::implWrite (JArray<jbyte>* buffer,
+                                                 jint offset, jint len)
+{
+  fd->write (buffer, offset, len);
+  return len;
+}
+
+java::nio::channels::FileChannel*
+java::nio::channels::FileChannelImpl::implTruncate (jlong size)
+{
+  fd->setLength (size);
+  return this;
+}
+
+gnu::gcj::RawData*
+java::nio::channels::FileChannelImpl::nio_mmap_file (jlong /*pos*/, jlong /*size*/,
+                                                     jint /*mode*/)
+{
+  throw new ::java::io::IOException (JvNewStringUTF ("mmap not implemented"));
+}
+
+void
+java::nio::channels::FileChannelImpl::nio_unmmap_file (gnu::gcj::RawData* /*address*/,
+				                       jint /*size*/)
+{
+  throw new ::java::io::IOException (JvNewStringUTF ("munmap not implemented"));
+}
+
+void
+java::nio::channels::FileChannelImpl::nio_msync (gnu::gcj::RawData* /*map_address*/,
+                                                 jint /*length*/)
+{
+  throw new ::java::io::IOException (JvNewStringUTF ("msync not implemented"));
+}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]