More fixes
authorEric Andersen <andersen@codepoet.org>
Mon, 18 Oct 1999 21:22:59 +0000 (21:22 -0000)
committerEric Andersen <andersen@codepoet.org>
Mon, 18 Oct 1999 21:22:59 +0000 (21:22 -0000)
applets/busybox.c
busybox.c
busybox.def.h
internal.h
swapoff.c [deleted file]
swapon.c [deleted file]
swaponoff.c [new file with mode: 0644]
util-linux/swaponoff.c [new file with mode: 0644]

index 45365b3..6bc223a 100644 (file)
@@ -132,11 +132,9 @@ static const struct Applet applets[] = {
 #ifdef BB_TAR                  //bin
     {"tar", tar_main},
 #endif
-#ifdef BB_SWAPOFF              //sbin
-    {"swapoff", monadic_main},
-#endif
-#ifdef BB_SWAPON               //sbin
-    {"swapon", monadic_main},
+#ifdef BB_SWAPONOFF            //sbin
+    {"swapon", swap_on_off_main},
+    {"swapoff", swap_on_off_main},
 #endif
 #ifdef BB_SYNC                 //bin
     {"sync", sync_main},
@@ -148,7 +146,7 @@ static const struct Applet applets[] = {
     {"true", true_main},
 #endif
 #ifdef BB_UMOUNT               //bin
-    {"umount", umount_main},
+    {"umount",  umount_main},
 #endif
 #ifdef BB_UPDATE               //sbin
     {"update", update_main},
index 45365b3..6bc223a 100644 (file)
--- a/busybox.c
+++ b/busybox.c
@@ -132,11 +132,9 @@ static const struct Applet applets[] = {
 #ifdef BB_TAR                  //bin
     {"tar", tar_main},
 #endif
-#ifdef BB_SWAPOFF              //sbin
-    {"swapoff", monadic_main},
-#endif
-#ifdef BB_SWAPON               //sbin
-    {"swapon", monadic_main},
+#ifdef BB_SWAPONOFF            //sbin
+    {"swapon", swap_on_off_main},
+    {"swapoff", swap_on_off_main},
 #endif
 #ifdef BB_SYNC                 //bin
     {"sync", sync_main},
@@ -148,7 +146,7 @@ static const struct Applet applets[] = {
     {"true", true_main},
 #endif
 #ifdef BB_UMOUNT               //bin
-    {"umount", umount_main},
+    {"umount",  umount_main},
 #endif
 #ifdef BB_UPDATE               //sbin
     {"update", update_main},
index 10a55f4..8fcbf83 100644 (file)
@@ -42,8 +42,7 @@
 #define BB_RM
 #define BB_RMDIR
 #define BB_SLEEP
-////#define BB_SWAPOFF
-//#define BB_SWAPON
+#define BB_SWAPONOFF
 #define BB_SYNC
 #define BB_TAR
 #define BB_TOUCH
index a876539..b676e5f 100644 (file)
@@ -96,6 +96,7 @@ extern int rm_main(int argc, char** argv);
 extern int scan_partitions_main(int argc, char** argv);
 extern int sh_main(int argc, char** argv);
 extern int sleep_main(int argc, char** argv);
+extern int swap_on_off_main(int argc, char** argv);
 extern int tar_main(int argc, char** argv);
 extern int touch_main(int argc, char** argv);
 extern int sync_main(int argc, char** argv);
diff --git a/swapoff.c b/swapoff.c
deleted file mode 100644 (file)
index 29b9dae..0000000
--- a/swapoff.c
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <sys/swap.h>
-#include <string.h>
-#include <errno.h>
-#include <mntent.h>
-#include "internal.h"
-
-const char     swapoff_usage[] = "swapoff block-device\n"
-"\n"
-"\tStop swapping virtual memory pages on the given device.\n";
-
-extern int
-swapoff_fn(const struct FileInfo * i)
-{
-       struct mntent   entries[100];
-       int          count = 0;
-       FILE *    swapsTable = setmntent("/proc/swaps", "r");
-       struct mntent * m;
-
-       if (!(swapoff(i->source))) {
-               if ( swapsTable == 0 ) {
-                       fprintf(stderr, "/etc/swaps: %s\n", strerror(errno));
-                       return 1;
-               }
-               while ( (m = getmntent(swapsTable)) != 0 ) {
-                       entries[count].mnt_fsname = strdup(m->mnt_fsname);
-                       entries[count].mnt_dir = strdup(m->mnt_dir);
-                       entries[count].mnt_type = strdup(m->mnt_type);
-                       entries[count].mnt_opts = strdup(m->mnt_opts);
-                       entries[count].mnt_freq = m->mnt_freq;
-                       entries[count].mnt_passno = m->mnt_passno;
-                       count++;
-               }
-               endmntent(swapsTable);
-               if ( (swapsTable = setmntent("/etc/swaps", "w")) ) {
-                       int     id;
-                       for ( id = 0; id < count; id++ ) {
-                               int result = 
-                                (strcmp(entries[id].mnt_fsname, i->source)==0
-                                ||strcmp(entries[id].mnt_dir, i->source)==0);
-                               if ( result )
-                                       continue;
-                               else
-                                       addmntent(swapsTable, &entries[id]);
-                       }
-                       endmntent(swapsTable);
-               }
-               else if ( errno != EROFS )
-                       fprintf(stderr, "/etc/swaps: %s\n", strerror(errno));
-               return (0);
-       }
-       return (-1);
-}
diff --git a/swapon.c b/swapon.c
deleted file mode 100644 (file)
index 78360a5..0000000
--- a/swapon.c
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <stdio.h>
-#include <mntent.h>
-#include <sys/swap.h>
-#include "internal.h"
-
-const char     swapon_usage[] = "swapon block-device\n"
-"\n"
-"\tSwap virtual memory pages on the given device.\n";
-
-extern int
-swapon_fn(const struct FileInfo * i)
-{
-       FILE *swapsTable;
-       struct mntent m;
-
-        if (!(swapon(i->source, 0))) {
-               if ((swapsTable = setmntent("/etc/swaps", "a+"))) {
-                       /* Needs the cast to avoid warning about conversion from
-                        * const char* to just  char*
-                        */
-                       m.mnt_fsname = (char*)i->source;
-                       m.mnt_dir = "none";
-                       m.mnt_type = "swap";
-                       m.mnt_opts = "sw";
-                       m.mnt_freq = 0;
-                       m.mnt_passno = 0;
-                       addmntent(swapsTable, &m);
-                       endmntent(swapsTable);
-               }
-               return (0);
-       }
-       return (-1);
-}
-
diff --git a/swaponoff.c b/swaponoff.c
new file mode 100644 (file)
index 0000000..56f93b3
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Mini swapon/swapoff implementation for busybox
+ *
+ * Copyright (C) 1998 by Erik Andersen <andersee@debian.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "internal.h"
+#include <stdio.h>
+#include <sys/mount.h>
+#include <sys/swap.h>
+#include <mntent.h>
+#include <dirent.h>
+#include <fstab.h>
+#include <errno.h>
+
+
+static int whichApp;
+static const char* appName;
+
+static const char swapoff_usage[] = 
+"Usage: swapoff device\n"
+"\nStop swapping virtual memory pages on the given device.\n";
+static const char swapon_usage[] = 
+"Usage: swapon device\n"
+"\nStart swapping virtual memory pages on the given device.\n";
+
+
+#define SWAPON_APP   1
+#define SWAPOFF_APP  2
+
+
+static void
+swap_enable_disable( char *device)
+{
+    int status;
+    if ( whichApp == SWAPON_APP )
+       status = swapon(device, 0);
+    else 
+       status = swapoff(device);
+
+    if ( status != 0 ) { 
+       perror(appName);
+       exit( FALSE);
+    }
+}
+
+static void
+do_em_all()
+{
+       struct mntent *m;
+       char swapName[NAME_MAX];
+       FILE *f = setmntent ("/etc/fstab", "r");
+
+       if (f == NULL) {
+           perror("/etc/fstab");
+           exit( FALSE); 
+       }
+       while ((m = getmntent (f)) != NULL) {
+           if (!strstr (m->mnt_type, "swap")) {
+                   swap_enable_disable( swapName);
+           }
+       }
+       endmntent (f);
+       exit( TRUE);
+}
+
+
+extern int
+swap_on_off_main(int argc, char * * argv)
+{
+    struct stat statBuf;
+    if (stat("/etc/fstab", &statBuf) < 0) 
+       fprintf(stderr, "/etc/fstab file missing -- Please install one.\n\n");
+
+    if (strcmp(*argv, "swapon")==0) {
+       appName = *argv;
+       whichApp = SWAPON_APP;
+
+    } else {
+       appName = *argv;
+       whichApp = SWAPOFF_APP;
+    }
+
+    if (argc < 2)
+       goto usage_and_exit;
+    argc--;
+    argv++;
+
+    /* Parse any options */
+    while (**argv == '-') {
+       while (*++(*argv)) switch (**argv) {
+           case 'a':
+               do_em_all();
+               break;
+           default:
+               goto usage_and_exit;
+       }
+    }
+    swap_enable_disable(*argv);
+    //exit( TRUE);
+
+usage_and_exit:
+    fprintf(stderr, "Usage: %s", (whichApp==SWAPON_APP)? swapon_usage : swapoff_usage);
+    exit(FALSE);
+}
+
diff --git a/util-linux/swaponoff.c b/util-linux/swaponoff.c
new file mode 100644 (file)
index 0000000..56f93b3
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Mini swapon/swapoff implementation for busybox
+ *
+ * Copyright (C) 1998 by Erik Andersen <andersee@debian.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "internal.h"
+#include <stdio.h>
+#include <sys/mount.h>
+#include <sys/swap.h>
+#include <mntent.h>
+#include <dirent.h>
+#include <fstab.h>
+#include <errno.h>
+
+
+static int whichApp;
+static const char* appName;
+
+static const char swapoff_usage[] = 
+"Usage: swapoff device\n"
+"\nStop swapping virtual memory pages on the given device.\n";
+static const char swapon_usage[] = 
+"Usage: swapon device\n"
+"\nStart swapping virtual memory pages on the given device.\n";
+
+
+#define SWAPON_APP   1
+#define SWAPOFF_APP  2
+
+
+static void
+swap_enable_disable( char *device)
+{
+    int status;
+    if ( whichApp == SWAPON_APP )
+       status = swapon(device, 0);
+    else 
+       status = swapoff(device);
+
+    if ( status != 0 ) { 
+       perror(appName);
+       exit( FALSE);
+    }
+}
+
+static void
+do_em_all()
+{
+       struct mntent *m;
+       char swapName[NAME_MAX];
+       FILE *f = setmntent ("/etc/fstab", "r");
+
+       if (f == NULL) {
+           perror("/etc/fstab");
+           exit( FALSE); 
+       }
+       while ((m = getmntent (f)) != NULL) {
+           if (!strstr (m->mnt_type, "swap")) {
+                   swap_enable_disable( swapName);
+           }
+       }
+       endmntent (f);
+       exit( TRUE);
+}
+
+
+extern int
+swap_on_off_main(int argc, char * * argv)
+{
+    struct stat statBuf;
+    if (stat("/etc/fstab", &statBuf) < 0) 
+       fprintf(stderr, "/etc/fstab file missing -- Please install one.\n\n");
+
+    if (strcmp(*argv, "swapon")==0) {
+       appName = *argv;
+       whichApp = SWAPON_APP;
+
+    } else {
+       appName = *argv;
+       whichApp = SWAPOFF_APP;
+    }
+
+    if (argc < 2)
+       goto usage_and_exit;
+    argc--;
+    argv++;
+
+    /* Parse any options */
+    while (**argv == '-') {
+       while (*++(*argv)) switch (**argv) {
+           case 'a':
+               do_em_all();
+               break;
+           default:
+               goto usage_and_exit;
+       }
+    }
+    swap_enable_disable(*argv);
+    //exit( TRUE);
+
+usage_and_exit:
+    fprintf(stderr, "Usage: %s", (whichApp==SWAPON_APP)? swapon_usage : swapoff_usage);
+    exit(FALSE);
+}
+