Author: ivan
Date: Fri Sep 13 12:12:58 2013
New Revision: 1522892
URL: http://svn.apache.org/r1522892
Log:
Fix issue 4425 and issue 3014 on Windows. Treat ERROR_NO_DATA Windows
error code as EPIPE error.
* subversion/include/svn_types.h
(SVN__APR_STATUS_IS_EPIPE): New macro, same as APR_STATUS_IS_EPIPE with
additional handling of ERROR_NO_DATA on Windows.
* subversion/libsvn_subr/cmdline.c
* subversion/libsvn_subr/io.c
(svn_cmdline_fputs, svn_cmdline_fflush, do_io_file_wrapper_cleanup): Use
SVN__APR_STATUS_IS_EPIPE macro instead of APR_STATUS_IS_EPIPE.
Modified:
subversion/trunk/subversion/include/svn_types.h
subversion/trunk/subversion/libsvn_subr/cmdline.c
subversion/trunk/subversion/libsvn_subr/io.c
Modified: subversion/trunk/subversion/include/svn_types.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_types.h?rev=1522892&r1=1522891&r2=1522892&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_types.h (original)
+++ subversion/trunk/subversion/include/svn_types.h Fri Sep 13 12:12:58 2013
@@ -219,6 +219,16 @@ svn__apr_hash_index_val(const apr_hash_i
|| ((s) == APR_OS_START_SYSERR + ERROR_INVALID_NAME))
#endif
+/** On Windows, APR_STATUS_IS_EPIPE does not include ERROR_NO_DATA error.
+ * So we include it.*/
+/* ### These fixes should go into APR. */
+#ifndef WIN32
+#define SVN__APR_STATUS_IS_EPIPE(s) APR_STATUS_IS_EPIPE(s)
+#else
+#define SVN__APR_STATUS_IS_EPIPE(s) (APR_STATUS_IS_EPIPE(s) \
+ || ((s) == APR_OS_START_SYSERR + ERROR_NO_DATA))
+#endif
+
/** @} */
Modified: subversion/trunk/subversion/libsvn_subr/cmdline.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/cmdline.c?rev=1522892&r1=1522891&r2=1522892&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/cmdline.c (original)
+++ subversion/trunk/subversion/libsvn_subr/cmdline.c Fri Sep 13 12:12:58 2013
@@ -357,7 +357,7 @@ svn_cmdline_fputs(const char *string, FI
{
/* ### Issue #3014: Return a specific error for broken pipes,
* ### with a single element in the error chain. */
- if (APR_STATUS_IS_EPIPE(apr_get_os_error()))
+ if (SVN__APR_STATUS_IS_EPIPE(apr_get_os_error()))
return svn_error_create(SVN_ERR_IO_PIPE_WRITE_ERROR, NULL, NULL);
else
return svn_error_wrap_apr(apr_get_os_error(), _("Write error"));
@@ -380,7 +380,7 @@ svn_cmdline_fflush(FILE *stream)
{
/* ### Issue #3014: Return a specific error for broken pipes,
* ### with a single element in the error chain. */
- if (APR_STATUS_IS_EPIPE(apr_get_os_error()))
+ if (SVN__APR_STATUS_IS_EPIPE(apr_get_os_error()))
return svn_error_create(SVN_ERR_IO_PIPE_WRITE_ERROR, NULL, NULL);
else
return svn_error_wrap_apr(apr_get_os_error(), _("Write error"));
Modified: subversion/trunk/subversion/libsvn_subr/io.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/io.c?rev=1522892&r1=1522891&r2=1522892&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/io.c (original)
+++ subversion/trunk/subversion/libsvn_subr/io.c Fri Sep 13 12:12:58 2013
@@ -3487,7 +3487,7 @@ do_io_file_wrapper_cleanup(apr_file_t *f
/* ### Issue #3014: Return a specific error for broken pipes,
* ### with a single element in the error chain. */
- if (APR_STATUS_IS_EPIPE(status))
+ if (SVN__APR_STATUS_IS_EPIPE(status))
return svn_error_create(SVN_ERR_IO_PIPE_WRITE_ERROR, NULL, NULL);
if (name)