@@ -135,9 +135,9 @@ impl Fields {
135135 Self {
136136 mode,
137137 source : Field :: new ( gettext ( "Filesystem" ) , 14 ) ,
138- size : Field :: new ( size_caption, 0 ) ,
139- used : Field :: new ( gettext ( "Used" ) , 9 ) ,
140- avail : Field :: new ( gettext ( "Available" ) , 9 ) ,
138+ size : Field :: new ( size_caption, 10 ) ,
139+ used : Field :: new ( gettext ( "Used" ) , 10 ) ,
140+ avail : Field :: new ( gettext ( "Available" ) , 10 ) ,
141141 pcent : Field :: new ( gettext ( "Capacity" ) , 5 ) ,
142142 target : Field :: new ( gettext ( "Mounted on" ) , 0 ) ,
143143 }
@@ -153,38 +153,26 @@ impl Fields {
153153 println ! ( ) ;
154154 }
155155
156- fn print_row ( & self , mount : & Mount ) {
157- if !mount. masked {
158- return ;
159- }
160-
161- let sf = & mount. cached_statfs ;
162-
163- let block_size = self . mode . get_block_size ( ) ;
164- let blksz = sf. f_bsize as u64 ;
165-
166- let total = ( sf. f_blocks * blksz) / block_size;
167- let avail = ( sf. f_bavail * blksz) / block_size;
168- let free = ( sf. f_bfree * blksz) / block_size;
169- let used = total - free;
170-
171- // The percentage value shall be expressed as a positive integer,
172- // with any fractional result causing it to be rounded to the next highest integer.
173- let percentage_used = f64:: from ( used as u32 ) / f64:: from ( ( used + free) as u32 ) ;
174- let percentage_used = percentage_used * 100.0 ;
175- let percentage_used = percentage_used. ceil ( ) as u32 ;
176-
156+ fn print_row (
157+ & self ,
158+ fsname : & String ,
159+ total : u64 ,
160+ used : u64 ,
161+ avail : u64 ,
162+ percentage_used : u32 ,
163+ target : & String ,
164+ ) {
177165 // The remaining output with -P shall consist of one line of information
178166 // for each specified file system. These lines shall be formatted as follows:
179167 // "%s %d %d %d %d%% %s\n", <file system name>, <total space>,
180168 // <space used>, <space free>, <percentage used>,
181169 // <file system root>
182- self . source . print_string ( & mount . devname ) ;
170+ self . source . print_string ( fsname ) ;
183171 self . size . print_u64 ( total) ;
184172 self . used . print_u64 ( used) ;
185173 self . avail . print_u64 ( avail) ;
186174 self . pcent . print_percentage ( percentage_used) ;
187- self . target . print_string ( & mount . dir ) ;
175+ self . target . print_string ( target ) ;
188176 println ! ( ) ;
189177 }
190178}
@@ -217,6 +205,39 @@ struct Mount {
217205 cached_statfs : libc:: statfs ,
218206}
219207
208+ impl Mount {
209+ fn print ( & self , fields : & Fields ) {
210+ if !self . masked {
211+ return ;
212+ }
213+
214+ let sf = self . cached_statfs ;
215+
216+ let block_size = fields. mode . get_block_size ( ) ;
217+ let blksz = sf. f_bsize as u64 ;
218+
219+ let total = ( sf. f_blocks * blksz) / block_size;
220+ let avail = ( sf. f_bavail * blksz) / block_size;
221+ let free = ( sf. f_bfree * blksz) / block_size;
222+ let used = total - free;
223+
224+ // The percentage value shall be expressed as a positive integer,
225+ // with any fractional result causing it to be rounded to the next highest integer.
226+ let percentage_used = f64:: from ( used as u32 ) / f64:: from ( ( used + free) as u32 ) ;
227+ let percentage_used = percentage_used * 100.0 ;
228+ let percentage_used = percentage_used. ceil ( ) as u32 ;
229+
230+ fields. print_row (
231+ & self . devname ,
232+ total,
233+ used,
234+ avail,
235+ percentage_used,
236+ & self . dir ,
237+ ) ;
238+ }
239+ }
240+
220241struct MountList {
221242 mounts : Vec < Mount > ,
222243 has_masks : bool ,
@@ -355,7 +376,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
355376 fields. print_header ( ) ;
356377
357378 for mount in & info. mounts {
358- fields . print_row ( mount ) ;
379+ mount . print ( & fields ) ;
359380 }
360381
361382 Ok ( ( ) )
0 commit comments