-
Notifications
You must be signed in to change notification settings - Fork 109
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #286 from berrange/partitions
Add support for /proc/partitions parsing
- Loading branch information
Showing
5 changed files
with
107 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
use std::io::BufRead; | ||
|
||
use super::ProcResult; | ||
use std::str::FromStr; | ||
|
||
#[cfg(feature = "serde1")] | ||
use serde::{Deserialize, Serialize}; | ||
|
||
/// A partition entry under `/proc/partitions` | ||
#[derive(Debug, Clone)] | ||
#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] | ||
#[allow(non_snake_case)] | ||
pub struct PartitionEntry { | ||
/// Device major number | ||
pub major: u16, | ||
/// Device minor number | ||
pub minor: u16, | ||
/// Number of 1024 byte blocks | ||
pub blocks: u64, | ||
/// Device name | ||
pub name: String | ||
} | ||
|
||
impl super::FromBufRead for Vec<PartitionEntry> { | ||
fn from_buf_read<R: BufRead>(r: R) -> ProcResult<Self> { | ||
let mut vec = Vec::new(); | ||
|
||
for line in r.lines().skip(2) { | ||
let line = expect!(line); | ||
|
||
let mut s = line.split_whitespace(); | ||
|
||
let major = expect!(u16::from_str(expect!(s.next()))); | ||
let minor = expect!(u16::from_str(expect!(s.next()))); | ||
let blocks = expect!(u64::from_str(expect!(s.next()))); | ||
let name = expect!(s.next()).to_string(); | ||
|
||
let partition_entry = PartitionEntry { | ||
major, | ||
minor, | ||
blocks, | ||
name | ||
}; | ||
|
||
vec.push(partition_entry); | ||
} | ||
|
||
Ok(vec) | ||
} | ||
} | ||
|
||
|
||
#[test] | ||
fn test_partitions() { | ||
use crate::FromBufRead; | ||
use std::io::Cursor; | ||
|
||
let s = "major minor #blocks name | ||
259 0 1000204632 nvme0n1 | ||
259 1 1048576 nvme0n1p1 | ||
259 2 1048576 nvme0n1p2 | ||
259 3 104857600 nvme0n1p3 | ||
259 4 893248512 nvme0n1p4 | ||
253 0 104841216 dm-0 | ||
252 0 8388608 zram0 | ||
253 1 893232128 dm-1 | ||
8 0 3953664 sda | ||
8 1 2097152 sda1 | ||
8 2 1855488 sda2 | ||
253 2 1853440 dm-2 | ||
"; | ||
|
||
let cursor = Cursor::new(s); | ||
let partitions = Vec::<PartitionEntry>::from_buf_read(cursor).unwrap(); | ||
assert_eq!(partitions.len(), 12); | ||
|
||
assert_eq!(partitions[3].major, 259); | ||
assert_eq!(partitions[3].minor, 3); | ||
assert_eq!(partitions[3].blocks, 104857600); | ||
assert_eq!(partitions[3].name, "nvme0n1p3"); | ||
|
||
assert_eq!(partitions[11].major, 253); | ||
assert_eq!(partitions[11].minor, 2); | ||
assert_eq!(partitions[11].blocks, 1853440); | ||
assert_eq!(partitions[11].name, "dm-2"); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
// List partitions listed in /proc/partitions | ||
|
||
fn main() { | ||
for part_entry in procfs::partitions().unwrap() { | ||
println!("{part_entry:?}"); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters