1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#[derive(Eq, PartialEq, Debug, Clone, Copy)]
pub enum SysError {
IndexOutOfBound,
ItemMissing,
LengthNotEnough(usize),
Encoding,
Unknown(u64),
}
impl SysError {
pub(crate) fn build_syscall_result(
errno: u64,
load_len: usize,
actual_data_len: usize,
) -> Result<usize, SysError> {
use SysError::*;
match errno {
0 => {
if actual_data_len > load_len {
return Err(LengthNotEnough(actual_data_len));
}
return Ok(actual_data_len);
}
1 => Err(IndexOutOfBound),
2 => Err(ItemMissing),
_ => Err(Unknown(errno)),
}
}
}