On Wed, Apr 02, 2014 at 12:07:19PM +0200, Denys Vlasenko wrote:
> On Mon, Mar 31, 2014 at 12:08 AM, Bartosz Golaszewski
> <[email protected]> wrote:
> > Commit c3a27b0b fixes a double argument evaluation by modifying the
> > macro invocation. What about preventing it on macro definition level?
> >
> > Signed-off-by: Bartosz Golaszewski <[email protected]>
> > ---
> >  include/libbb.h        | 22 +++++++++++++++-------
> >  util-linux/swaponoff.c |  5 ++---
> >  2 files changed, 17 insertions(+), 10 deletions(-)
> >
> > diff --git a/include/libbb.h b/include/libbb.h
> > index 1cbe2c8..db75641 100644
> > --- a/include/libbb.h
> > +++ b/include/libbb.h
> > @@ -265,13 +265,21 @@ struct BUG_off_t_size_is_misdetected {
> >  #define SKIP   ((int) 2)
> >
> >  /* Macros for min/max.  */
> > -#ifndef MIN
> > -#define MIN(a,b) (((a)<(b))?(a):(b))
> > -#endif
> > -
> > -#ifndef MAX
> > -#define MAX(a,b) (((a)>(b))?(a):(b))
> > -#endif
> > +#undef MIN
> > +#define MIN(a,b) \
> > +       ({ \
> > +               __typeof__(a) _a = (a); \
> > +               __typeof__(b) _b = (b); \
> > +               _a < _b ? _a : _b; \
> > +       })
> > +
> > +#undef MAX
> > +#define MAX(a,b) \
> > +       ({ \
> > +               __typeof__(a) _a = (a); \
> > +               __typeof__(b) _b = (b); \
> > +               _a > _b ? _a : _b; \
> > +       })
> 
> typeof() is GCCism. I am wary of using it unless it's necessary.

In addition I think everybody's used to MIN/MAX being macros subject
to multiple evaluation...

Rich
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to