summaryrefslogtreecommitdiffstats
path: root/libjava/gnu/java/nio
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/gnu/java/nio')
-rw-r--r--libjava/gnu/java/nio/channels/FileChannelImpl.java4
-rw-r--r--libjava/gnu/java/nio/channels/natFileChannelPosix.cc5
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;
}
OpenPOWER on IntegriCloud