File: remount.rs

package info (click to toggle)
rust-libmount 0.1.15-8
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 308 kB
  • sloc: makefile: 2
file content (52 lines) | stat: -rw-r--r-- 1,580 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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, StoreTrue};


fn main() {
    env_logger::init();
    let mut path = PathBuf::new();
    let mut bind = false;
    let mut readonly = false;
    let mut nodev = false;
    let mut noexec = false;
    let mut nosuid = false;
    {
        let mut ap = ArgumentParser::new();
        ap.set_description("Remount utility. Similar to `mount -o remount` \
                            but keeps current mount point options");
        ap.refer(&mut path).add_argument("path", Parse,
            "Directory for remounting").required();
        ap.refer(&mut bind).add_option(&["--bind"], StoreTrue,
            "Set bind mount option");
        ap.refer(&mut readonly).add_option(&["--readonly"], StoreTrue,
            "Set readonly mount option");
        ap.refer(&mut nodev).add_option(&["--nodev"], StoreTrue,
            "Set nodev mount option");
        ap.refer(&mut noexec).add_option(&["--noexec"], StoreTrue,
            "Set noexec mount option");
        ap.refer(&mut nosuid).add_option(&["--nosuid"], StoreTrue,
            "Set nosuid mount option");
        ap.parse_args_or_exit();
    }
    match libmount::Remount::new(path)
        .bind(bind)
        .readonly(readonly)
        .nodev(nodev)
        .noexec(noexec)
        .nosuid(nosuid)
        .remount()
    {
        Ok(()) => {}
        Err(e) => {
            error!("{}", e);
            exit(1);
        }
    }
}