1use crate::target::os::syscall;
2
3pub fn load(filepath: &str) -> Option<(isize, syscall::fstat::Stat, *const u8)> {
4 let filepath = crate::types::string::terminate(filepath);
5 let license_mapping;
6 'opening: loop {
7 #[allow(unused_assignments)]
8 let mut fd: isize = isize::MIN;
9 let stat;
10 'closing: loop {
11 fd = match syscall::openat(
12 syscall::open::flags::AtFlag::FDCWD as isize,
13 filepath,
14 syscall::open::flags::Flag::RDONLY as i32,
15 ) {
16 core::result::Result::Ok(crate::Ok::Target(crate::target::Ok::Os(
18 crate::target::os::Ok::Syscall(crate::target::os::syscall::Ok::Open(
19 crate::target::os::syscall::open::Ok::OPENAT(fd),
20 )),
21 ))) => fd as isize,
22 _ => break 'opening None,
23 };
24
25 stat = crate::file::information::from_fd(fd);
26
27 license_mapping = match syscall::mmap(
30 core::ptr::null_mut(),
31 stat.st_size as usize,
32 (syscall::mmap::Prot::Read | syscall::mmap::Prot::Write) as i32,
33 (syscall::mmap::Flag::Anonymous | syscall::mmap::Flag::Private) as i32,
34 -1,
35 0,
36 ) {
37 core::result::Result::Ok(crate::Ok::Target(crate::target::Ok::Os(
38 crate::target::os::Ok::Syscall(crate::target::os::syscall::Ok::MMap(
39 crate::target::os::syscall::mmap::Ok::Default(fd),
40 )),
41 ))) => fd as *const u8,
42 _ => {
43 crate::info!("Failed to mmap file");
44 panic!("k")
45 }
46 };
47
48 let _ = syscall::read(fd, license_mapping, stat.st_size as usize);
49 break 'closing;
50 }
51 if fd >= 0 {
52 break 'opening Some((fd, stat, license_mapping));
54 }
55 break 'opening None;
56 }
57}