diff options
author | glewis <glewis@FreeBSD.org> | 2006-07-19 07:20:26 +0800 |
---|---|---|
committer | glewis <glewis@FreeBSD.org> | 2006-07-19 07:20:26 +0800 |
commit | 8fb8a5401e8af7a61521182015c6d44f76f559b2 (patch) | |
tree | e4717795d3dea535ffefa604c55375f5a20479aa /java/jdk15 | |
parent | a4e61fa253e6956ba5469df87054c2385c4b8ff1 (diff) | |
download | freebsd-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/jdk15')
-rw-r--r-- | java/jdk15/files/patch-j2se::nio::ch::FileChannelImpl.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/java/jdk15/files/patch-j2se::nio::ch::FileChannelImpl.c b/java/jdk15/files/patch-j2se::nio::ch::FileChannelImpl.c new file mode 100644 index 000000000000..8dea374d17f3 --- /dev/null +++ b/java/jdk15/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 + } + |