emu_cli/
util.rs

1use std::path::PathBuf;
2
3pub fn pid_running(pid: u32) -> bool {
4    path_exists(PathBuf::from(format!("/proc/{}", pid)))
5}
6
7pub fn path_exists(path: PathBuf) -> bool {
8    std::fs::metadata(path).is_ok()
9}
10
11pub fn valid_filename(name: &str) -> bool {
12    !(name.contains("..") || name.contains(std::path::MAIN_SEPARATOR) || name.contains("\x00"))
13}
14
15#[cfg(test)]
16mod tests {
17    use super::*;
18    use anyhow::Result;
19
20    #[test]
21    fn test_pid_running() -> Result<()> {
22        assert!(pid_running(1));
23        assert!(!pid_running(8675309));
24        Ok(())
25    }
26
27    #[test]
28    fn test_path_exists() -> Result<()> {
29        assert!(path_exists(PathBuf::from("/")));
30        assert!(!path_exists(PathBuf::from("/nonexistent")));
31        Ok(())
32    }
33
34    #[test]
35    fn test_valid_filename() -> Result<()> {
36        for item in vec!["../one", "/vmlinuz", "im\x00smrt", "one/../two"] {
37            assert!(!valid_filename(item));
38        }
39
40        for item in vec!["qemu-8675309.qcow2", "config"] {
41            assert!(valid_filename(item));
42        }
43
44        Ok(())
45    }
46}