36 lines
870 B
Rust
36 lines
870 B
Rust
|
use {
|
||
|
crate::Error,
|
||
|
std::io::{Read, Write},
|
||
|
};
|
||
|
|
||
|
#[derive(Debug)]
|
||
|
pub struct Special {
|
||
|
pub major: u32,
|
||
|
pub minor: u32,
|
||
|
}
|
||
|
|
||
|
impl Special {
|
||
|
pub fn read<T: Read>(reader: &mut T) -> Result<Self, Error> {
|
||
|
let mut buf = [0; 8];
|
||
|
reader.read_exact(&mut buf)?;
|
||
|
let major: [u8; 4] = buf[..4].try_into()?;
|
||
|
let major = u32::from_le_bytes(major);
|
||
|
let minor: [u8; 4] = buf[4..].try_into()?;
|
||
|
let minor = u32::from_le_bytes(minor);
|
||
|
Ok(Self { major, minor })
|
||
|
}
|
||
|
|
||
|
pub fn write<T: Write>(&self, writer: &mut T) -> Result<(), Error> {
|
||
|
writer.write_all(&self.major.to_le_bytes())?;
|
||
|
writer.write_all(&self.minor.to_le_bytes())?;
|
||
|
Ok(())
|
||
|
}
|
||
|
|
||
|
pub(super) fn from_rdev(rdev: u32) -> Self {
|
||
|
Self {
|
||
|
major: rdev >> 8,
|
||
|
minor: rdev & 0xff,
|
||
|
}
|
||
|
}
|
||
|
}
|