swapon/swapoff: refine the -e (ifexists) option
authorMike Frysinger <vapier@gentoo.org>
Wed, 16 Dec 2015 17:59:08 +0000 (12:59 -0500)
committerMike Frysinger <vapier@gentoo.org>
Wed, 16 Dec 2015 17:59:08 +0000 (12:59 -0500)
The -e option should only apply to swapon, and it should swallow all
errors/warnings when the device does not exist.  So delete the flag
from the swapoff patch and unify the check in the swapoff path.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
util-linux/swaponoff.c

index 5cd1fbe703cabe0da23af2d2ae8e9738acb32c5a..7e548a464520c2bb6d44af9005cec17d5c397c22 100644 (file)
 //usage:       )
 //usage:
 //usage:#define swapoff_trivial_usage
-//usage:       "[-a] [-e] [DEVICE]"
+//usage:       "[-a] [DEVICE]"
 //usage:#define swapoff_full_usage "\n\n"
 //usage:       "Stop swapping on DEVICE\n"
 //usage:     "\n       -a      Stop swapping on all swap devices"
-//usage:     "\n       -e      Silently skip devices that do not exist"
 
 #include "libbb.h"
 #include <mntent.h>
@@ -93,15 +92,12 @@ enum {
 #define OPT_IFEXISTS (option_mask32 & OPT_e)
 #define OPT_PRIO     (option_mask32 & OPT_p)
 
-static int swap_enable_disable(char *device)
+static int swap_enable_disable(const char *device)
 {
        int err = 0;
        int quiet = 0;
-       struct stat st;
 
        resolve_mount_spec(&device);
-       if (!OPT_IFEXISTS)
-               xstat(device, &st);
 
        if (do_swapoff) {
                err = swapoff(device);
@@ -109,6 +105,7 @@ static int swap_enable_disable(char *device)
                quiet = (OPT_ALL && (errno == EINVAL || errno == ENOENT));
        } else {
                /* swapon */
+               struct stat st;
                err = stat(device, &st);
                if (!err) {
                        if (ENABLE_DESKTOP && S_ISREG(st.st_mode)) {
@@ -119,9 +116,11 @@ static int swap_enable_disable(char *device)
                        }
                        err = swapon(device, g_flags);
                        /* Don't complain on swapon -a if device is already in use */
-                       /* Don't complain if file does not exist with -e option */
-                       quiet = (OPT_ALL && errno == EBUSY) || (OPT_IFEXISTS && errno == ENOENT);
+                       quiet = (OPT_ALL && errno == EBUSY);
                }
+               /* Don't complain if file does not exist with -e option */
+               if (err && OPT_IFEXISTS && errno == ENOENT)
+                       err = 0;
        }
 
        if (err && !quiet) {