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