#[macro_use] extern crate log; use clap::Parser; use env_logger::Env; use fuser::MountOption; mod fs; #[derive(Parser)] #[command(version, about, long_about = None)] struct Args { /// Pass FUSE options to library #[arg(short = 'o', value_name = "OPT")] options: Vec, /// Allow opening files with O_DIRECT #[arg(long = "allow-direct-io")] allow_direct_io: bool, /// Mount point #[arg(value_name = "MOUNT_POINT")] mount_point: String, } fn main() { env_logger::init_from_env(Env::new().filter("CORRUPTFS_LOG")); let args = Args::parse(); debug!("extra options: {:?}", args.options); let mut options = vec![ MountOption::FSName("corruptfs".to_string()), MountOption::NoDev, MountOption::NoSuid, MountOption::RW, ]; options.extend( args.options .iter() .map(|opt| MountOption::CUSTOM(opt.clone())), ); fuser::mount2(fs::CorruptFs::new(args.allow_direct_io), args.mount_point, &options).unwrap(); }