diff options
Diffstat (limited to 'libjava/gnu/java/nio')
| -rw-r--r-- | libjava/gnu/java/nio/channels/FileChannelImpl.java | 4 | ||||
| -rw-r--r-- | libjava/gnu/java/nio/channels/natFileChannelPosix.cc | 5 |
2 files changed, 7 insertions, 2 deletions
diff --git a/libjava/gnu/java/nio/channels/FileChannelImpl.java b/libjava/gnu/java/nio/channels/FileChannelImpl.java index 8b3d0fc86b3..678e10f2349 100644 --- a/libjava/gnu/java/nio/channels/FileChannelImpl.java +++ b/libjava/gnu/java/nio/channels/FileChannelImpl.java @@ -422,7 +422,9 @@ public final class FileChannelImpl extends FileChannel if ((mode & WRITE) == 0) throw new NonWritableChannelException (); - implTruncate (size); + if (size < size ()) + implTruncate (size); + return this; } } diff --git a/libjava/gnu/java/nio/channels/natFileChannelPosix.cc b/libjava/gnu/java/nio/channels/natFileChannelPosix.cc index b8f99378834..a2c1c7962b0 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; } |

