Changeset 1770 in MondoRescue for branches/stable/mindi-busybox/modutils/lsmod.c
- Timestamp:
- Nov 6, 2007, 11:01:53 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/stable/mindi-busybox/modutils/lsmod.c
r902 r1770 12 12 */ 13 13 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" 27 15 28 16 29 #if ndef CONFIG_FEATURE_CHECK_TAINTED_MODULE30 static inline void check_tainted(void) { printf("\n"); }17 #if !ENABLE_FEATURE_CHECK_TAINTED_MODULE 18 static void check_tainted(void) { puts(""); } 31 19 #else 32 20 #define TAINT_FILENAME "/proc/sys/kernel/tainted" … … 57 45 #endif 58 46 59 #if def CONFIG_FEATURE_QUERY_MODULE_INTERFACE47 #if ENABLE_FEATURE_QUERY_MODULE_INTERFACE 60 48 61 49 struct module_info … … 87 75 }; 88 76 77 int lsmod_main(int argc, char **argv); 89 78 int lsmod_main(int argc, char **argv) 90 79 { … … 93 82 size_t bufsize, depsize, nmod, count, i, j; 94 83 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); 98 89 } 99 90 100 91 deps = xmalloc(depsize = 256); 101 printf("Module 92 printf("Module\t\t\tSize Used by"); 102 93 check_tainted(); 103 94 … … 111 102 bb_perror_msg_and_die("module %s: QM_INFO", mn); 112 103 } 113 if (my_query_module(mn, QM_REFS, &deps, &depsize, &count)) {104 while (query_module(mn, QM_REFS, deps, depsize, &count)) { 114 105 if (errno == ENOENT) { 115 106 /* The module was removed out from underneath us. */ 116 107 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); 119 111 } 120 112 printf("%-20s%8lu%4ld", mn, info.size, info.usecount); … … 137 129 if (count) printf("]"); 138 130 139 p rintf("\n");131 puts(""); 140 132 } 141 133 142 #if def CONFIG_FEATURE_CLEAN_UP134 #if ENABLE_FEATURE_CLEAN_UP 143 135 free(module_names); 144 136 #endif 145 137 146 return ( 0);138 return 0; 147 139 } 148 140 149 141 #else /* CONFIG_FEATURE_QUERY_MODULE_INTERFACE */ 150 142 143 int lsmod_main(int argc, char **argv); 151 144 int lsmod_main(int argc, char **argv) 152 145 { 146 FILE *file = xfopen("/proc/modules", "r"); 147 153 148 printf("Module Size Used by"); 154 149 check_tainted(); 155 150 #if defined(CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT) 156 151 { 157 FILE *file; 158 char line[4096]; 152 char *line; 153 while ((line = xmalloc_fgets(file)) != NULL) { 154 char *tok; 159 155 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); 191 185 } 186 #else 187 xprint_and_close_file(file); 188 #endif /* CONFIG_FEATURE_2_6_MODULES */ 192 189 return EXIT_SUCCESS; 193 #else194 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;199 190 } 200 191
Note:
See TracChangeset
for help on using the changeset viewer.