emu-cli 0.4.3

Linux desktop-friendly CLI qemu wrangling tool
Documentation
use std::path::PathBuf;

pub fn pid_running(pid: u32) -> bool {
    path_exists(PathBuf::from(format!("/proc/{}", pid)))
}

pub fn path_exists(path: PathBuf) -> bool {
    std::fs::metadata(path).is_ok()
}

pub fn valid_filename(name: &str) -> bool {
    !(name.contains("..") || name.contains(std::path::MAIN_SEPARATOR) || name.contains("\x00"))
}

#[cfg(test)]
mod tests {
    use super::*;
    use anyhow::Result;

    #[test]
    fn test_pid_running() -> Result<()> {
        assert!(pid_running(1));
        assert!(!pid_running(8675309));
        Ok(())
    }

    #[test]
    fn test_path_exists() -> Result<()> {
        assert!(path_exists(PathBuf::from("/")));
        assert!(!path_exists(PathBuf::from("/nonexistent")));
        Ok(())
    }

    #[test]
    fn test_valid_filename() -> Result<()> {
        for item in vec!["../one", "/vmlinuz", "im\x00smrt", "one/../two"] {
            assert!(!valid_filename(item));
        }

        for item in vec!["qemu-8675309.qcow2", "config"] {
            assert!(valid_filename(item));
        }

        Ok(())
    }
}