diff options
author | Eric Andersen <andersen@codepoet.org> | 2004-06-22 10:43:09 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2004-06-22 10:43:09 +0000 |
commit | d943837dab6eb2b2809426c0e81f7b8e8cf82208 (patch) | |
tree | c819a81d5140817a34d93a383de5ebb0ecb0d278 | |
parent | 4872ed9737c1349aec2f41b1b8a905a9158da5c1 (diff) | |
download | busybox-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.in | 8 | ||||
-rw-r--r-- | modutils/modprobe.c | 29 |
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 | |||
21 | config CONFIG_FEATURE_2_4_MODULES | 21 | config 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 | ||
28 | config CONFIG_FEATURE_2_6_MODULES | 28 | config 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 | ||
35 | config CONFIG_FEATURE_INSMOD_VERSION_CHECKING | 35 | config 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 */ | ||
359 | static 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 */ |
358 | static int already_loaded (const char *name) | 380 | static 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 | } |