summaryrefslogtreecommitdiff
path: root/modutils/rmmod.c
diff options
context:
space:
mode:
Diffstat (limited to 'modutils/rmmod.c')
-rw-r--r--modutils/rmmod.c25
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);
}