userspace/target/operating_system/linux/syscall/
close.rs1use 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 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}