"insmod caches the symbolname in a variable before modifying it and uses
authorGlenn L McGrath <bug1@ihug.co.nz>
Sun, 31 Aug 2003 01:58:18 +0000 (01:58 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Sun, 31 Aug 2003 01:58:18 +0000 (01:58 -0000)
the cached value afterwards." - Jean Wolter

modutils/insmod.c

index 4676b5aa8cc1cca86cb7a219f153c4b44d7ace46..54463a9d0f78747f59e13ad8c2ec772e8cff8b22 100644 (file)
 #ifndef MODUTILS_MODULE_H
 static const int MODUTILS_MODULE_H = 1;
 
-#ident "$Id: insmod.c,v 1.101 2003/08/30 06:00:33 bug1 Exp $"
+#ident "$Id: insmod.c,v 1.102 2003/08/31 01:58:18 bug1 Exp $"
 
 /* This file contains the structures used by the 2.0 and 2.1 kernels.
    We do not use the kernel headers directly because we do not wish
@@ -474,7 +474,7 @@ int delete_module(const char *);
 #ifndef MODUTILS_OBJ_H
 static const int MODUTILS_OBJ_H = 1;
 
-#ident "$Id: insmod.c,v 1.101 2003/08/30 06:00:33 bug1 Exp $"
+#ident "$Id: insmod.c,v 1.102 2003/08/31 01:58:18 bug1 Exp $"
 
 /* The relocatable object is manipulated using elfin types.  */
 
@@ -1942,7 +1942,7 @@ add_symbols_from(
                   argument initialization.  We will also create a false
                   dependency on the module.  */
                struct obj_symbol *sym;
-               char *name = (char *)s->name;
+               char *name;
 
                /* GPL licensed modules can use symbols exported with
                 * EXPORT_SYMBOL_GPL, so ignore any GPLONLY_ prefix on the
@@ -1956,6 +1956,7 @@ add_symbols_from(
                        else
                                continue;
                }
+               name = (char *)s->name;
 
 #ifdef SYMBOL_PREFIX
                /* Prepend SYMBOL_PREFIX to the symbol's name (the
@@ -4129,6 +4130,14 @@ extern int insmod_main( int argc, char **argv)
 
        printf("Using %s\n", m_filename);
 
+#ifdef CONFIG_FEATURE_REALLY_NEW_MODULE_INTERFACE
+    if (create_module(NULL, 0) < 0 && errno == ENOSYS) {
+               optind--;
+               argv[optind] = m_filename;
+               return insmod_ng_main(argc - optind, argv + optind);
+    }
+#endif
+
        if ((f = obj_load(fp, LOADBITS)) == NULL)
                bb_perror_msg_and_die("Could not load the module");