aboutsummaryrefslogtreecommitdiff
path: root/libjava/gnu/java/nio/channels/natFileChannelPosix.cc
diff options
context:
space:
mode:
authorMichael Koch <mkoch@gcc.gnu.org>2004-07-17 13:46:02 +0000
committerMichael Koch <mkoch@gcc.gnu.org>2004-07-17 13:46:02 +0000
commitbaa61e09ef6f62433f337ccac6c99845e6fe2322 (patch)
treee3b46bce712fc96cd55d5375844c9ae031cde8eb /libjava/gnu/java/nio/channels/natFileChannelPosix.cc
parent3e25b3a8f80447b0ce191d1742b292b7b1fd2e5c (diff)
downloadgcc-baa61e09ef6f62433f337ccac6c99845e6fe2322.zip
gcc-baa61e09ef6f62433f337ccac6c99845e6fe2322.tar.gz
gcc-baa61e09ef6f62433f337ccac6c99845e6fe2322.tar.bz2
[multiple changes]
2004-07-17 Mark Wielaard <mark@klomp.org> * gnu/java/nio/channels/FileChannelImpl.java (truncate): Only truncate when size is smaller. * java/io/RandomAccessFile.java (setLength): Use truncate for shrinking the file and seek plus write for expanding the file. 2004-07-17 Michael Koch <konqueror@gmx.de> * gnu/java/nio/channels/natFileChannelPosix.cc (implTruncate): Always save current position. Only reposition file pointer to where we started if not beyond new lenght. Reposition file pointer to file length if it points beyond the end of file. From-SVN: r84868
Diffstat (limited to 'libjava/gnu/java/nio/channels/natFileChannelPosix.cc')
-rw-r--r--libjava/gnu/java/nio/channels/natFileChannelPosix.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/libjava/gnu/java/nio/channels/natFileChannelPosix.cc b/libjava/gnu/java/nio/channels/natFileChannelPosix.cc
index b8f9937..a2c1c79 100644
--- a/libjava/gnu/java/nio/channels/natFileChannelPosix.cc
+++ b/libjava/gnu/java/nio/channels/natFileChannelPosix.cc
@@ -274,7 +274,10 @@ FileChannelImpl::implTruncate (jlong size)
}
else
{
- if (::ftruncate (fd, (off_t) pos))
+ if (::ftruncate (fd, (off_t) size))
+ throw new IOException (JvNewStringLatin1 (strerror (errno)));
+ if (pos > size
+ && ::lseek (fd, (off_t) size, SEEK_SET) == -1)
throw new IOException (JvNewStringLatin1 (strerror (errno)));
pos = size;
}