I based my question on the fact that the majority of the cases seem to
explicitely check against the macro.
Oh well, should've waited before patching. It was a nice way of
getting the overall feel of the library though - nice work!


On Mon, 27 Dec 2004 09:44:06 -0500, Garrett Rooney
<[EMAIL PROTECTED]> wrote:
> Mihai Limbasan wrote:
> >>From what I've gathered reviewing the APR code, the canonical way of
> > testing apr_* return values is comparing against APR_SUCCESS. That
> > happens to be #defined as zero.
> >
> > There are a lot of places around the APR codebase that do stuff like this:
> >
> >     if (rv)
> >         return rv;
> >
> > i.e. taking advantage of the knowledge that APR_SUCCESS is zero and
> > returning (or taking some other action) based on a non-zero (hence
> > non-APR_SUCCESS) status.
> >
> > This seems to defeat the point of having an APR_SUCCESS in the first
> > place. It's also (at least in my eyes) slightly less intuitive than
> > explicit testing.
> 
> Part of the definition of apr_status_t is the fact that APR_SUCCESS is
> defined to be zero.  This is by design, because success is the common
> case you test for, and comparing against zero is fast for most
> processors.  Because it will always be this way there's no reason not to
> publicise the fact, making the "if (rv) blah" idiom the common way to
> deal with errors in code that uses APR.
> 
> > Would it be useful if I went through the code and properly
> > canonicalized such constructs to
> >
> >     if (rv != APR_SUCCESS) {
> >         return rv;
> >     }
> >
> 
> Once you read the documentation and learn the idiom the "if (rv) return
> rv;" way is much easier to read IMO, I think your change would actually
> make things less clear in the long run.
> 
> -garrett
> 


-- 
Mihai Limbasan

Reply via email to