From c0693ed61bce201b4307252c48c6b96fa09319f9 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Tue, 20 Jul 2004 10:05:13 +0000 Subject: Deal with the fact that 2.6.x kernels replace any '-'s in the module name with a '_'. -Erik --- modutils/rmmod.c | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) (limited to 'modutils') diff --git a/modutils/rmmod.c b/modutils/rmmod.c index 5576eb6a1..3693aec7c 100644 --- a/modutils/rmmod.c +++ b/modutils/rmmod.c @@ -26,9 +26,33 @@ #include #include #include +#include #include #include "busybox.h" +#ifdef CONFIG_FEATURE_2_6_MODULES +static inline void filename2modname(char *modname, const char *filename) +{ + const char *afterslash; + unsigned int i; + + afterslash = strrchr(filename, '/'); + if (!afterslash) + afterslash = filename; + else + afterslash++; + + /* Convert to underscores, stop at first . */ + for (i = 0; afterslash[i] && afterslash[i] != '.'; i++) { + if (afterslash[i] == '-') + modname[i] = '_'; + else + modname[i] = afterslash[i]; + } + modname[i] = '\0'; +} +#endif + extern int rmmod_main(int argc, char **argv) { int n, ret = EXIT_SUCCESS; @@ -81,10 +105,18 @@ extern int rmmod_main(int argc, char **argv) if (optind == argc) bb_show_usage(); - for (n = optind; n < argc; n++) { - if (syscall(__NR_delete_module, argv[n], flags) < 0) { - bb_perror_msg("%s", argv[n]); - ret = EXIT_FAILURE; + { +#ifdef CONFIG_FEATURE_2_6_MODULES + char module_name[strlen(argv[n]) + 1]; + filename2modname(module_name, argv[n]); +#else +#define module_name argv[n] +#endif + for (n = optind; n < argc; n++) { + if (syscall(__NR_delete_module, module_name, flags) < 0) { + bb_perror_msg("%s", argv[n]); + ret = EXIT_FAILURE; + } } } -- cgit v1.2.3