#![deny(unsafe_code)]
#[cfg(target_os = "linux")]
mod clone;
mod sandbox;
#[cfg(target_os = "linux")]
pub use clone::{clone_file, reflink_file};
pub use sandbox::{command_line, MountConfig, PortForwardHandle, Sandbox, VmConfigBuilder};
pub use vm_proto::{
frame, ExecRequest, ForwardRequest, ForwardResponse, MountRequest, MountResponse, PortMapping,
ReadFileRequest, WriteFileRequest, WriteFileResponse, VSOCK_PORT, VSOCK_PORT_FORWARD,
};
#[cfg(all(target_os = "linux", target_arch = "x86_64"))]
pub(crate) use vm_ch as backend;
#[cfg(target_os = "macos")]
pub(crate) use vm_darwin as backend;
#[cfg(all(target_os = "linux", target_arch = "aarch64"))]
pub(crate) use vm_linux as backend;
pub use backend::{VirtualMachine, VmState, VzError};
pub fn validate_checkpoint_name(name: &str) -> Result<(), String> {
if name.is_empty() {
return Err("checkpoint name cannot be empty".into());
}
if name.contains('/') || name.contains('\\') || name.contains('\0') || name.contains("..") {
return Err(format!("invalid checkpoint name: '{}'", name));
}
Ok(())
}
pub fn default_data_dir() -> String {
if let Ok(dir) = std::env::var("HANZO_VM_HOME") {
return dir;
}
let home = std::env::var("HOME").unwrap_or_else(|_| "/tmp".to_string());
format!("{}/.hanzo/vm", home)
}