1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/// inode information
///
/// This structure isn't built if data aren't consistent
#[derive(Debug, Clone)]
pub struct Inodes {
/// number of inodes, always > 0
pub files: u64,
/// number of free inodes
pub ffree: u64,
/// number of free inodes for underpriviledged users
pub favail: u64,
}
impl Inodes {
/// Create the structure if the given values are consistent,
/// return None if they aren't.
pub fn new(
files: u64,
ffree: u64,
favail: u64,
) -> Option<Self> {
if files > 0 && ffree <= files && favail <= files {
Some(Self {
files,
ffree,
favail,
})
} else {
None
}
}
/// number of non available inodes, always > 0
pub fn used(&self) -> u64 {
self.files - self.favail
}
/// share of non available inodes, always in [0, 1], never NaN
pub fn use_share(&self) -> f64 {
self.used() as f64 / self.files as f64
}
}