shadow_shmem/
util.rs

1// The standard path length limit on Linux.
2pub const PATH_MAX_NBYTES: usize = 255;
3
4// One extra byte for the null terminator.
5pub(crate) type PathBuf = [u8; PATH_MAX_NBYTES + 1];
6
7pub(crate) const NULL_PATH_BUF: PathBuf = [0; PATH_MAX_NBYTES + 1];
8
9// A path is up to 256 bytes; an isize is 20 bytes; and one byte for delimiter.
10// pub const SERIALIZED_BLOCK_BUF_NBYTES: usize = PATH_MAX_NBYTES + 20 + 1;
11
12// One extra byte for the null terminator.
13//pub(crate) type SerializedBlockBuf = [u8; SERIALIZED_BLOCK_BUF_NBYTES + 1];
14
15//pub (crate) const NULL_SERIALIZED_BUF: SerializedBlockBuf = [0; SERIALIZED_BLOCK_BUF_NBYTES + 1];
16
17pub(crate) fn trim_null_bytes<const N: usize>(s: &[u8; N]) -> Option<&[u8]> {
18    if let Some(i) = s.iter().position(|x| *x == 0) {
19        Some(&s[0..(i)])
20    } else {
21        None
22    }
23}
24
25pub(crate) fn buf_from_utf8_str<const N: usize>(s: &str) -> Option<[u8; N]> {
26    let mut retval = [0; N];
27
28    if s.len() >= N {
29        None
30    } else {
31        retval
32            .iter_mut()
33            .zip(s.as_bytes().iter())
34            .for_each(|(x, y)| *x = *y);
35        Some(retval)
36    }
37}