Changeset 1770 in MondoRescue for branches/stable/mindi-busybox/coreutils/df.c
- Timestamp:
- Nov 6, 2007, 11:01:53 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/stable/mindi-busybox/coreutils/df.c
r821 r1770 19 19 */ 20 20 21 #include <stdio.h>22 #include <stdlib.h>23 #include <string.h>24 #include <unistd.h>25 21 #include <mntent.h> 26 22 #include <sys/vfs.h> 27 #include " busybox.h"23 #include "libbb.h" 28 24 29 #if ndef CONFIG_FEATURE_HUMAN_READABLE30 static long kscale(long b,long bs)25 #if !ENABLE_FEATURE_HUMAN_READABLE 26 static unsigned long kscale(unsigned long b, unsigned long bs) 31 27 { 32 return ( b * (long long) bs + KILOBYTE/2 ) / KILOBYTE;28 return (b * (unsigned long long) bs + 1024/2) / 1024; 33 29 } 34 30 #endif 35 31 32 int df_main(int argc, char **argv); 36 33 int df_main(int argc, char **argv) 37 34 { 38 long blocks_used;39 longblocks_percent_used;40 #if def CONFIG_FEATURE_HUMAN_READABLE41 unsigned long df_disp_hr = KILOBYTE;35 unsigned long blocks_used; 36 unsigned blocks_percent_used; 37 #if ENABLE_FEATURE_HUMAN_READABLE 38 unsigned df_disp_hr = 1024; 42 39 #endif 43 40 int status = EXIT_SUCCESS; 44 unsigned longopt;41 unsigned opt; 45 42 FILE *mount_table; 46 43 struct mntent *mount_entry; 47 44 struct statfs s; 48 static const char hdr_1k[] = "1k-blocks";/* default display is kilobytes */49 const char *disp_units_hdr = hdr_1k;45 /* default display is kilobytes */ 46 const char *disp_units_hdr = "1k-blocks"; 50 47 51 #if def CONFIG_FEATURE_HUMAN_READABLE52 bb_opt_complementally = "h-km:k-hm:m-hk";53 opt = bb_getopt_ulflags(argc,argv, "hmk");54 if (opt & 1) {55 56 48 #if ENABLE_FEATURE_HUMAN_READABLE 49 opt_complementary = "h-km:k-hm:m-hk"; 50 opt = getopt32(argv, "hmk"); 51 if (opt & 1) { 52 df_disp_hr = 0; 53 disp_units_hdr = " Size"; 57 54 } 58 if (opt & 2) {59 df_disp_hr = MEGABYTE;60 55 if (opt & 2) { 56 df_disp_hr = 1024*1024; 57 disp_units_hdr = "1M-blocks"; 61 58 } 62 59 #else 63 opt = bb_getopt_ulflags(argc,argv, "k");60 opt = getopt32(argv, "k"); 64 61 #endif 65 62 66 bb_printf("Filesystem%11s%-15sUsed Available Use%% Mounted on\n",63 printf("Filesystem%11s%-15sUsed Available Use%% Mounted on\n", 67 64 "", disp_units_hdr); 68 65 … … 70 67 argv += optind; 71 68 if (optind >= argc) { 72 if (!(mount_table = setmntent(bb_path_mtab_file, "r"))) { 69 mount_table = setmntent(bb_path_mtab_file, "r"); 70 if (!mount_table) { 73 71 bb_perror_msg_and_die(bb_path_mtab_file); 74 72 } 75 73 } 76 74 77 do{75 while (1) { 78 76 const char *device; 79 77 const char *mount_point; 80 78 81 79 if (mount_table) { 82 if (!(mount_entry = getmntent(mount_table))) { 80 mount_entry = getmntent(mount_table); 81 if (!mount_entry) { 83 82 endmntent(mount_table); 84 83 break; 85 84 } 86 85 } else { 87 if (!(mount_point = *argv++)) { 86 mount_point = *argv++; 87 if (!mount_point) { 88 88 break; 89 89 } 90 if (!(mount_entry = find_mount_point(mount_point, bb_path_mtab_file))) { 91 bb_error_msg("%s: can't find mount point.", mount_point); 92 SET_ERROR: 90 mount_entry = find_mount_point(mount_point, bb_path_mtab_file); 91 if (!mount_entry) { 92 bb_error_msg("%s: can't find mount point", mount_point); 93 SET_ERROR: 93 94 status = EXIT_FAILURE; 94 95 continue; … … 108 109 blocks_percent_used = 0; 109 110 if (blocks_used + s.f_bavail) { 110 blocks_percent_used = ( ((long long) blocks_used) * 100111 112 111 blocks_percent_used = (blocks_used * 100ULL 112 + (blocks_used + s.f_bavail)/2 113 ) / (blocks_used + s.f_bavail); 113 114 } 114 115 … … 118 119 /* Adjusts device to be the real root device, 119 120 * or leaves device alone if it can't find it */ 120 if ((device = find_block_device("/")) == NULL) { 121 device = find_block_device("/"); 122 if (!device) { 121 123 goto SET_ERROR; 122 124 } 123 125 } 124 126 125 #ifdef CONFIG_FEATURE_HUMAN_READABLE 126 bb_printf("%-20s %9s ", device, 127 make_human_readable_str(s.f_blocks, s.f_bsize, df_disp_hr)); 127 if (printf("\n%-20s" + 1, device) > 20) 128 printf("\n%-20s", ""); 129 #if ENABLE_FEATURE_HUMAN_READABLE 130 printf(" %9s ", 131 make_human_readable_str(s.f_blocks, s.f_bsize, df_disp_hr)); 128 132 129 bb_printf("%9s ",130 make_human_readable_str((s.f_blocks - s.f_bfree),131 133 printf(" %9s " + 1, 134 make_human_readable_str((s.f_blocks - s.f_bfree), 135 s.f_bsize, df_disp_hr)); 132 136 133 bb_printf("%9s %3ld%% %s\n",134 135 137 printf("%9s %3u%% %s\n", 138 make_human_readable_str(s.f_bavail, s.f_bsize, df_disp_hr), 139 blocks_percent_used, mount_point); 136 140 #else 137 bb_printf("%-20s %9ld %9ld %9ld %3ld%% %s\n", 138 device, 139 kscale(s.f_blocks, s.f_bsize), 140 kscale(s.f_blocks-s.f_bfree, s.f_bsize), 141 kscale(s.f_bavail, s.f_bsize), 142 blocks_percent_used, mount_point); 141 printf(" %9lu %9lu %9lu %3u%% %s\n", 142 kscale(s.f_blocks, s.f_bsize), 143 kscale(s.f_blocks-s.f_bfree, s.f_bsize), 144 kscale(s.f_bavail, s.f_bsize), 145 blocks_percent_used, mount_point); 143 146 #endif 144 147 } 148 } 145 149 146 } while (1); 147 148 bb_fflush_stdout_and_exit(status); 150 fflush_stdout_and_exit(status); 149 151 }
Note:
See TracChangeset
for help on using the changeset viewer.