diff options
author | andersen <andersen@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 1999-10-18 21:22:59 +0000 |
---|---|---|
committer | andersen <andersen@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 1999-10-18 21:22:59 +0000 |
commit | 1e03a3215a59734b26ac16154e611c19b8ae7478 (patch) | |
tree | ae74dfbfd1ea2d85e54673de631471ab40fc277a /util-linux | |
parent | 4f31b9ecebd9a5b0c4164ae4cb1f1814f1ca15a3 (diff) | |
download | busybox-w32-1e03a3215a59734b26ac16154e611c19b8ae7478.tar.gz busybox-w32-1e03a3215a59734b26ac16154e611c19b8ae7478.tar.bz2 busybox-w32-1e03a3215a59734b26ac16154e611c19b8ae7478.zip |
More fixes
git-svn-id: svn://busybox.net/trunk/busybox@32 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'util-linux')
-rw-r--r-- | util-linux/swaponoff.c | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/util-linux/swaponoff.c b/util-linux/swaponoff.c new file mode 100644 index 000000000..56f93b393 --- /dev/null +++ b/util-linux/swaponoff.c | |||
@@ -0,0 +1,121 @@ | |||
1 | /* | ||
2 | * Mini swapon/swapoff implementation for busybox | ||
3 | * | ||
4 | * Copyright (C) 1998 by Erik Andersen <andersee@debian.org> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | * General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | * | ||
20 | */ | ||
21 | |||
22 | #include "internal.h" | ||
23 | #include <stdio.h> | ||
24 | #include <sys/mount.h> | ||
25 | #include <sys/swap.h> | ||
26 | #include <mntent.h> | ||
27 | #include <dirent.h> | ||
28 | #include <fstab.h> | ||
29 | #include <errno.h> | ||
30 | |||
31 | |||
32 | static int whichApp; | ||
33 | static const char* appName; | ||
34 | |||
35 | static const char swapoff_usage[] = | ||
36 | "Usage: swapoff device\n" | ||
37 | "\nStop swapping virtual memory pages on the given device.\n"; | ||
38 | static const char swapon_usage[] = | ||
39 | "Usage: swapon device\n" | ||
40 | "\nStart swapping virtual memory pages on the given device.\n"; | ||
41 | |||
42 | |||
43 | #define SWAPON_APP 1 | ||
44 | #define SWAPOFF_APP 2 | ||
45 | |||
46 | |||
47 | static void | ||
48 | swap_enable_disable( char *device) | ||
49 | { | ||
50 | int status; | ||
51 | if ( whichApp == SWAPON_APP ) | ||
52 | status = swapon(device, 0); | ||
53 | else | ||
54 | status = swapoff(device); | ||
55 | |||
56 | if ( status != 0 ) { | ||
57 | perror(appName); | ||
58 | exit( FALSE); | ||
59 | } | ||
60 | } | ||
61 | |||
62 | static void | ||
63 | do_em_all() | ||
64 | { | ||
65 | struct mntent *m; | ||
66 | char swapName[NAME_MAX]; | ||
67 | FILE *f = setmntent ("/etc/fstab", "r"); | ||
68 | |||
69 | if (f == NULL) { | ||
70 | perror("/etc/fstab"); | ||
71 | exit( FALSE); | ||
72 | } | ||
73 | while ((m = getmntent (f)) != NULL) { | ||
74 | if (!strstr (m->mnt_type, "swap")) { | ||
75 | swap_enable_disable( swapName); | ||
76 | } | ||
77 | } | ||
78 | endmntent (f); | ||
79 | exit( TRUE); | ||
80 | } | ||
81 | |||
82 | |||
83 | extern int | ||
84 | swap_on_off_main(int argc, char * * argv) | ||
85 | { | ||
86 | struct stat statBuf; | ||
87 | if (stat("/etc/fstab", &statBuf) < 0) | ||
88 | fprintf(stderr, "/etc/fstab file missing -- Please install one.\n\n"); | ||
89 | |||
90 | if (strcmp(*argv, "swapon")==0) { | ||
91 | appName = *argv; | ||
92 | whichApp = SWAPON_APP; | ||
93 | |||
94 | } else { | ||
95 | appName = *argv; | ||
96 | whichApp = SWAPOFF_APP; | ||
97 | } | ||
98 | |||
99 | if (argc < 2) | ||
100 | goto usage_and_exit; | ||
101 | argc--; | ||
102 | argv++; | ||
103 | |||
104 | /* Parse any options */ | ||
105 | while (**argv == '-') { | ||
106 | while (*++(*argv)) switch (**argv) { | ||
107 | case 'a': | ||
108 | do_em_all(); | ||
109 | break; | ||
110 | default: | ||
111 | goto usage_and_exit; | ||
112 | } | ||
113 | } | ||
114 | swap_enable_disable(*argv); | ||
115 | //exit( TRUE); | ||
116 | |||
117 | usage_and_exit: | ||
118 | fprintf(stderr, "Usage: %s", (whichApp==SWAPON_APP)? swapon_usage : swapoff_usage); | ||
119 | exit(FALSE); | ||
120 | } | ||
121 | |||