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

Reply via email to