On Tue, 2010-08-10, Daniel Shahaf wrote:
> Julian Foad wrote on Tue, Aug 10, 2010 at 13:48:20 +0100:
> > On Tue, 2010-08-10 at 15:04 +0300, Daniel Shahaf wrote:
> > > I can see several options:
> > > 
> > > * forbid passing SVN_NO_ERROR
> > > * return FALSE on SVN_NO_ERROR
> > > * reture (apr_err == APR_SUCCESS ? TRUE : FALSE) on SVN_NO_ERROR
> > > 
> > > Right now, the API does the first and the code the third.
> > > 
> > > 
> > > I suppose the question is (1) whether we expect the caller to test for
> > > SVN_NO_ERROR before calling this function, and (2) whether we expect 
> > > people to
> > > pass APR_SUCCESS to this function.  Personally my answers (while writing
> > > this) were:  (1) yes (2) no.
> > 
> > Generally we have found that with error testing it's convenient to be
> > able to write "err = foo(); do_something_with(err);" without having to
> > check "err" is non-null first.  
> 
> Yep, and I just realized that one of my pending patches also missed the "if
> (err)" check.  How about:
> 
> [[[
> Index: subversion/libsvn_subr/error.c
> ===================================================================
> --- subversion/libsvn_subr/error.c    (revision 983929)
> +++ subversion/libsvn_subr/error.c    (working copy)
> @@ -274,9 +274,8 @@
>  {
>    svn_error_t *child;
>  
> -  if (! err && ! apr_err)
> -    /* The API doesn't specify the behaviour when ERR is NULL. */
> -    return TRUE;
> +  if (err == SVN_NO_ERROR)
> +    return FALSE;

No need to implement this check as a special case: the general case loop
below already does the same.

>    for (child = err; child; child = child->child)
>      if (child->apr_err == apr_err)
> Index: subversion/include/svn_error.h
> ===================================================================
> --- subversion/include/svn_error.h    (revision 983929)
> +++ subversion/include/svn_error.h    (working copy)
> @@ -195,6 +195,8 @@
>  
>  /** Return TRUE if @a err's chain contains the error code @a apr_err.
>   *
> + * If @a err is #SVN_NO_ERROR, return FALSE.
> + *
>   * @since New in 1.7.
>   */
>  svn_boolean_t
> ]]]
> 
> > I agree with (2) - I don't think it makes much sense to pass APR_SUCCESS
> > to this function.
> 
> Of course, but I don't think we should bother to special-case/check
> for that.

Agreed.

- Julian


Reply via email to