Patch from Larry Doolittle (with minor touchups from me so everything compiles
[oweals/busybox.git] / rmmod.c
diff --git a/rmmod.c b/rmmod.c
index 7d3eac51ee1d58f36e9544d1f8f758716ca1b20f..dd293523d675b04ed6a9662b36ebfeefe8594023 100644 (file)
--- a/rmmod.c
+++ b/rmmod.c
@@ -1,7 +1,8 @@
+/* vi: set sw=4 ts=4: */
 /*
  * Mini rmmod implementation for busybox
  *
- * Copyright (C) 1999 by Lineo, inc.
+ * Copyright (C) 1999,2000 by Lineo, inc.
  * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
  *
  * This program is free software; you can redistribute it and/or modify
  *
  */
 
-#include "internal.h"
+#include "busybox.h"
 #include <stdio.h>
 #include <errno.h>
 #include <unistd.h>
-#include <sys/syscall.h>
+#define __LIBRARY__
 
 
 
 /* And the system call of the day is...  */
-extern int delete_module (const char * __name);
-
-
-static const char rmmod_usage[] =
-    "rmmod [OPTION]... [MODULE]...\n\n"
-    "Unloads the specified kernel modules from the kernel.\n\n"
-    "Options:\n"
-    "\t-a\tTry to remove all unused kernel modules.\n";
-
-
+_syscall1(int, delete_module, const char *, name)
 
 extern int rmmod_main(int argc, char **argv)
 {
-    if (argc<=1) {
-       usage(rmmod_usage);
-    }
+       int ret = TRUE;
+       if (argc <= 1) {
+               usage(rmmod_usage);
+       }
 
-    /* Parse any options */
-    while (--argc > 0 && **(++argv) == '-') {
-       while (*(++(*argv))) {
-           switch (**argv) {
-           case 'a':
-               /* Unload _all_ modules via NULL delete_module() call */
-               if (delete_module(NULL)) {
-                   perror("rmmod");
-                   exit( FALSE);
+       /* Parse any options */
+       while (--argc > 0 && **(++argv) == '-') {
+               while (*(++(*argv))) {
+                       switch (**argv) {
+                       case 'a':
+                               /* Unload _all_ unused modules via NULL delete_module() call */
+                               if (delete_module(NULL)) {
+                                       perror("rmmod");
+                                       exit(FALSE);
+                               }
+                               exit(TRUE);
+                       default:
+                               usage(rmmod_usage);
+                       }
                }
-               exit( TRUE);
-           default:
-               usage(rmmod_usage);
-           }
        }
-    }
 
-    while (argc-- > 0 ) {
-       if (delete_module(*argv) < 0) {
-           perror(*argv);
+       while (argc-- > 0) {
+               if (delete_module(*argv) < 0) {
+                       perror(*argv);
+                       ret=FALSE;
+               }
+               argv++;
        }
-       argv++;
-    }
-    exit( TRUE);
+       return(ret);
 }