Deal with the fact that 2.6.x kernels replace any '-'s in the
authorEric Andersen <andersen@codepoet.org>
Tue, 20 Jul 2004 10:05:13 +0000 (10:05 -0000)
committerEric Andersen <andersen@codepoet.org>
Tue, 20 Jul 2004 10:05:13 +0000 (10:05 -0000)
module name with a '_'.
 -Erik

modutils/rmmod.c

index 5576eb6a1fece7cb8acaf5b5f51cf03deceb7005..3693aec7c718d357d1790c15077dcf24ca962981 100644 (file)
 #include <stdlib.h>
 #include <getopt.h>
 #include <fcntl.h>
+#include <string.h>
 #include <sys/syscall.h>
 #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;
+                       }
                }
        }