Jim Gallacher wrote ..
> Graham Dumpleton wrote:
> > The next section of code has:
> > 
> >     b = APR_BRIGADE_FIRST(self->bb_in);
> > 
> >     if (b == APR_BRIGADE_SENTINEL(self->bb_in))
> >         return PyString_FromString("");
> > 
> > Now I am assuming here that the check with APR_BRIGADE_SENTINEL() is
> > equivalent to APR_BRIGADE_EMPTY(bb). Yes/No? Would be nice to know
> > that they are. If it isn't then is an empty bucket brigade being handled?
> 
> I'm a little fuzzy right now, so I can't really say. I think we should
> either add a comment to MODPYTHON-102 or create a new issue so we don't
> loose track of this potential problem.

Looking at it a bit more, it should be okay.

  #define APR_BRIGADE_EMPTY(b)    APR_RING_EMPTY(&(b)->list, apr_bucket, link)

  #define APR_BRIGADE_FIRST(b)    APR_RING_FIRST(&(b)->list)

  #define APR_BRIGADE_SENTINEL(b) APR_RING_SENTINEL(&(b)->list, apr_bucket, 
link)

  #define APR_RING_EMPTY(hp, elem, link)                                  \
      (APR_RING_FIRST((hp)) == APR_RING_SENTINEL((hp), elem, link))

Ie., the macro APR_BRIGADE_EMPTY() expands to the exact same test of
checking the first element against the sentinel.

Graham

Reply via email to