kernel/fs/
helper.rs

1use crate::alloc::string::ToString;
2use alloc::{string::String, vec::Vec};
3
4use super::MAX_PATH_LENGTH;
5
6pub fn get_path_str(path_ptr: *const u8) -> Result<String, &'static str> {
7    // Parse path as a null-terminated C string
8    let mut path_bytes = Vec::new();
9    let mut i = 0;
10    unsafe {
11        loop {
12            let byte = *path_ptr.add(i);
13            if byte == 0 {
14                break;
15            }
16            path_bytes.push(byte);
17            i += 1;
18
19            if i > MAX_PATH_LENGTH {
20                return Err("Path too long");
21            }
22        }
23    }
24
25    // Convert path bytes to string
26    let path_str = match str::from_utf8(&path_bytes) {
27        Ok(s) => s,
28        Err(_) => return Err("Invalid UTF-8"),
29    };
30    Ok(path_str.to_string())
31}