blob: 5a104b892d54affdee46a302390cd841d8580f15 [file] [log] [blame]
extern crate libmount;
extern crate argparse;
extern crate env_logger;
#[macro_use] extern crate log;
use std::path::PathBuf;
use std::process::exit;
use argparse::{ArgumentParser, Parse, StoreFalse, StoreTrue};
fn main() {
env_logger::init();
let mut source = PathBuf::new();
let mut target = PathBuf::new();
let mut recursive = true;
let mut readonly = false;
{
let mut ap = ArgumentParser::new();
ap.set_description("Bind mounting utility. Similar to `mount --bind`");
ap.refer(&mut source).add_argument("source", Parse,
"Source directory for bind mount").required();
ap.refer(&mut target).add_argument("target", Parse,
"Target directory for bind mount").required();
ap.refer(&mut recursive).add_option(&["--non-recursive"], StoreFalse,
"Disable recursive mount (only a real superuser can do this)");
ap.refer(&mut readonly).add_option(&["--readonly"], StoreTrue,
"Readonly mount");
ap.parse_args_or_exit();
}
match libmount::BindMount::new(source, target)
.recursive(recursive)
.readonly(readonly)
.mount()
{
Ok(()) => {}
Err(e) => {
error!("{}", e);
exit(1);
}
}
}