natFileDescriptorWin32.cc (setLength): New method.

2002-07-24  Tom Tromey  <tromey@redhat.com>
            Tony Kimball <alk@pobox.com>

	* java/io/natFileDescriptorWin32.cc (setLength): New method.
	* java/io/natFileDescriptorPosix.cc (setLength): New method.
	* java/io/RandomAccessFile.java (setLength): New method.
	* java/io/natFileDescriptorEcos.cc (setLength): New method.
	* java/io/FileDescriptor.java (setLength): New method.

Co-Authored-By: Tony Kimball <alk@pobox.com>

From-SVN: r55715
This commit is contained in:
Tom Tromey
2002-07-24 17:48:41 +00:00
committed by Tom Tromey
parent 8a3ad73714
commit ce05139c56
6 changed files with 109 additions and 3 deletions
+53 -1
View File
@@ -1,6 +1,6 @@
// natFileDescriptorWin32.cc - Native part of FileDescriptor class.
/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of libgcj.
@@ -186,6 +186,58 @@ java::io::FileDescriptor::close (void)
throw new IOException (JvNewStringLatin1 (winerr ()));
}
void
java::io::FileDescriptor::setLength(jlong pos)
{
LONG liOrigFilePointer;
LONG liNewFilePointer;
LONG liEndFilePointer;
// Get the original file pointer.
if (SetFilePointer((HANDLE) fd, (LONG) 0, &liOrigFilePointer,
FILE_CURRENT) != (BOOL) 0
&& (GetLastError() != NO_ERROR))
throw new IOException (JvNewStringLatin1 (winerr ()));
// Get the length of the file.
if (SetFilePointer((HANDLE) fd, (LONG) 0, &liEndFilePointer,
FILE_END) != (BOOL) 0
&& (GetLastError() != NO_ERROR))
throw new IOException (JvNewStringLatin1 (winerr ()));
if ((jlong)liEndFilePointer == pos)
{
// Restore the file pointer.
if (liOrigFilePointer != liEndFilePointer)
{
if (SetFilePointer((HANDLE) fd, liOrigFilePointer, &liNewFilePointer,
FILE_BEGIN) != (BOOL) 0
&& (GetLastError() != NO_ERROR))
throw new IOException (JvNewStringLatin1 (winerr ()));
}
return;
}
// Seek to the new end of file.
if (SetFilePointer((HANDLE) fd, (LONG) pos, &liNewFilePointer,
FILE_BEGIN) != (BOOL) 0
&& (GetLastError() != NO_ERROR))
throw new IOException (JvNewStringLatin1 (winerr ()));
// Truncate the file at this point.
if (SetEndOfFile((HANDLE) fd) != (BOOL) 0 && (GetLastError() != NO_ERROR))
throw new IOException (JvNewStringLatin1 (winerr ()));
if (liOrigFilePointer < liNewFilePointer)
{
// Restore the file pointer.
if (SetFilePointer((HANDLE) fd, liOrigFilePointer, &liNewFilePointer,
FILE_BEGIN) != (BOOL) 0
&& (GetLastError() != NO_ERROR))
throw new IOException (JvNewStringLatin1 (winerr ()));
}
}
jint
java::io::FileDescriptor::seek (jlong pos, jint whence, jboolean eof_trunc)
{