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 r#struct!(OkSyscallMUnMap { value: usize });
13
14 result!( Ok; "MUnMap Ok"; usize; [
15 [0; OK; Default; usize; "Ok"; "All good"],
16 ]);
17
18 impl Ok {
19 pub fn from_no(no: usize) -> Self {
20 Ok::Default(no)
21 }
22 }
23}
24
25pub mod error {
26 result!(Error; "MUnMap error"; usize; [
27 [1; ERROR; Default; usize; "Error"; "Something wicked this way comes"],
28 ]);
29
30 impl Error {
31 pub fn from_no(no: usize) -> Self {
32 Error::Default(no)
33 }
34 }
35}
36
37pub use error::Error;
38pub use ok::Ok;
39
40pub type Result = core::result::Result<Ok, Error>;
41
42pub fn handle_result(result: crate::Result) -> crate::Result {
43 match result {
45 crate::Result::Ok(crate::Ok::Target(crate::target::Ok::Arch(
46 crate::target::arch::Ok::X86_64Syscall(
47 crate::target::arch::syscall::Ok::X86_64Syscall1(
48 crate::target::arch::syscall::syscall1::Ok::Default(m),
49 ),
50 ),
51 ))) => core::result::Result::Ok(crate::Ok::Target(crate::target::Ok::Os(
52 crate::target::os::Ok::Syscall(crate::target::os::syscall::Ok::Close(
53 crate::target::os::syscall::close::Ok::Default(m),
54 )),
55 ))),
56 _ => core::result::Result::Err(crate::Error::Target(crate::target::Error::Os(
57 crate::target::os::Error::Syscall(crate::target::os::syscall::Error::Close(
58 Error::Default(3),
59 )),
60 ))),
61 }
62}