userspace/target/operating_system/linux/syscall/
close.rs

1use crate::target::arch::{Arch, traits::Callable};
2
3hooking!(CLOSE);
4
5#[inline(always)]
6pub fn close(fd: i32) -> crate::Result {
7    let arch_result = Arch::syscall1(NUMBER, fd as usize);
8    handle_result(arch_result)
9}
10
11pub mod ok {
12
13    ample::result!( Ok; "MUnMap Ok"; usize; [
14        [0; OK; Default; usize; "Ok"; "All good"],
15    ]);
16
17    impl Ok {
18        pub fn from_no(no: usize) -> Self {
19            Ok::Default(no)
20        }
21    }
22}
23
24pub mod error {
25    ample::result!(Error; "MUnMap error"; usize; [
26        [1; ERROR; Default; usize; "Error"; "Something wicked this way comes"],
27    ]);
28
29    impl Error {
30        pub fn from_no(no: usize) -> Self {
31            Error::Default(no)
32        }
33    }
34}
35
36pub use error::Error;
37pub use ok::Ok;
38
39pub type Result = core::result::Result<Ok, Error>;
40
41pub fn handle_result(result: crate::Result) -> crate::Result {
42    // Err(crate::Error::Default(1))
43    match result {
44        crate::Result::Ok(crate::Ok::Target(crate::target::Ok::Arch(
45            crate::target::arch::Ok::X86_64Syscall(
46                crate::target::arch::syscall::Ok::X86_64Syscall1(
47                    crate::target::arch::syscall::syscall1::Ok::Default(m),
48                ),
49            ),
50        ))) => core::result::Result::Ok(crate::Ok::Target(crate::target::Ok::Os(
51            crate::target::os::Ok::Syscall(crate::target::os::syscall::Ok::Close(
52                crate::target::os::syscall::close::Ok::Default(m),
53            )),
54        ))),
55        _ => core::result::Result::Err(crate::Error::Target(crate::target::Error::Os(
56            crate::target::os::Error::Syscall(crate::target::os::syscall::Error::Close(
57                Error::Default(3),
58            )),
59        ))),
60    }
61}