From 18e36622a07f133c373f7a9b73e416d439bdc200 Mon Sep 17 00:00:00 2001 From: pagedmov Date: Thu, 19 Feb 2026 18:27:51 -0500 Subject: [PATCH] handled some unwraps in cd error reporting now blames the function call span instead of the errored command inside the function --- src/builtin/cd.rs | 12 ++++++++++-- src/parse/execute.rs | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/builtin/cd.rs b/src/builtin/cd.rs index 6c8c6a1..bdddf5b 100644 --- a/src/builtin/cd.rs +++ b/src/builtin/cd.rs @@ -42,8 +42,16 @@ pub fn cd(node: Node, job: &mut JobBldr) -> ShResult<()> { )); } - env::set_current_dir(new_dir).unwrap(); - let new_dir = env::current_dir().unwrap(); + if let Err(e) = env::set_current_dir(new_dir) { + return Err(ShErr::full( + ShErrKind::ExecFail, + format!("cd: Failed to change directory: {}", e), + span, + )); + } + let new_dir = env::current_dir().map_err( + |e| ShErr::full(ShErrKind::ExecFail, format!("cd: Failed to get current directory: {}", e), span) + )?; unsafe { env::set_var("PWD", new_dir) }; state::set_status(0); diff --git a/src/parse/execute.rs b/src/parse/execute.rs index b1195c7..c868e3a 100644 --- a/src/parse/execute.rs +++ b/src/parse/execute.rs @@ -319,7 +319,7 @@ impl Dispatcher { state::set_status(*code); Ok(()) } - _ => Err(e), + _ => Err(e).blame(blame), } } else { Ok(())