+2004-04-20  Michael Koch  <konqueror@gmx.de>
+
+       * gnu/java/nio/FileLockImpl.java
+       (static): Removed, not needed anymore.
+       * gnu/java/nio/channels/FileChannelImpl.java
+       (FileChannelImpl): Made final.
+       (mode): Made private.
+       (READ, WRITE, APPEND): Made public.
+       (EXCL, SYNC, DSYNC): Likewise.
+       (static): Load native JNI library, when needed.
+       (length): Unused, removed.
+       (available): Made public.
+       (implPosition): Throws IOException.
+       (seek): Likewise.
+       (implTruncate): Likewise.
+       (unlock): Likewise.
+       (lock): Likewise.
+
 2004-04-20  Michael Koch  <konqueror@gmx.de>
 
        * java/awt/AWTPermission.java,
 
 package gnu.java.nio.channels;
 
 import gnu.classpath.Configuration;
-import gnu.gcj.RawData;
 import gnu.java.nio.FileLockImpl;
-import java.io.*;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.MappedByteBuffer;
-import java.nio.channels.*;
+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;
 
 /**
  * This file is not user visible !
  * Upon a Input/Output/RandomAccessFile object.
  */
 
-public class FileChannelImpl extends FileChannel
+public final class FileChannelImpl extends FileChannel
 {
-  int mode;
   // These are WHENCE values for seek.
   static final int SET = 0;
   static final int CUR = 1;
 
   // These are mode values for open().
-  static final int READ   = 1;
-  static final int WRITE  = 2;
-  static final int APPEND = 4;
+  public static final int READ   = 1;
+  public static final int WRITE  = 2;
+  public static final int APPEND = 4;
 
   // EXCL is used only when making a temp file.
-  static final int EXCL   = 8;
-  static final int SYNC   = 16;
-  static final int DSYNC  = 32;
+  public static final int EXCL   = 8;
+  public static final int SYNC   = 16;
+  public static final int DSYNC  = 32;
+
+  private static native void init();
+
+  static
+  {
+    if (Configuration.INIT_LOAD_LIBRARY)
+      {
+        System.loadLibrary("javanio");
+      }
+    
+    init();
+  }
 
   /**
    * This is the actual native file descriptor value
   // efficient way to accomplish that.
   private int fd = -1;
 
-  int length;
   private long pos;
+  private int mode;
 
   public FileChannelImpl ()
   {
     this.mode = mode;
   }
 
-  private static native void init();
-  static { init (); }
+  /* Used by init() (native code) */
+  FileChannelImpl (int fd, int mode)
+  {
+    this.fd = fd;
+    this.mode = mode;
+  }
 
   public static FileChannelImpl in;
   public static FileChannelImpl out;
 
   private native int open (String path, int mode) throws FileNotFoundException;
 
-  /** Attach to an already-opened file.  */
-  public FileChannelImpl (int desc, int mode)
-  {
-    fd = desc;
-    this.mode = mode;
-  }
-
-  native int available () throws IOException;
-  private native long implPosition ();
-  private native void seek (long newPosition);
-  private native void implTruncate (long size);
+  public native int available () throws IOException;
+  private native long implPosition () throws IOException;
+  private native void seek (long newPosition) throws IOException;
+  private native void implTruncate (long size) throws IOException;
   
-  public native void unlock (long pos, long len);
+  public native void unlock (long pos, long len) throws IOException;
 
   public native long size () throws IOException;
     
    * Otherwise return false.
    */
   private native boolean lock(long position, long size,
-                             boolean shared, boolean wait);
+                             boolean shared, boolean wait) throws IOException;
   
   public FileLock lock (long position, long size, boolean shared)
     throws IOException