swapon/swapoff: refine the -e (ifexists) option

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>
This commit is contained in:
Mike Frysinger 2015-12-16 12:59:08 -05:00
parent 77e2bde6a5
commit 5f11ec3f6a

View File

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