From 0548e74cb3227716cf445f27bd64b8c0b4d0f981 Mon Sep 17 00:00:00 2001 From: Rory Dudley Date: Mon, 26 Feb 2024 23:14:13 -0700 Subject: Cleanup recite(), custom errors, fixed forking First off, moved the giant match statements out of recite(), and into macros in src/recite/ps.rs. There still needs to be two, since any verse using the 'couplet' meter will need to redirect its STDOUT. Now the recite() function returns a Result<(), Mishap>, which can be invoked when calling the incant_ functions. Custom errors were added in the form of 'Mishap''s. They are intended to be returned from the incant_ functions, in the event that something goes wrong with the Command::spawn() or Child::wait(). They each take a String, which should be the verb or stanza that was entered by the user. The incant_ functions separate the functionality of each type of meter from the recite() function. They return a Result, where i32 is the exit code of the program that ran, and Mishap is a possible error. Before, the shell was cheating at forking a process to the background. It would actually spawn a thread to wait for that process to finish. Now, the program simply registers a handler for SIGCHLD, and uses libc's waitpid() function to reap the child process, and print some output to the user, indicating that it's finished. --- Cargo.toml | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Cargo.toml') diff --git a/Cargo.toml b/Cargo.toml index ae18cfc..0f5a2c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,4 +10,6 @@ name = "dwvsh" path = "src/main.rs" [dependencies] +libc = "0.2.153" signal-hook = "0.3.17" +thiserror = "1.0.57" -- cgit v1.2.3