use crate::internals::helpers::err_write;
use std::io::Write;
use std::process::{Command, Stdio};
#[inline]
pub fn exit<E: Write>(code: i32, hook: &str, stderr: &mut E, err_continue: bool) {
if hook == "default" || hook == "" {
std::process::exit(code);
} else {
let mut child = Command::new(hook)
.arg("exit")
.arg(code.to_string())
.stdin(Stdio::inherit())
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.spawn()
.expect("Failed to start");
let status = child.wait().unwrap();
let exit_code = if let Some(c) = status.code() {
c
} else {
err_write("error hook crashed", stderr);
if err_continue == false {
std::process::exit(1);
} else {
let _ = write!(stderr, "using builtin error instead of hook error");
code
}
};
std::process::exit(exit_code);
}
}