Willian Barsse wrote
authorGlenn L McGrath <bug1@ihug.co.nz>
Wed, 11 Aug 2004 02:30:30 +0000 (02:30 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Wed, 11 Aug 2004 02:30:30 +0000 (02:30 -0000)
"There seems to be a slight problem with the "mod_strcmp" function in
modprobe.c, it scans for the first occurence of the module name in the
"mod_path" variable and expects it to be the last path element. ie
/lib/modules/2.4.22-debug/kernel/fs/vfat in my example. The comparison
will always fail if mod_path contains another substring matching the
module name."

Robert McQueen wrote
"Although William Barsse's patch fixed mod_strcmp for 2.4 kernels, there
was a remaining problem which prevented it from working for me. I've
just tracked it down - when you enable kernel 2.6 module support it
hard-wired the extension to .ko instead of checking at runtime like the
other places where 2.4 differs from 2.6. The attached patch fixes this
for me."

modutils/modprobe.c

index e1e4519433c6c268b75456027b4cd9a67fa505f8..fd984e446213a9988edb8c97db76091fbc083820 100644 (file)
@@ -361,21 +361,20 @@ static struct dep_t *build_dep ( void )
 /* return 1 = found, 0 = not found                        */
 static int mod_strcmp ( const char *mod_path, const char *mod_name )
 {
-#if defined(CONFIG_FEATURE_2_6_MODULES)
-#define MODULE_EXTENSION       ".ko"
-#define MOD_EXTENSION_LEN      3
-#else
-#define MODULE_EXTENSION       ".o"
-#define MOD_EXTENSION_LEN      2
-#endif
        /* last path component */
        const char *last_comp = strrchr (mod_path, '/'); 
+       const char *mod_ext = ".o";
+
+#if defined(CONFIG_FEATURE_2_6_MODULES)
+       if ( k_version > 4 )
+               mod_ext = ".ko";
+#endif
 
        return (strncmp(last_comp ? last_comp + 1 : mod_path,
                                         mod_name,
                                         strlen(mod_name)) == 0 ) &&
                   (strcmp(mod_path + strlen(mod_path) -
-                                       MOD_EXTENSION_LEN, MODULE_EXTENSION) == 0);
+                                       strlen(mod_ext), mod_ext) == 0);
 }
 
 /* return 1 = loaded, 0 = not loaded, -1 = can't tell */