diff options
author | Rob Landley | 2005-05-03 22:34:03 +0000 |
---|---|---|
committer | Rob Landley | 2005-05-03 22:34:03 +0000 |
commit | 627814bdc3ef9b405a77686d73e7b53ebd767a07 (patch) | |
tree | 93dfc4ec988cce631f76b4562a460ce9a8f236b3 | |
parent | 0d38301d851f29e1f64db1c0759c7fb97c59347e (diff) | |
download | busybox-627814bdc3ef9b405a77686d73e7b53ebd767a07.zip busybox-627814bdc3ef9b405a77686d73e7b53ebd767a07.tar.gz |
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.
-rw-r--r-- | modutils/lsmod.c | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/modutils/lsmod.c b/modutils/lsmod.c index 7bf314a..525fc2d 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; } |