shadow_rs/utility/
syscall.rs1use 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        && let Ok(errno) = linux_api::errno::Errno::try_from(rv)
17    {
18        return Err(errno);
19    }
20
21    Ok(rv.into())
22}