Author: brane
Date: Fri Dec 14 04:57:42 2012
New Revision: 1421668
URL: http://svn.apache.org/viewvc?rev=1421668&view=rev
Log:
Remove SVN_ERR__TRACED from the public headers. No-one should be able to create
traces without calling svn_error_trace, so there's no reason to expose this
private symbol. Hiding it incidentally allows us to slightly optimize the
is-tracing-link predicate.
* subversion/include/svn_error.h (SVN_ERR__TRACE): Remove.
* subversion/libsvn_subr/error.c (error_tracing_link): New static string.
(svn_error__trace): Use make_error_internal instead of svn_error_quick_wrap.
(svn_error__is_tracing_link): Use direct pointer comparison in predicate.
* subversion/tests/libsvn_subr/error-test.c (test_error_purge_tracing):
Manually construct tracing-only error chain without relying on the
(now-gone) SVN_ERR__TRACED; instead, rely on insider info about the
implementation.
Modified:
subversion/trunk/subversion/include/svn_error.h
subversion/trunk/subversion/libsvn_subr/error.c
subversion/trunk/subversion/tests/libsvn_subr/error-test.c
Modified: subversion/trunk/subversion/include/svn_error.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_error.h?rev=1421668&r1=1421667&r2=1421668&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_error.h (original)
+++ subversion/trunk/subversion/include/svn_error.h Fri Dec 14 04:57:42 2012
@@ -315,8 +315,6 @@ svn_handle_warning(FILE *stream,
* @since New in 1.7.
*/
#ifdef SVN_ERR__TRACING
-#define SVN_ERR__TRACED "traced call"
-
svn_error_t *
svn_error__trace(const char *file, long line, svn_error_t *err);
Modified: subversion/trunk/subversion/libsvn_subr/error.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/error.c?rev=1421668&r1=1421667&r2=1421668&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/error.c (original)
+++ subversion/trunk/subversion/libsvn_subr/error.c Fri Dec 14 04:57:42 2012
@@ -221,6 +221,8 @@ svn_error_quick_wrap(svn_error_t *child,
new_msg);
}
+/* Messages in tracing errors all point to this static string. */
+static const char error_tracing_link[] = "traced call";
svn_error_t *
svn_error__trace(const char *file, long line, svn_error_t *err)
@@ -235,8 +237,11 @@ svn_error__trace(const char *file, long
/* Only do the work when an error occurs. */
if (err)
{
+ svn_error_t *trace;
svn_error__locate(file, line);
- return svn_error_quick_wrap(err, SVN_ERR__TRACED);
+ trace = make_error_internal(err->apr_err, err);
+ trace->message = error_tracing_link;
+ return trace;
}
return SVN_NO_ERROR;
@@ -379,11 +384,7 @@ svn_boolean_t
svn_error__is_tracing_link(svn_error_t *err)
{
#ifdef SVN_ERR__TRACING
- /* ### A strcmp()? Really? I think it's the best we can do unless
- ### we add a boolean field to svn_error_t that's set only for
- ### these "placeholder error chain" items. Not such a bad idea,
- ### really... */
- return (err && err->message && !strcmp(err->message, SVN_ERR__TRACED));
+ return (err && err->message == error_tracing_link);
#else
return FALSE;
#endif
Modified: subversion/trunk/subversion/tests/libsvn_subr/error-test.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_subr/error-test.c?rev=1421668&r1=1421667&r2=1421668&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_subr/error-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_subr/error-test.c Fri Dec 14
04:57:42 2012
@@ -125,8 +125,9 @@ test_error_purge_tracing(apr_pool_t *poo
svn_error_malfunction_handler_t orig_handler;
/* For this test, use a random error status. */
- err = svn_error_create(SVN_ERR_BAD_UUID, NULL, SVN_ERR__TRACED);
+ err = svn_error_create(SVN_ERR_BAD_UUID, NULL, "");
err = svn_error_trace(err);
+ err->child->message = err->message;
/* Register a malfunction handler that doesn't call abort() to
check that a new error chain with an assertion error is