1use crate::memory::heap::Allocating;
2use crate::target::os::syscall;
3
4pub fn load(filepath: &str) -> Option<(isize, syscall::fstat::Stat, *const u8)> {
5 use ample::traits::AllocatableResult;
6 let filepath =
7 ample::string::terminate::<crate::Origin, crate::Origin, crate::memory::heap::Allocator>(
8 filepath,
9 );
10
11 let filepath = match filepath {
12 core::result::Result::Ok(a) => a.as_ptr(),
13 _ => return None,
14 };
15
16 let license_mapping;
17 'opening: loop {
18 #[allow(unused_assignments)]
19 let mut fd: isize = isize::MIN;
20 let stat;
21 'closing: loop {
22 fd = match syscall::openat(
23 syscall::open::AtFlag::FDCWD.to(),
24 filepath,
25 syscall::open::Flag::RDONLY.to(),
26 ) {
27 core::result::Result::Ok(crate::Ok::Target(crate::target::Ok::Os(
28 crate::target::os::Ok::Syscall(crate::target::os::syscall::Ok::Open(
29 crate::target::os::syscall::open::Ok::OPENAT(fd),
30 )),
31 ))) => fd as isize,
32 _ => break 'opening None,
33 };
34
35 stat = crate::file::information::from_fd(fd);
36
37 license_mapping = u8::allocate(stat.st_size as usize);
38
39 let _ = syscall::read(fd, license_mapping, stat.st_size as usize);
40 break 'closing;
41 }
42 if fd >= 0 {
43 break 'opening Some((fd, stat, license_mapping));
45 }
46 break 'opening None;
47 }
48}