diff --git a/src/main.rs b/src/main.rs index 501958e..ea0f327 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,7 @@ extern crate simplelog; extern crate structopt; extern crate tempfile; extern crate which; +use nix::sys::signal; mod error; mod mountstack; @@ -165,6 +166,10 @@ fn create(disk: PathBuf) -> Result<(), Error> { Ok(()) } +extern "C" fn handle_sigint(_: i32) { + warn!("Interrupted"); +} + fn main() { let app = App::from_args(); @@ -172,6 +177,17 @@ fn main() { TermLogger::new(LevelFilter::Debug, Config::default()).unwrap(), ]).unwrap(); + let sig_action = signal::SigAction::new( + signal::SigHandler::Handler(handle_sigint), + signal::SaFlags::empty(), + signal::SigSet::empty(), + ); + unsafe { + signal::sigaction(signal::SIGINT, &sig_action).unwrap(); + signal::sigaction(signal::SIGTERM, &sig_action).unwrap(); + signal::sigaction(signal::SIGQUIT, &sig_action).unwrap(); + } + let result = match app { App::Create { disk } => create(disk), }; diff --git a/src/mountstack.rs b/src/mountstack.rs index edc1e94..1c30f69 100644 --- a/src/mountstack.rs +++ b/src/mountstack.rs @@ -52,6 +52,7 @@ impl MountStack { impl Drop for MountStack { fn drop(&mut self) { while let Some(target) = self.targets.pop() { + debug!("Unmounting {}", target.display()); if !umount(&target).is_ok() { warn!("Unable to mount {}", target.display()); };