rmmod: fix bug 263
authorDenis Vlasenko <vda.linux@googlemail.com>
Mon, 13 Apr 2009 02:25:40 +0000 (02:25 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Mon, 13 Apr 2009 02:25:40 +0000 (02:25 -0000)
"modutils/rmmod can't remove modules with dash in name on 2.4 kernels"

function                                             old     new   delta
rmmod_main                                           187     220     +33

modutils/insmod.c
modutils/modprobe-small.c
modutils/modutils-24.c
modutils/rmmod.c

index 2c7f647e2980aacc14a9579c6c90ba14b4c28507..90ed87a72aac98e8971dd2444e985fec51e47f80 100644 (file)
@@ -35,7 +35,7 @@ int insmod_main(int argc UNUSED_PARAM, char **argv)
 
        rc = bb_init_module(filename, parse_cmdline_module_options(argv));
        if (rc)
-               bb_error_msg("cannot insert '%s': %s", filename, moderror(rc));
+               bb_error_msg("can't insert '%s': %s", filename, moderror(rc));
 
        return rc;
 }
index d3fde0e8bbafa18c654c11a0be8d75d7d6ccbd4f..6eb950f32ea8103136a39a020a0ba8c46ce663cc 100644 (file)
@@ -776,7 +776,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
                        USE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(options ? options : "")
                        SKIP_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE("")
                                ) != 0)
-                       bb_error_msg_and_die("cannot insert '%s': %s",
+                       bb_error_msg_and_die("can't insert '%s': %s",
                                        *argv, moderror(errno));
                return 0;
        }
index 4b0e78687dd4f316545a5b59776f1fc2fcb7dac6..a16cb1bbe39328b34d1151facb117a8d3035d70c 100644 (file)
@@ -3803,7 +3803,7 @@ int FAST_FUNC bb_init_module_24(const char *m_filename, const char *options)
                if (m_has_modinfo) {
                        int m_version = new_get_module_version(f, m_strversion);
                        if (m_version == -1) {
-                               bb_error_msg_and_die("cannot find the kernel version "
+                               bb_error_msg_and_die("can't find the kernel version "
                                        "the module was compiled for");
                        }
                }
index cdc690a6936ac6ea32540439f5679d19d4058209..ee32dfdefceb838fe481d0ef7a03072d522bd809 100644 (file)
@@ -15,12 +15,11 @@ int rmmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int rmmod_main(int argc UNUSED_PARAM, char **argv)
 {
        int n;
-       unsigned int flags = O_NONBLOCK|O_EXCL;
+       unsigned flags = O_NONBLOCK | O_EXCL;
 
        /* Parse command line. */
        n = getopt32(argv, "wfas"); // -s ignored
        argv += optind;
-
        if (n & 1)      // --wait
                flags &= ~O_NONBLOCK;
        if (n & 2)      // --force
@@ -35,11 +34,18 @@ int rmmod_main(int argc UNUSED_PARAM, char **argv)
        if (!*argv)
                bb_show_usage();
 
+       n = ENABLE_FEATURE_2_4_MODULES && get_linux_version_code() < KERNEL_VERSION(2,6,0);
        while (*argv) {
                char modname[MODULE_NAME_LEN];
-               filename2modname(bb_basename(*argv++), modname);
+               const char *bname;
+
+               bname = bb_basename(*argv++);
+               if (n)
+                       safe_strncpy(modname, bname, MODULE_NAME_LEN);
+               else
+                       filename2modname(bname, modname);
                if (bb_delete_module(modname, flags))
-                       bb_error_msg_and_die("cannot unload '%s': %s",
+                       bb_error_msg_and_die("can't unload '%s': %s",
                                             modname, moderror(errno));
        }