userspace/types/string/
terminate.rs1use crate::target::os::syscall;
2pub fn terminate(head: &str) -> *const u8 {
3 let tailed = match syscall::mmap(
4 core::ptr::null_mut(),
5 head.bytes().len() + 1,
6 (syscall::mmap::Prot::Read | syscall::mmap::Prot::Write) as i32,
7 (syscall::mmap::Flag::Anonymous | syscall::mmap::Flag::Private) as i32,
8 -1,
9 0,
10 ) {
11 Ok(crate::Ok::Target(crate::target::Ok::Os(crate::target::os::Ok::Syscall(
12 crate::target::os::syscall::Ok::MMap(crate::target::os::syscall::mmap::Ok::Default(m)),
13 )))) => m,
14 _ => panic!("head"),
15 };
16
17 unsafe {
18 core::ptr::copy_nonoverlapping(head.as_ptr(), tailed as *mut u8, head.bytes().len());
19 *(tailed as *mut u8).add(head.bytes().len()) = 0;
20 };
21
22 return tailed as *const u8;
23}