mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-19 19:09:44 +08:00
RandomAccessFile.java (seek): Let seek go past end of file.
* 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
This commit is contained in:
parent
ead4cf347a
commit
8d6a437584
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user