Another update from Larry:
[oweals/busybox.git] / rmmod.c
diff --git a/rmmod.c b/rmmod.c
index aab32612352c9cdb980a6fb2932ffbf869de4c1b..7596d023237bf36cf46684659d06320fa685c4a4 100644 (file)
--- a/rmmod.c
+++ b/rmmod.c
 #include <errno.h>
 #include <unistd.h>
 #include <stdlib.h>
-#include <sys/syscall.h>
-#include <linux/unistd.h>
+#include <getopt.h>
 #include "busybox.h"
-#define __LIBRARY__
 
+extern int delete_module(const char * name);
 
 
-/* And the system call of the day is...  */
-_syscall1(int, delete_module, const char *, name)
-
 extern int rmmod_main(int argc, char **argv)
 {
-       int ret = EXIT_SUCCESS;
-       if (argc <= 1) {
-               show_usage();
-       }
+       int n, ret = EXIT_SUCCESS;
 
-       /* Parse any options */
-       while (--argc > 0 && **(++argv) == '-') {
-               while (*(++(*argv))) {
-                       switch (**argv) {
+       /* Parse command line. */
+       while ((n = getopt(argc, argv, "a")) != EOF) {
+               switch (n) {
                        case 'a':
                                /* Unload _all_ unused modules via NULL delete_module() call */
                                if (delete_module(NULL))
@@ -53,16 +45,18 @@ extern int rmmod_main(int argc, char **argv)
                                return EXIT_SUCCESS;
                        default:
                                show_usage();
-                       }
                }
        }
 
-       while (argc-- > 0) {
-               if (delete_module(*argv) < 0) {
-                       perror_msg("%s", *argv);
+       if (optind == argc)
+                       show_usage();
+
+       for (n = optind; n < argc; n++) {
+               if (delete_module(argv[n]) < 0) {
+                       perror_msg("%s", argv[n]);
                        ret = EXIT_FAILURE;
                }
-               argv++;
        }
+
        return(ret);
 }