Fix decoding of swapon flags
* swapon.c (SYS_FUNC(swapon)): Print priority regardless
of SWAP_FLAG_PREFER flag being set.
* tests/swap.c (error_msg): Handle EINVAL.
(main): Check decoding of swapon flags.
diff --git a/swapon.c b/swapon.c
index 5f6df0b..ef88b1c 100644
--- a/swapon.c
+++ b/swapon.c
@@ -6,14 +6,19 @@
SYS_FUNC(swapon)
{
- int flags = tcp->u_arg[1];
+ unsigned int flags = tcp->u_arg[1];
+ unsigned int prio = flags & SWAP_FLAG_PRIO_MASK;
+ flags &= ~SWAP_FLAG_PRIO_MASK;
printpath(tcp, tcp->u_arg[0]);
tprints(", ");
- printflags(swap_flags, flags & ~SWAP_FLAG_PRIO_MASK,
- "SWAP_FLAG_???");
- if (flags & SWAP_FLAG_PREFER)
- tprintf("|%d", flags & SWAP_FLAG_PRIO_MASK);
+ if (flags) {
+ printflags(swap_flags, flags, "SWAP_FLAG_???");
+ if (prio)
+ tprintf("|%u", prio);
+ } else {
+ tprintf("%u", prio);
+ }
return RVAL_DECODED;
}