diff options
Diffstat (limited to 'modutils/rmmod.c')
-rw-r--r-- | modutils/rmmod.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/modutils/rmmod.c b/modutils/rmmod.c index cdc690a69..ee32dfdef 100644 --- a/modutils/rmmod.c +++ b/modutils/rmmod.c | |||
@@ -15,12 +15,11 @@ int rmmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | |||
15 | int rmmod_main(int argc UNUSED_PARAM, char **argv) | 15 | int rmmod_main(int argc UNUSED_PARAM, char **argv) |
16 | { | 16 | { |
17 | int n; | 17 | int n; |
18 | unsigned int flags = O_NONBLOCK|O_EXCL; | 18 | unsigned flags = O_NONBLOCK | O_EXCL; |
19 | 19 | ||
20 | /* Parse command line. */ | 20 | /* Parse command line. */ |
21 | n = getopt32(argv, "wfas"); // -s ignored | 21 | n = getopt32(argv, "wfas"); // -s ignored |
22 | argv += optind; | 22 | argv += optind; |
23 | |||
24 | if (n & 1) // --wait | 23 | if (n & 1) // --wait |
25 | flags &= ~O_NONBLOCK; | 24 | flags &= ~O_NONBLOCK; |
26 | if (n & 2) // --force | 25 | if (n & 2) // --force |
@@ -35,11 +34,18 @@ int rmmod_main(int argc UNUSED_PARAM, char **argv) | |||
35 | if (!*argv) | 34 | if (!*argv) |
36 | bb_show_usage(); | 35 | bb_show_usage(); |
37 | 36 | ||
37 | n = ENABLE_FEATURE_2_4_MODULES && get_linux_version_code() < KERNEL_VERSION(2,6,0); | ||
38 | while (*argv) { | 38 | while (*argv) { |
39 | char modname[MODULE_NAME_LEN]; | 39 | char modname[MODULE_NAME_LEN]; |
40 | filename2modname(bb_basename(*argv++), modname); | 40 | const char *bname; |
41 | |||
42 | bname = bb_basename(*argv++); | ||
43 | if (n) | ||
44 | safe_strncpy(modname, bname, MODULE_NAME_LEN); | ||
45 | else | ||
46 | filename2modname(bname, modname); | ||
41 | if (bb_delete_module(modname, flags)) | 47 | if (bb_delete_module(modname, flags)) |
42 | bb_error_msg_and_die("cannot unload '%s': %s", | 48 | bb_error_msg_and_die("can't unload '%s': %s", |
43 | modname, moderror(errno)); | 49 | modname, moderror(errno)); |
44 | } | 50 | } |
45 | 51 | ||