diff options
Diffstat (limited to 'modutils/rmmod.c')
-rw-r--r-- | modutils/rmmod.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/modutils/rmmod.c b/modutils/rmmod.c index aab3261..36857e0 100644 --- a/modutils/rmmod.c +++ b/modutils/rmmod.c @@ -25,6 +25,7 @@ #include <errno.h> #include <unistd.h> #include <stdlib.h> +#include <getopt.h> #include <sys/syscall.h> #include <linux/unistd.h> #include "busybox.h" @@ -37,15 +38,11 @@ _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 +50,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); } |