- while (query_module(mn, QM_REFS, deps, depsize, &count)) {
- if (errno == ENOENT) {
- /* The module was removed out from underneath us. */
- continue;
- } else if (errno != ENOSPC)
- bb_perror_msg_and_die("module %s: QM_REFS", mn);
- deps = xrealloc(deps, count);
- }
- printf("%-20s%8lu%4ld", mn, info.size, info.usecount);
- if (info.flags & NEW_MOD_DELETED)
- printf(" (deleted)");
- else if (info.flags & NEW_MOD_INITIALIZING)
- printf(" (initializing)");
- else if (!(info.flags & NEW_MOD_RUNNING))
- printf(" (uninitialized)");
- else {
- if (info.flags & NEW_MOD_AUTOCLEAN)
- printf(" (autoclean) ");
- if (!(info.flags & NEW_MOD_USED_ONCE))
- printf(" (unused)");
- }
- if (count) printf(" [");
- for (j = 0, dn = deps; j < count; dn += strlen(dn) + 1, j++) {
- printf("%s%s", dn, (j==count-1)? "":" ");
- }
- if (count) printf("]");
-
- bb_putchar('\n');
- }
-
-#if ENABLE_FEATURE_CLEAN_UP
- free(module_names);
-#endif
-
- return 0;
-}
-
-#else /* CONFIG_FEATURE_QUERY_MODULE_INTERFACE */
-
-int lsmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int lsmod_main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
-{
- FILE *file = xfopen("/proc/modules", "r");
-
- printf("Module Size Used by");
- check_tainted();
-#if ENABLE_FEATURE_LSMOD_PRETTY_2_6_OUTPUT
- {
- char *line;
- while ((line = xmalloc_fgets(file)) != NULL) {
- 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 = (char*)"";
- /* 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 = (char*)"";
- }
- printf(" %s", tok);
- }
- bb_putchar('\n');
- free(line);
+ } else {
+ while (config_read(parser, token, 4, 4, "# \t", PARSE_NORMAL & ~PARSE_GREEDY)) {
+ // N.B. token[3] is either '-' (module is not used by others)
+ // or comma-separated list ended by comma
+ // so trimming the trailing char is just what we need!
+ token[3][strlen(token[3])-1] = '\0';
+ printf("%-19s %8s %2s %s\n", token[0], token[1], token[2], token[3]);