starry_api/imp/
sys.rs

1use core::ffi::c_char;
2
3use axerrno::LinuxResult;
4use linux_raw_sys::system::new_utsname;
5
6use crate::ptr::UserPtr;
7
8pub fn sys_getuid() -> LinuxResult<isize> {
9    Ok(0)
10}
11
12pub fn sys_geteuid() -> LinuxResult<isize> {
13    Ok(1)
14}
15
16pub fn sys_getgid() -> LinuxResult<isize> {
17    Ok(0)
18}
19
20pub fn sys_getegid() -> LinuxResult<isize> {
21    Ok(1)
22}
23
24const fn pad_str(info: &str) -> [c_char; 65] {
25    let mut data: [c_char; 65] = [0; 65];
26    // this needs #![feature(const_copy_from_slice)]
27    // data[..info.len()].copy_from_slice(info.as_bytes());
28    unsafe {
29        core::ptr::copy_nonoverlapping(info.as_ptr().cast(), data.as_mut_ptr(), info.len());
30    }
31    data
32}
33
34const UTSNAME: new_utsname = new_utsname {
35    sysname: pad_str("Starry"),
36    nodename: pad_str("Starry - machine[0]"),
37    release: pad_str("10.0.0"),
38    version: pad_str("10.0.0"),
39    machine: pad_str("10.0.0"),
40    domainname: pad_str("https://github.com/oscomp/starry-next"),
41};
42
43pub fn sys_uname(name: UserPtr<new_utsname>) -> LinuxResult<isize> {
44    *name.get_as_mut()? = UTSNAME;
45    Ok(0)
46}