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}