lfs_core/stats/unix.rs
1use crate::Inodes;
2
3/// inode & blocs information
4///
5/// The semantics is mostly the one of statvfs, with addition of
6/// bused which is necessary for volumes freely growing in containers
7#[derive(Debug, Clone)]
8pub struct Stats {
9 /// block size
10 pub bsize: u64,
11 /// number of blocks
12 pub blocks: u64,
13 /// not provided by statvfs
14 pub bused: u64,
15 /// number of free blocks
16 pub bfree: u64,
17 /// number of free blocks for underprivileged users
18 pub bavail: u64,
19 /// information relative to inodes, if available
20 pub inodes: Option<Inodes>,
21}
22
23impl Stats {
24 pub fn size(&self) -> u64 {
25 self.bsize * self.blocks
26 }
27 pub fn available(&self) -> u64 {
28 self.bsize * self.bavail
29 }
30 /// Space used in the volume (including unreadable fs metadata)
31 pub fn used(&self) -> u64 {
32 self.bsize * self.bused
33 }
34 pub fn use_share(&self) -> f64 {
35 if self.blocks == 0 {
36 0.0
37 } else {
38 (self.blocks - self.bfree) as f64 / self.blocks as f64
39 }
40 }
41}