shadow_rs/utility/
syscall.rs
1use shadow_shim_helper_rs::syscall_types::SyscallReg;
2
3const MAX_ERRNO: i64 = 4095;
6
7pub fn raw_return_value_to_errno(rv: i64) -> Result<SyscallReg, i32> {
8 if (-MAX_ERRNO..=-1).contains(&rv) {
9 return Err(-rv as i32);
10 }
11 Ok(rv.into())
12}
13
14pub fn raw_return_value_to_result(rv: i64) -> Result<SyscallReg, linux_api::errno::Errno> {
15 if let Ok(rv) = u16::try_from(-rv) {
16 if let Ok(errno) = linux_api::errno::Errno::try_from(rv) {
17 return Err(errno);
18 }
19 }
20
21 Ok(rv.into())
22}