Takeharu Kato said:
authorRob Landley <rob@landley.net>
Tue, 3 May 2005 22:34:03 +0000 (22:34 -0000)
committerRob Landley <rob@landley.net>
Tue, 3 May 2005 22:34:03 +0000 (22:34 -0000)
I found that lsmod in busybox does not support linux-2.6.
I fix this issue(it is caused by changes of /proc/modules format).
If you use lsmod in busybox with kernel-2.6, please use this patch.

modutils/lsmod.c

index 7bf314afe4d001fc1db7b47a292f08ace1d853ec..525fc2dc298e155c7a11705b008ea27c90a822dd 100644 (file)
@@ -164,10 +164,51 @@ extern int lsmod_main(int argc, char **argv)
 {
        printf("Module                  Size  Used by");
        check_tainted();
-
+#if defined(CONFIG_FEATURE_2_6_MODULES)
+       {
+         FILE *file;
+         char line[4096];
+
+         file = fopen("/proc/modules", "r");
+
+         if (!file) 
+           bb_error_msg_and_die("Opening /proc/modules");
+
+         while (fgets(line, sizeof(line), file)) {
+           char *tok;
+           
+           tok = strtok(line, " \t");
+           printf("%-19s", tok);
+           tok = strtok(NULL, " \t\n");
+           printf(" %8s", tok);
+           tok = strtok(NULL, " \t\n");
+           /* Null if no module unloading support. */
+           if (tok) {
+             printf("  %s", tok);
+             tok = strtok(NULL, "\n");
+             if (!tok)
+               tok = "";
+             /* New-style has commas, or -.  If so,
+                truncate (other fields might follow). */
+             else if (strchr(tok, ',')) {
+               tok = strtok(tok, "\t ");
+               /* Strip trailing comma. */
+               if (tok[strlen(tok)-1] == ',')
+                 tok[strlen(tok)-1] = '\0';
+             } else if (tok[0] == '-'
+                        && (tok[1] == '\0' || isspace(tok[1])))
+               tok = "";
+             printf(" %s", tok);
+           }
+           printf("\n");
+         }
+         fclose(file);
+       }
+#else
        if (bb_xprint_file_by_name("/proc/modules") < 0) {
                return 0;
        }
+#endif  /*  CONFIG_FEATURE_2_6_MODULES  */
        return 1;
 }