diff options
author | Glenn L McGrath <bug1@ihug.co.nz> | 2003-08-31 01:58:18 +0000 |
---|---|---|
committer | Glenn L McGrath <bug1@ihug.co.nz> | 2003-08-31 01:58:18 +0000 |
commit | c2942f0904edffa58877abf9d1f13c5d91a0ddee (patch) | |
tree | b87634b0c5112b170b00e6a334ba1158fefa3ced | |
parent | bb13624d8c31d5e4b725c5df0d9d19d834dc4a7b (diff) | |
download | busybox-c2942f0904edffa58877abf9d1f13c5d91a0ddee.tar.gz |
"insmod caches the symbolname in a variable before modifying it and uses
the cached value afterwards." - Jean Wolter
-rw-r--r-- | modutils/insmod.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/modutils/insmod.c b/modutils/insmod.c index 4676b5aa8..54463a9d0 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"); |