On platforms without iconv (*BSDs), 'svn log' exits with a fatal
error when a unconvertable log message is encountered. It has to
do with check_non_ascii returning SVN_ERR_UNSUPPORTED_FEATURE when
it encounters this case and log_message_receiver only checking for
APR_EINVAL.
So, there are two solutions:
1) Alter check_non_ascii to return APR_EINVAL.
2) Have all callers of the utf conversion functions check for
APR_EINVAL *and* SVN_ERR_UNSUPPORTED_FEATURE.
My vote is for #1. The crew on #svn seemed much more in favor of #2.
I believe it makes more sense to have a consistent API in this case.
But, I just want it to work. =) -- justin
* subversion/libsvn_subr/utf.c:
(check_non_ascii): Return APR_EINVAL instead of
SVN_ERR_UNSUPPORTED_FEATURE.
Index: ./subversion/libsvn_subr/utf.c
===================================================================
--- ./subversion/libsvn_subr/utf.c
+++ ./subversion/libsvn_subr/utf.c Sat Jul 27 17:31:09 2002
@@ -202,10 +202,9 @@
}
-/* Return SVN_ERR_UNSUPPORTED_FEATURE if the first LEN bytes of DATA
- contain anything other than seven-bit, non-control (except for
- whitespace) ascii characters, finding the error pool from POOL.
- Otherwise, return SVN_NO_ERROR. */
+/* Return APR_EINVAL if the first LEN bytes of DATA contain anything other
+ than seven-bit, non-control (except for whitespace) ascii characters,
+ finding the error pool from POOL. Otherwise, return SVN_NO_ERROR. */
static svn_error_t *
check_non_ascii (const char *data, apr_size_t len, apr_pool_t *pool)
{
@@ -231,7 +230,7 @@
= apr_pstrndup (pool, data_start, (data - data_start));
return svn_error_createf
- (SVN_ERR_UNSUPPORTED_FEATURE, 0, NULL, pool,
+ (APR_EINVAL, 0, NULL, pool,
"Safe data:\n"
"\"%s\"\n"
"... was followed by non-ascii byte %d.\n"
@@ -243,7 +242,7 @@
else
{
return svn_error_createf
- (SVN_ERR_UNSUPPORTED_FEATURE, 0, NULL, pool,
+ (APR_EINVAL, 0, NULL, pool,
"Non-ascii character (code %d) detected, "
"and unable to convert to UTF-8.\n",
*((unsigned char *) data));
==== Option #2 ====
* subversion/clients/cmdline/log-cmd
(log_message_receiver): Check for SVN_ERR_UNSUPPORTED_FEATURE
instead of APR_EINVAL.
Index: ./subversion/clients/cmdline/log-cmd.c
===================================================================
--- ./subversion/clients/cmdline/log-cmd.c
+++ ./subversion/clients/cmdline/log-cmd.c Sat Jul 27 15:07:05 2002
@@ -150,7 +150,8 @@
stuff can come later! */
err = svn_utf_cstring_from_utf8 (&author_native, author, pool);
- if (err && (APR_STATUS_IS_EINVAL (err->apr_err)))
+ if (err && (APR_STATUS_IS_EINVAL (err->apr_err) ||
+ err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE))
{
SVN_ERR (svn_utf_cstring_from_utf8
@@ -163,7 +164,8 @@
return err;
err = svn_utf_cstring_from_utf8 (&date_native, date, pool);
- if (err && (APR_STATUS_IS_EINVAL (err->apr_err))) /* unlikely! */
+ if (err && (APR_STATUS_IS_EINVAL (err->apr_err) ||
+ err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE)) /* unlikely! */
{
SVN_ERR (svn_utf_cstring_from_utf8
(&date_native,
@@ -175,7 +177,8 @@
return err;
err = svn_utf_cstring_from_utf8 (&msg_native, msg, pool);
- if (err && (APR_STATUS_IS_EINVAL (err->apr_err)))
+ if (err && (APR_STATUS_IS_EINVAL (err->apr_err) ||
+ err->apr_err == SVN_ERR_UNSUPPORTED_FEATURE))
{
SVN_ERR (svn_utf_cstring_from_utf8
(&msg_native,
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sun Jul 28 02:50:28 2002