aboutsummaryrefslogtreecommitdiff
path: root/coreutils/df.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2016-12-12 19:56:31 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2016-12-12 19:56:31 +0100
commite184a883567ee3fd735644416e4bd683f1894ac5 (patch)
tree7eae83fb609ecc41c44803e5969db5b1bb726f10 /coreutils/df.c
parent76de3257f7133a760c3d8908a99b850ea2d0f0b0 (diff)
downloadbusybox-w32-e184a883567ee3fd735644416e4bd683f1894ac5.tar.gz
busybox-w32-e184a883567ee3fd735644416e4bd683f1894ac5.tar.bz2
busybox-w32-e184a883567ee3fd735644416e4bd683f1894ac5.zip
df: implement -B n<suff> and -B <suff> formats of -B option
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'coreutils/df.c')
-rw-r--r--coreutils/df.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/coreutils/df.c b/coreutils/df.c
index fdcdae675..79e4c4670 100644
--- a/coreutils/df.c
+++ b/coreutils/df.c
@@ -129,8 +129,19 @@ int df_main(int argc UNUSED_PARAM, char **argv)
129 if (opt & OPT_MEGA) 129 if (opt & OPT_MEGA)
130 df_disp_hr = 1024*1024; 130 df_disp_hr = 1024*1024;
131 131
132 if (opt & OPT_BSIZE) 132 if (opt & OPT_BSIZE) {
133 df_disp_hr = xatoul_range(chp, 1, ULONG_MAX); /* disallow 0 */ 133 /* GNU coreutils 8.25 accepts "-BMiB" form too */
134 int i;
135 for (i = 0; kmg_i_suffixes[i].suffix[0]; i++) {
136 if (strcmp(kmg_i_suffixes[i].suffix, chp) == 0) {
137 df_disp_hr = kmg_i_suffixes[i].mult;
138 goto got_it;
139 }
140 }
141 /* Range used to disallow 0 */
142 df_disp_hr = xatoul_range_sfx(chp, 1, ULONG_MAX, kmg_i_suffixes);
143 got_it: ;
144 }
134 145
135 /* From the manpage of df from coreutils-6.10: 146 /* From the manpage of df from coreutils-6.10:
136 * Disk space is shown in 1K blocks by default, unless the environment 147 * Disk space is shown in 1K blocks by default, unless the environment
@@ -203,6 +214,11 @@ int df_main(int argc UNUSED_PARAM, char **argv)
203 bb_simple_perror_msg(mount_point); 214 bb_simple_perror_msg(mount_point);
204 goto set_error; 215 goto set_error;
205 } 216 }
217 /* Some uclibc versions were seen to lose f_frsize
218 * (kernel does return it, but then uclibc does not copy it)
219 */
220 if (s.f_frsize == 0)
221 s.f_frsize = s.f_bsize;
206 222
207 if ((s.f_blocks > 0) || !mount_table || (opt & OPT_ALL)) { 223 if ((s.f_blocks > 0) || !mount_table || (opt & OPT_ALL)) {
208 if (opt & OPT_INODE) { 224 if (opt & OPT_INODE) {