avoid calling bb_strtou twice in MIN macro expansion

Also, the maximum allowable value of swap priority is technically SWAP_FLAG_PRIO_MASK >> SWAP_FLAG_PRIO_SHIFT.

Signed-off-by: Matt Whitlock <busybox@mattwhitlock.name>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Matt Whitlock 2014-03-22 18:54:24 -04:00 committed by Denys Vlasenko
parent 504fe45f35
commit c3a27b0bfd

View File

@ -100,12 +100,12 @@ static int do_em_all(void)
g_flags = 0; /* each swap space might have different flags */ g_flags = 0; /* each swap space might have different flags */
p = hasmntopt(m, "pri"); p = hasmntopt(m, "pri");
if (p) { if (p) {
/* Max allowed 32767 (==SWAP_FLAG_PRIO_MASK) */ /* Max allowed 32767 (== SWAP_FLAG_PRIO_MASK) */
unsigned int swap_prio = MIN(bb_strtou(p + 4 , NULL, 10), SWAP_FLAG_PRIO_MASK); unsigned prio = bb_strtou(p + 4, NULL, 10);
/* We want to allow "NNNN,foo", thus errno == EINVAL is allowed too */ /* We want to allow "NNNN,foo", thus errno == EINVAL is allowed too */
if (errno != ERANGE) { if (errno != ERANGE) {
g_flags = SWAP_FLAG_PREFER | g_flags = SWAP_FLAG_PREFER |
(swap_prio << SWAP_FLAG_PRIO_SHIFT); MIN(prio, SWAP_FLAG_PRIO_MASK);
} }
} }
#endif #endif
@ -124,6 +124,9 @@ int swap_on_off_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int swap_on_off_main(int argc UNUSED_PARAM, char **argv) int swap_on_off_main(int argc UNUSED_PARAM, char **argv)
{ {
int ret; int ret;
#if ENABLE_FEATURE_SWAPON_PRI
unsigned prio;
#endif
INIT_G(); INIT_G();
@ -132,11 +135,11 @@ int swap_on_off_main(int argc UNUSED_PARAM, char **argv)
#else #else
if (applet_name[5] == 'n') if (applet_name[5] == 'n')
opt_complementary = "p+"; opt_complementary = "p+";
ret = getopt32(argv, (applet_name[5] == 'n') ? "ap:" : "a", &g_flags); ret = getopt32(argv, (applet_name[5] == 'n') ? "ap:" : "a", &prio);
if (ret & 2) { // -p if (ret & 2) { // -p
g_flags = SWAP_FLAG_PREFER | g_flags = SWAP_FLAG_PREFER |
((g_flags & SWAP_FLAG_PRIO_MASK) << SWAP_FLAG_PRIO_SHIFT); MIN(prio, SWAP_FLAG_PRIO_MASK);
ret &= 1; ret &= 1;
} }
#endif #endif