aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2004-06-22 10:43:09 +0000
committerEric Andersen <andersen@codepoet.org>2004-06-22 10:43:09 +0000
commitd943837dab6eb2b2809426c0e81f7b8e8cf82208 (patch)
treec819a81d5140817a34d93a383de5ebb0ecb0d278
parent4872ed9737c1349aec2f41b1b8a905a9158da5c1 (diff)
downloadbusybox-w32-d943837dab6eb2b2809426c0e81f7b8e8cf82208.tar.gz
busybox-w32-d943837dab6eb2b2809426c0e81f7b8e8cf82208.tar.bz2
busybox-w32-d943837dab6eb2b2809426c0e81f7b8e8cf82208.zip
Patrick Huesmann writes:
Hi, There was some problem with busybox modprobe. For details see http://www.busybox.net/lists/busybox/2004-May/011507.html I made a patch against busybox-1.00-pre10 to fix that one. This is a slight variant of Patrick's patch with a slightly cleaner implementation of mod_strcmp() -Erik
-rw-r--r--modutils/Config.in8
-rw-r--r--modutils/modprobe.c29
2 files changed, 30 insertions, 7 deletions
diff --git a/modutils/Config.in b/modutils/Config.in
index faccee88f..45569cc8c 100644
--- a/modutils/Config.in
+++ b/modutils/Config.in
@@ -21,16 +21,16 @@ config CONFIG_FEATURE_2_2_MODULES
21config CONFIG_FEATURE_2_4_MODULES 21config CONFIG_FEATURE_2_4_MODULES
22 bool " Support version 2.1.x to 2.4.x Linux kernels" 22 bool " Support version 2.1.x to 2.4.x Linux kernels"
23 default y 23 default y
24 depends on CONFIG_INSMOD 24 depends on CONFIG_INSMOD && !CONFIG_FEATURE_2_6_MODULES
25 help 25 help
26 Support module loading for newer (post 2.1) Linux kernels. 26 Support module loading for 2.2.x and 2.4.x Linux kernels.
27 27
28config CONFIG_FEATURE_2_6_MODULES 28config CONFIG_FEATURE_2_6_MODULES
29 bool " Support version 2.6.x Linux kernels" 29 bool " Support version 2.6.x Linux kernels"
30 default n 30 default n
31 depends on CONFIG_INSMOD 31 depends on CONFIG_INSMOD && !CONFIG_FEATURE_2_4_MODULES
32 help 32 help
33 Support module loading for newer (post 2.1) Linux kernels. 33 Support module loading for 2.6.x Linux kernels.
34 34
35config CONFIG_FEATURE_INSMOD_VERSION_CHECKING 35config CONFIG_FEATURE_INSMOD_VERSION_CHECKING
36 bool " Module version checking" 36 bool " Module version checking"
diff --git a/modutils/modprobe.c b/modutils/modprobe.c
index df5d4bbd1..c584d8a61 100644
--- a/modutils/modprobe.c
+++ b/modutils/modprobe.c
@@ -182,7 +182,7 @@ static struct dep_t *build_dep ( void )
182 if (( *(col-2) == '.' ) && ( *(col-1) == 'o' )) 182 if (( *(col-2) == '.' ) && ( *(col-1) == 'o' ))
183 ext = 2; 183 ext = 2;
184 184
185 mod = bb_xstrndup ( mods, col - mods - ext ); 185 mod = bb_xstrndup ( buffer, col - buffer );
186 186
187 if ( !current ) { 187 if ( !current ) {
188 first = current = (struct dep_t *) xmalloc ( sizeof ( struct dep_t )); 188 first = current = (struct dep_t *) xmalloc ( sizeof ( struct dep_t ));
@@ -354,6 +354,28 @@ static struct dep_t *build_dep ( void )
354 return first; 354 return first;
355} 355}
356 356
357/* check if /lib/modules/bar/foo.ko belongs to module foo */
358/* return 1 = found, 0 = not found */
359static int mod_strcmp ( const char *mod_path, const char *mod_name )
360{
361#if defined(CONFIG_FEATURE_2_6_MODULES)
362#define MODULE_EXTENSION ".ko"
363#define MOD_EXTENSION_LEN 3
364#else
365#define MODULE_EXTENSION ".o"
366#define MOD_EXTENSION_LEN 2
367#endif
368 if ((strstr (mod_path, mod_name) ==
369 (mod_path + strlen(mod_path) -
370 strlen(mod_name) - MOD_EXTENSION_LEN))
371 && (!strcmp(mod_path + strlen(mod_path) -
372 MOD_EXTENSION_LEN, MODULE_EXTENSION)))
373 {
374 return 1;
375 }
376 return 0;
377}
378
357/* return 1 = loaded, 0 = not loaded, -1 = can't tell */ 379/* return 1 = loaded, 0 = not loaded, -1 = can't tell */
358static int already_loaded (const char *name) 380static int already_loaded (const char *name)
359{ 381{
@@ -370,7 +392,7 @@ static int already_loaded (const char *name)
370 p = strchr (buffer, ' '); 392 p = strchr (buffer, ' ');
371 if (p) { 393 if (p) {
372 *p = 0; 394 *p = 0;
373 if (strcmp (name, buffer) == 0) { 395 if (mod_strcmp (name, buffer)) {
374 close (fd); 396 close (fd);
375 return 1; 397 return 1;
376 } 398 }
@@ -434,7 +456,8 @@ static void check_dep ( char *mod, struct mod_list_t **head, struct mod_list_t *
434 456
435 // check dependencies 457 // check dependencies
436 for ( dt = depend; dt; dt = dt-> m_next ) { 458 for ( dt = depend; dt; dt = dt-> m_next ) {
437 if ( strcmp ( dt-> m_module, mod ) == 0 ) { 459 if ( mod_strcmp ( dt-> m_module, mod )) {
460 mod = dt-> m_module;
438 opt = dt-> m_options; 461 opt = dt-> m_options;
439 break; 462 break;
440 } 463 }