From 88a18b5070c3f132b5cfd6e1b3955fd9a4a7d8de Mon Sep 17 00:00:00 2001 From: "Carlos J. Torres" Date: Sat, 8 Feb 2014 12:54:04 -0500 Subject: disable all swap devices --- swapoff.c | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/swapoff.c b/swapoff.c index 88762fe..68b1f02 100644 --- a/swapoff.c +++ b/swapoff.c @@ -1,5 +1,6 @@ /* See LICENSE file for copyright and license details. */ #include +#include #include #include #include @@ -9,7 +10,7 @@ static void usage(void) { - eprintf("usage: %s device\n", argv0); + eprintf("usage: %s [-a] device\n", argv0); } int @@ -17,21 +18,41 @@ main(int argc, char *argv[]) { int i; int ret = EXIT_SUCCESS; + int all = 0; ARGBEGIN { + case 'a': + all = 1; + break; default: usage(); } ARGEND; - if (argc < 1) + if (!all && argc < 1) usage(); - for (i = 0; i < argc; i++) { - ret = swapoff(argv[i]); - if (ret < 0) { - fprintf(stderr, "swapoff %s: %s\n", - argv[i], strerror(errno)); - ret = EXIT_FAILURE; + if (all) { + struct mntent *me = NULL; + FILE *fp; + + fp = setmntent("/etc/fstab", "r"); + while ((me = getmntent(fp)) != NULL) { + if (strcmp(me->mnt_type, MNTTYPE_SWAP) == 0) { + if (swapoff(me->mnt_fsname) < 0) { + fprintf(stderr, "swapoff %s: %s\n", + me->mnt_fsname, strerror(errno)); + ret = EXIT_FAILURE; + } + } + } + endmntent(fp); + } else { + for (i = 0; i < argc; i++) { + if (swapoff(argv[i]) < 0) { + fprintf(stderr, "swapoff %s: %s\n", + argv[i], strerror(errno)); + ret = EXIT_FAILURE; + } } } return ret; -- 1.8.4