Skip to content

Commit 6d84e22

Browse files
committed
df: impl Mount::print
1 parent c98d61e commit 6d84e22

File tree

1 file changed

+48
-27
lines changed

1 file changed

+48
-27
lines changed

fs/df.rs

Lines changed: 48 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
220241
struct 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

Comments
 (0)