diff options
author | Denis Vlasenko | 2006-12-27 04:35:09 +0000 |
---|---|---|
committer | Denis Vlasenko | 2006-12-27 04:35:09 +0000 |
commit | 7b76233290bd9dead1848f28ed6d0edfcceb8e09 (patch) | |
tree | b963999fc54eddb65f1929b894f868e24851fc9c /util-linux/swaponoff.c | |
download | busybox-7b76233290bd9dead1848f28ed6d0edfcceb8e09.zip busybox-7b76233290bd9dead1848f28ed6d0edfcceb8e09.tar.gz |
Correcting tag name to be like previous ones1_3_0
Diffstat (limited to 'util-linux/swaponoff.c')
-rw-r--r-- | util-linux/swaponoff.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/util-linux/swaponoff.c b/util-linux/swaponoff.c new file mode 100644 index 0000000..8434d12 --- /dev/null +++ b/util-linux/swaponoff.c @@ -0,0 +1,77 @@ +/* vi: set sw=4 ts=4: */ +/* + * Mini swapon/swapoff implementation for busybox + * + * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org> + * + * Licensed under the GPL version 2, see the file LICENSE in this tarball. + */ + +#include "busybox.h" +#include <mntent.h> +#include <sys/swap.h> + + +static int swap_enable_disable(char *device) +{ + int status; + struct stat st; + + xstat(device, &st); + + /* test for holes */ + if (S_ISREG(st.st_mode)) + if (st.st_blocks * 512 < st.st_size) + bb_error_msg_and_die("swap file has holes"); + + if (applet_name[5] == 'n') + status = swapon(device, 0); + else + status = swapoff(device); + + if (status != 0) { + bb_perror_msg("%s", device); + return 1; + } + + return 0; +} + +static int do_em_all(void) +{ + struct mntent *m; + FILE *f; + int err; + + f = setmntent("/etc/fstab", "r"); + if (f == NULL) + bb_perror_msg_and_die("/etc/fstab"); + + err = 0; + while ((m = getmntent(f)) != NULL) + if (strcmp(m->mnt_type, MNTTYPE_SWAP) == 0) + err += swap_enable_disable(m->mnt_fsname); + + endmntent(f); + + return err; +} + +#define DO_ALL 0x01 + +int swap_on_off_main(int argc, char **argv) +{ + int ret; + + if (argc == 1) + bb_show_usage(); + + ret = getopt32(argc, argv, "a"); + if (ret & DO_ALL) + return do_em_all(); + + ret = 0; + while (*++argv) + ret += swap_enable_disable(*argv); + return ret; +} |