mirror of
https://github.com/philmmanjaro/alma.git
synced 2025-07-26 06:59:28 +02:00
Signal handling (fix #7)
This commit is contained in:
parent
c543916366
commit
1ded17b500
16
src/main.rs
16
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),
|
||||
};
|
||||
|
@ -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());
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user