summaryrefslogtreecommitdiffhomepage
path: root/modutils/lsmod.c
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2005-05-03 22:34:03 +0000
committerRob Landley <rob@landley.net>2005-05-03 22:34:03 +0000
commit627814bdc3ef9b405a77686d73e7b53ebd767a07 (patch)
tree93dfc4ec988cce631f76b4562a460ce9a8f236b3 /modutils/lsmod.c
parent0d38301d851f29e1f64db1c0759c7fb97c59347e (diff)
Takeharu Kato said:
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.
Diffstat (limited to 'modutils/lsmod.c')
-rw-r--r--modutils/lsmod.c43
1 files changed, 42 insertions, 1 deletions
diff --git a/modutils/lsmod.c b/modutils/lsmod.c
index 7bf314afe..525fc2dc2 100644
--- a/modutils/lsmod.c
+++ b/modutils/lsmod.c
@@ -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;
}