From e94d09da9449cabd7ece2acd98d52b1946a922a4 Mon Sep 17 00:00:00 2001 From: Rory Dudley Date: Tue, 27 Feb 2024 03:49:01 -0700 Subject: Remove custom errors and fix background forking Removes the custom errors in src/recite/erro.rs, and replaces them with std::io::Errors throughout (recite(), incant_, macros). Fixed a bug with the way forking to the background is handled, where registering the signal handler in main for all processes would break couplets (i.e. pipes). Instead, this sets up a new signal handler each time a process is forked into the background. It uses a Vec to keep track of all the background processes. --- src/recite/ps.rs | 44 ++++++++------------------------------------ 1 file changed, 8 insertions(+), 36 deletions(-) (limited to 'src/recite/ps.rs') diff --git a/src/recite/ps.rs b/src/recite/ps.rs index 3557505..30c3d7c 100644 --- a/src/recite/ps.rs +++ b/src/recite/ps.rs @@ -5,30 +5,15 @@ macro_rules! task { let mut child = Command::new($verse.verb()) .args($verse.clause()) .stdin(Stdio::piped()) - .spawn() - .map_err(|e| match e.kind() { - io::ErrorKind::PermissionDenied => Mishap::PermissionDenied($verse.verb()), - _ => Mishap::Else($verse.verb()), - })?; + .spawn()?; - let stdin = child - .stdin - .as_mut() - .ok_or(Mishap::BrokenPipe($verse.verb()))?; - stdin - .write_all(&$out.as_bytes()) - .map_err(|_| Mishap::BrokenPipe($verse.verb()))?; + let stdin = child.stdin.as_mut().ok_or(io::ErrorKind::BrokenPipe)?; + stdin.write_all(&$out.as_bytes())?; $out.clear(); child } else { - Command::new($verse.verb()) - .args($verse.clause()) - .spawn() - .map_err(|e| match e.kind() { - io::ErrorKind::PermissionDenied => Mishap::PermissionDenied($verse.verb()), - _ => Mishap::Else($verse.verb()), - })? + Command::new($verse.verb()).args($verse.clause()).spawn()? } }; } @@ -41,19 +26,10 @@ macro_rules! ctask { .args($verse.clause()) .stdin(Stdio::piped()) .stdout(Stdio::piped()) - .spawn() - .map_err(|e| match e.kind() { - io::ErrorKind::PermissionDenied => Mishap::PermissionDenied($verse.verb()), - _ => Mishap::Else($verse.verb()), - })?; + .spawn()?; - let stdin = child - .stdin - .as_mut() - .ok_or(Mishap::BrokenPipe($verse.verb()))?; - stdin - .write_all(&$out.as_bytes()) - .map_err(|_| Mishap::BrokenPipe($verse.verb()))?; + let stdin = child.stdin.as_mut().ok_or(io::ErrorKind::BrokenPipe)?; + stdin.write_all(&$out.as_bytes())?; $out.clear(); child @@ -61,11 +37,7 @@ macro_rules! ctask { Command::new($verse.verb()) .args($verse.clause()) .stdout(Stdio::piped()) - .spawn() - .map_err(|e| match e.kind() { - io::ErrorKind::PermissionDenied => Mishap::PermissionDenied($verse.verb()), - _ => Mishap::Else($verse.verb()), - })? + .spawn()? } }; } -- cgit v1.2.3