On Mon, 2010-08-09, [email protected] wrote:
>
> +/** Return TRUE if @a err's chain contains the error code @a apr_err.
> + *
> + * @since New in 1.7.
> + */
> +svn_boolean_t
> +svn_error_has_cause(svn_error_t *err, apr_status_t apr_err);
This looks like it could be a useful API.
I would expect to be able to call such a function on a NULL error
pointer, and the result should be FALSE since "no error" doesn't have
any cause that can be expressed in an apr_status_t.
> +svn_boolean_t
> +svn_error_has_cause(svn_error_t *err, apr_status_t apr_err)
> +{
> + svn_error_t *child;
> +
> + if (! err && ! apr_err)
> + /* The API doesn't specify the behaviour when ERR is NULL. */
> + return TRUE;
What's this block for? The behaviour I mentioned above would fall out
from just removing this block. It looks like this is so that you can
write svn_error_has_cause(err, APR_SUCCESS) and get TRUE if ERR is NULL
or contains APR_SUCCESS anywhere in its chain, but is that really
useful?
- Julian
> + for (child = err; child; child = child->child)
> + if (child->apr_err == apr_err)
> + return TRUE;
> +
> + return FALSE;
> +}