]> gcc.gnu.org Git - gcc.git/commitdiff
RandomAccessFile.java (seek): Let seek go past end of file.
authorTom Tromey <tromey@redhat.com>
Thu, 2 Aug 2001 23:46:39 +0000 (23:46 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Thu, 2 Aug 2001 23:46:39 +0000 (23:46 +0000)
* java/io/RandomAccessFile.java (seek): Let seek go past end of
file.
(skipBytes): Don't fail if seeking past end of file.
* java/io/FileInputStream.java (skip): Don't fail if seeking past
end of file.
* java/io/natFileDescriptorWin32.cc (seek): Handle `eof_trunc'
argument.
* java/io/natFileDescriptorEcos.cc (seek): Handle `eof_trunc'
argument.
* java/io/natFileDescriptorPosix.cc (seek): Handle `eof_trunc'
argument.
* java/io/FileDescriptor.java (seek): Added `eof_trunc' argument.

From-SVN: r44586

libjava/ChangeLog
libjava/java/io/FileDescriptor.java
libjava/java/io/FileInputStream.java
libjava/java/io/RandomAccessFile.java
libjava/java/io/natFileDescriptorEcos.cc
libjava/java/io/natFileDescriptorPosix.cc
libjava/java/io/natFileDescriptorWin32.cc

index e410068bde4c9b32d13776f3edd6c001ee3f5c84..5bdccf0bbf4d814768ffb8c74cbb7bbf5b71e189 100644 (file)
@@ -1,3 +1,18 @@
+2001-08-02  Tom Tromey  <tromey@redhat.com>
+
+       * java/io/RandomAccessFile.java (seek): Let seek go past end of
+       file.
+       (skipBytes): Don't fail if seeking past end of file.
+       * java/io/FileInputStream.java (skip): Don't fail if seeking past
+       end of file.
+       * java/io/natFileDescriptorWin32.cc (seek): Handle `eof_trunc'
+       argument.
+       * java/io/natFileDescriptorEcos.cc (seek): Handle `eof_trunc'
+       argument.
+       * java/io/natFileDescriptorPosix.cc (seek): Handle `eof_trunc'
+       argument.
+       * java/io/FileDescriptor.java (seek): Added `eof_trunc' argument.
+
 2001-08-02  Martin Kahlert  <martin.kahlert@infineon.com>
 
        * jni.cc (JNI_CreateJavaVM): Call _Jv_JNI_Init in order
index 493f14cf280731580a56b7f7c970ef4ec3970c81..8afcda4768ff0bb76cbd586188f77a7c9549d053 100644 (file)
@@ -1,6 +1,6 @@
 // FileDescriptor.java - Open file or device
 
-/* Copyright (C) 1998, 1999, 2000  Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -54,7 +54,11 @@ public final class FileDescriptor
   native void write (byte[] b, int offset, int len)
     throws IOException, NullPointerException, IndexOutOfBoundsException;
   native void close () throws IOException;
-  native int seek (long pos, int whence) throws IOException;
+  // EOF_TRUNC is true if a request to seek past the end of file
+  // should actually stop at the end of file.  If false, then a seek
+  // past the end is ok (and if a subsequent write occurs the file
+  // will grow).
+  native int seek (long pos, int whence, boolean eof_trunc) throws IOException;
   native long length () throws IOException;
   native long getFilePointer () throws IOException;
   native int read () throws IOException;
index 67d4842f4f8a5711f3e1ffee89b2cd3facf8db2c..9d0d0133b9cf76a102d9a21bd122b494d7a192c8 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999  Free Software Foundation
+/* Copyright (C) 1998, 1999, 2001  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -88,6 +88,6 @@ public class FileInputStream extends InputStream
 
   public long skip(long n) throws IOException
   {
-    return fd.seek(n, FileDescriptor.CUR);
+    return n <= 0 ? 0 : fd.seek(n, FileDescriptor.CUR, true);
   }
 }
index 9a0bf807202f58a3a7d213bce353b2d8986b95d4..418974c091e2d0f19376d897d48cb06509aa8fe4 100644 (file)
@@ -1,6 +1,6 @@
 // RandomAccessFile.java
 
-/* Copyright (C) 1998, 1999  Free Software Foundation
+/* Copyright (C) 1998, 1999, 2001  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -161,12 +161,12 @@ public class RandomAccessFile implements DataOutput, DataInput
 
   public void seek (long pos) throws IOException
   {
-    fd.seek(pos, FileDescriptor.SET);
+    fd.seek(pos, FileDescriptor.SET, false);
   }
 
   public int skipBytes (int count) throws IOException
   {
-    return fd.seek(count, FileDescriptor.CUR);
+    return count <= 0 ? 0 : fd.seek(count, FileDescriptor.CUR, true);
   }
 
   public void write (int oneByte) throws IOException
index 43574df88936a1d7ca8fe517e5be01c2521fbc04..a66bf739d3563546cafa9936f702d60de865dcfb 100644 (file)
@@ -1,6 +1,6 @@
 // natFileDescriptor.cc - Native part of FileDescriptor class.
 
-/* Copyright (C) 1998, 1999  Free Software Foundation
+/* Copyright (C) 1998, 1999, 2001  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -88,16 +88,9 @@ java::io::FileDescriptor::close (void)
 }
 
 jint
-java::io::FileDescriptor::seek (jlong pos, jint whence)
+java::io::FileDescriptor::seek (jlong pos, jint whence, jboolean)
 {
   JvAssert (whence == SET || whence == CUR);
-
-  jlong len = length ();
-  jlong here = getFilePointer ();
-
-  if ((whence == SET && pos > len) || (whence == CUR && here + pos > len))
-    throw new EOFException;
-
   return 0;
 }
 
index 4e05cfe1df340e9d42ad4895e250b6875962ee40..ad1c1cdd0486c9d099a94291426e5ea8329d006b 100644 (file)
@@ -177,15 +177,19 @@ java::io::FileDescriptor::close (void)
 }
 
 jint
-java::io::FileDescriptor::seek (jlong pos, jint whence)
+java::io::FileDescriptor::seek (jlong pos, jint whence, jboolean eof_trunc)
 {
   JvAssert (whence == SET || whence == CUR);
 
   jlong len = length ();
   jlong here = getFilePointer ();
 
-  if ((whence == SET && pos > len) || (whence == CUR && here + pos > len))
-    throw new EOFException;
+  if (eof_trunc
+      && ((whence == SET && pos > len) || (whence == CUR && here + pos > len)))
+    {
+      whence = SET;
+      pos = len;
+    }
 
   off_t r = ::lseek (fd, (off_t) pos, whence == SET ? SEEK_SET : SEEK_CUR);
   if (r == -1)
index 3f8ae76b269d609c5734627a29fbda5c0918fc4e..c0e33e2a2aeeb7060eddde74ffec3a9661962430 100644 (file)
@@ -1,6 +1,6 @@
 // natFileDescriptorWin32.cc - Native part of FileDescriptor class.
 
-/* Copyright (C) 1998, 1999, 2000  Red Hat, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2001  Red Hat, Inc.
 
    This file is part of libgcj.
 
@@ -171,15 +171,19 @@ java::io::FileDescriptor::close (void)
 }
 
 jint
-java::io::FileDescriptor::seek (jlong pos, jint whence)
+java::io::FileDescriptor::seek (jlong pos, jint whence, jboolean eof_trunc)
 {
   JvAssert (whence == SET || whence == CUR);
 
   jlong len = length();
   jlong here = getFilePointer();
 
-  if ((whence == SET && pos > len) || (whence == CUR && here + pos > len))
-    throw new EOFException;
+  if (eof_trunc
+      && ((whence == SET && pos > len) || (whence == CUR && here + pos > len)))
+    {
+      whence = SET;
+      pos = len;
+    }
 
   LONG high = pos >> 32;
   DWORD low = SetFilePointer ((HANDLE)fd, (DWORD)(0xffffffff & pos), &high, whence == SET ? FILE_BEGIN : FILE_CURRENT);
This page took 0.069928 seconds and 5 git commands to generate.