Ignore:
Timestamp:
Nov 4, 2007, 3:16:40 AM (17 years ago)
Author:
Bruno Cornec
Message:

Update to busybox 1.7.2

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.5/mindi-busybox/modutils/lsmod.c

    r902 r1765  
    1212 */
    1313
    14 #include "busybox.h"
    15 #include <stdlib.h>
    16 #include <stdio.h>
    17 #include <string.h>
    18 #include <stddef.h>
    19 #include <errno.h>
    20 #include <unistd.h>
    21 #include <dirent.h>
    22 #include <ctype.h>
    23 #include <assert.h>
    24 #include <getopt.h>
    25 #include <sys/utsname.h>
    26 #include <sys/file.h>
     14#include "libbb.h"
    2715
    2816
    29 #ifndef CONFIG_FEATURE_CHECK_TAINTED_MODULE
    30 static inline void check_tainted(void) { printf("\n"); }
     17#if !ENABLE_FEATURE_CHECK_TAINTED_MODULE
     18static void check_tainted(void) { puts(""); }
    3119#else
    3220#define TAINT_FILENAME                  "/proc/sys/kernel/tainted"
     
    5745#endif
    5846
    59 #ifdef CONFIG_FEATURE_QUERY_MODULE_INTERFACE
     47#if ENABLE_FEATURE_QUERY_MODULE_INTERFACE
    6048
    6149struct module_info
     
    8775};
    8876
     77int lsmod_main(int argc, char **argv);
    8978int lsmod_main(int argc, char **argv)
    9079{
     
    9382    size_t bufsize, depsize, nmod, count, i, j;
    9483
    95     module_names = xmalloc(bufsize = 256);
    96     if (my_query_module(NULL, QM_MODULES, &module_names, &bufsize, &nmod)) {
    97         bb_perror_msg_and_die("QM_MODULES");
     84    module_names = deps = NULL;
     85    bufsize = depsize = 0;
     86    while (query_module(NULL, QM_MODULES, module_names, bufsize, &nmod)) {
     87        if (errno != ENOSPC) bb_perror_msg_and_die("QM_MODULES");
     88        module_names = xmalloc(bufsize = nmod);
    9889    }
    9990
    10091    deps = xmalloc(depsize = 256);
    101     printf("Module                  Size  Used by");
     92    printf("Module\t\t\tSize  Used by");
    10293    check_tainted();
    10394
     
    111102            bb_perror_msg_and_die("module %s: QM_INFO", mn);
    112103        }
    113         if (my_query_module(mn, QM_REFS, &deps, &depsize, &count)) {
     104        while (query_module(mn, QM_REFS, deps, depsize, &count)) {
    114105            if (errno == ENOENT) {
    115106                /* The module was removed out from underneath us. */
    116107                continue;
    117             }
    118             bb_perror_msg_and_die("module %s: QM_REFS", mn);
     108            } else if (errno != ENOSPC)
     109                bb_perror_msg_and_die("module %s: QM_REFS", mn);
     110            deps = xrealloc(deps, count);
    119111        }
    120112        printf("%-20s%8lu%4ld", mn, info.size, info.usecount);
     
    137129        if (count) printf("]");
    138130
    139         printf("\n");
     131        puts("");
    140132    }
    141133
    142 #ifdef CONFIG_FEATURE_CLEAN_UP
     134#if ENABLE_FEATURE_CLEAN_UP
    143135    free(module_names);
    144136#endif
    145137
    146     return( 0);
     138    return 0;
    147139}
    148140
    149141#else /* CONFIG_FEATURE_QUERY_MODULE_INTERFACE */
    150142
     143int lsmod_main(int argc, char **argv);
    151144int lsmod_main(int argc, char **argv)
    152145{
     146    FILE *file = xfopen("/proc/modules", "r");
     147
    153148    printf("Module                  Size  Used by");
    154149    check_tainted();
    155150#if defined(CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT)
    156151    {
    157       FILE *file;
    158       char line[4096];
     152        char *line;
     153        while ((line = xmalloc_fgets(file)) != NULL) {
     154            char *tok;
    159155
    160       file = bb_xfopen("/proc/modules", "r");
    161 
    162       while (fgets(line, sizeof(line), file)) {
    163         char *tok;
    164 
    165         tok = strtok(line, " \t");
    166         printf("%-19s", tok);
    167         tok = strtok(NULL, " \t\n");
    168         printf(" %8s", tok);
    169         tok = strtok(NULL, " \t\n");
    170         /* Null if no module unloading support. */
    171         if (tok) {
    172           printf("  %s", tok);
    173           tok = strtok(NULL, "\n");
    174           if (!tok)
    175         tok = "";
    176           /* New-style has commas, or -.  If so,
    177          truncate (other fields might follow). */
    178           else if (strchr(tok, ',')) {
    179         tok = strtok(tok, "\t ");
    180         /* Strip trailing comma. */
    181         if (tok[strlen(tok)-1] == ',')
    182           tok[strlen(tok)-1] = '\0';
    183           } else if (tok[0] == '-'
    184              && (tok[1] == '\0' || isspace(tok[1])))
    185         tok = "";
    186           printf(" %s", tok);
    187         }
    188         printf("\n");
    189       }
    190       fclose(file);
     156            tok = strtok(line, " \t");
     157            printf("%-19s", tok);
     158            tok = strtok(NULL, " \t\n");
     159            printf(" %8s", tok);
     160            tok = strtok(NULL, " \t\n");
     161            /* Null if no module unloading support. */
     162            if (tok) {
     163                printf("  %s", tok);
     164                tok = strtok(NULL, "\n");
     165                if (!tok)
     166                    tok = (char*)"";
     167                /* New-style has commas, or -.  If so,
     168                truncate (other fields might follow). */
     169                else if (strchr(tok, ',')) {
     170                    tok = strtok(tok, "\t ");
     171                    /* Strip trailing comma. */
     172                    if (tok[strlen(tok)-1] == ',')
     173                        tok[strlen(tok)-1] = '\0';
     174                } else if (tok[0] == '-'
     175                 && (tok[1] == '\0' || isspace(tok[1]))
     176                ) {
     177                    tok = (char*)"";
     178                }
     179                printf(" %s", tok);
     180            }
     181            puts("");
     182            free(line);
     183        }
     184        fclose(file);
    191185    }
     186#else
     187    xprint_and_close_file(file);
     188#endif  /*  CONFIG_FEATURE_2_6_MODULES  */
    192189    return EXIT_SUCCESS;
    193 #else
    194     if (bb_xprint_file_by_name("/proc/modules") == 0)
    195         return EXIT_SUCCESS;
    196 #endif  /*  CONFIG_FEATURE_2_6_MODULES  */
    197 
    198     return EXIT_FAILURE;
    199190}
    200191
Note: See TracChangeset for help on using the changeset viewer.