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
41
#![allow(missing_docs)]
use result::{DmResult, DmError};
use types::Bytes;
use std::fs::File;
use std::os::unix::prelude::AsRawFd;
ioctl!(read blkgetsize64 with 0x12, 114; u64);
pub fn align_to(num: usize, align_to: usize) -> usize {
let agn = align_to - 1;
(num + agn) & !agn
}
pub fn blkdev_size(file: &File) -> DmResult<Bytes> {
let mut val: u64 = 0;
match unsafe { blkgetsize64(file.as_raw_fd(), &mut val) } {
Err(x) => Err(DmError::Nix(x)),
Ok(_) => Ok(Bytes(val)),
}
}
pub fn slice_to_null(slc: &[u8]) -> Option<&[u8]> {
for (i, c) in slc.iter().enumerate() {
if *c == b'\0' {
return Some(&slc[..i]);
};
}
None
}