aboutsummaryrefslogtreecommitdiffstats
path: root/java/jdk16
diff options
context:
space:
mode:
authorglewis <glewis@FreeBSD.org>2006-07-19 07:20:26 +0800
committerglewis <glewis@FreeBSD.org>2006-07-19 07:20:26 +0800
commit8fb8a5401e8af7a61521182015c6d44f76f559b2 (patch)
treee4717795d3dea535ffefa604c55375f5a20479aa /java/jdk16
parenta4e61fa253e6956ba5469df87054c2385c4b8ff1 (diff)
downloadfreebsd-ports-gnome-8fb8a5401e8af7a61521182015c6d44f76f559b2.tar.gz
freebsd-ports-gnome-8fb8a5401e8af7a61521182015c6d44f76f559b2.tar.zst
freebsd-ports-gnome-8fb8a5401e8af7a61521182015c6d44f76f559b2.zip
. Properly deal with error cases in transferTo0().
Corrects non-blocking IO case. Submitted by: Kurt Miller <kurt@intricatesoftware.com> Sponsored by: The FreeBSD Foundation
Diffstat (limited to 'java/jdk16')
-rw-r--r--java/jdk16/files/patch-j2se::nio::ch::FileChannelImpl.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/java/jdk16/files/patch-j2se::nio::ch::FileChannelImpl.c b/java/jdk16/files/patch-j2se::nio::ch::FileChannelImpl.c
new file mode 100644
index 000000000000..8dea374d17f3
--- /dev/null
+++ b/java/jdk16/files/patch-j2se::nio::ch::FileChannelImpl.c
@@ -0,0 +1,38 @@
+$FreeBSD$
+
+--- ../../j2se/src/solaris/native/sun/nio/ch/FileChannelImpl.c.orig Fri Jul 7 10:47:18 2006
++++ ../../j2se/src/solaris/native/sun/nio/ch/FileChannelImpl.c Fri Jul 7 14:48:06 2006
+@@ -273,14 +273,28 @@
+ free(buf);
+
+ /*
+- * XXXBSD: there're potential problems with NBIO fd's. Check it.
++ * Similar to solaris if we've transferred any data return
++ * the number of bytes and ignore any error
++ */
++ if (offset - (off_t)position > 0)
++ return (offset - (off_t)position);
++
++ /*
++ * Deal with NBIO EAGAIN & EINTR the same as solaris.
+ */
+ if (r == -1 || w == -1) {
+- fprintf(stderr, "%d %d %d %d %d\n", srcFD, dstFD, r, w, errno);
+- JNU_ThrowIOExceptionWithLastError(env, "Transfer failed");
+- return IOS_THROWN;
++ switch (errno) {
++ case EAGAIN:
++ return IOS_UNAVAILABLE;
++ case EINTR:
++ return IOS_INTERRUPTED;
++ default:
++ JNU_ThrowIOExceptionWithLastError(env, "Transfer failed");
++ return IOS_THROWN;
++ }
+ }
+- return (offset - (off_t)position);
++
++ return (0);
+ #endif
+ }
+