diff options
-rw-r--r-- | java/jdk15/files/patch-j2se::nio::ch::FileChannelImpl.c | 38 | ||||
-rw-r--r-- | java/jdk16/files/patch-j2se::nio::ch::FileChannelImpl.c | 38 |
2 files changed, 76 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 + } + 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 + } + |