summaryrefslogtreecommitdiff
path: root/modutils
diff options
context:
space:
mode:
authorGlenn L McGrath2003-08-31 01:58:18 +0000
committerGlenn L McGrath2003-08-31 01:58:18 +0000
commitc2942f0904edffa58877abf9d1f13c5d91a0ddee (patch)
treeb87634b0c5112b170b00e6a334ba1158fefa3ced /modutils
parentbb13624d8c31d5e4b725c5df0d9d19d834dc4a7b (diff)
downloadbusybox-c2942f0904edffa58877abf9d1f13c5d91a0ddee.zip
busybox-c2942f0904edffa58877abf9d1f13c5d91a0ddee.tar.gz
"insmod caches the symbolname in a variable before modifying it and uses
the cached value afterwards." - Jean Wolter
Diffstat (limited to 'modutils')
-rw-r--r--modutils/insmod.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/modutils/insmod.c b/modutils/insmod.c
index 4676b5a..54463a9 100644
--- a/modutils/insmod.c
+++ b/modutils/insmod.c
@@ -253,7 +253,7 @@
#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");