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; \ + }) /* buffer allocation schemes */ #if ENABLE_FEATURE_BUFFERS_GO_ON_STACK diff --git a/util-linux/swaponoff.c b/util-linux/swaponoff.c index a7ad6db..b3d265f 100644 --- a/util-linux/swaponoff.c +++ b/util-linux/swaponoff.c @@ -137,11 +137,10 @@ static int do_em_all(void) p = hasmntopt(m, "pri"); if (p) { /* Max allowed 32767 (== SWAP_FLAG_PRIO_MASK) */ - unsigned prio = bb_strtou(p + 4, NULL, 10); + unsigned prio = MIN(bb_strtou(p + 4, NULL, 10), SWAP_FLAG_PRIO_MASK); /* We want to allow "NNNN,foo", thus errno == EINVAL is allowed too */ if (errno != ERANGE) { - g_flags = (g_flags & ~SWAP_FLAG_PRIO_MASK) | SWAP_FLAG_PREFER | - MIN(prio, SWAP_FLAG_PRIO_MASK); + g_flags = (g_flags & ~SWAP_FLAG_PRIO_MASK) | SWAP_FLAG_PREFER | prio; } } #endif -- 1.8.4.5 _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
