Nothing to see here, move along
at main 24 lines 745 B view raw
1pub const IPC_MSG_WORDS: usize = 6; 2pub const MAX_IPC_BYTES: usize = 40; 3 4pub fn pack_bytes(src: &[u8]) -> [u64; IPC_MSG_WORDS] { 5 let count = src.len().min(MAX_IPC_BYTES); 6 let mut msg = [0u64; IPC_MSG_WORDS]; 7 msg[0] = count as u64; 8 (0..count).for_each(|i| { 9 let word_idx = i / 8; 10 let byte_idx = i % 8; 11 msg[1 + word_idx] |= (src[i] as u64) << (byte_idx * 8); 12 }); 13 msg 14} 15 16pub fn unpack_bytes(msg: &[u64; IPC_MSG_WORDS], dst: &mut [u8; MAX_IPC_BYTES]) -> usize { 17 let actual = (msg[0] as usize).min(MAX_IPC_BYTES); 18 (0..actual).for_each(|i| { 19 let word_idx = i / 8; 20 let byte_idx = i % 8; 21 dst[i] = ((msg[1 + word_idx] >> (byte_idx * 8)) & 0xFF) as u8; 22 }); 23 actual 24}