From 5fde2f410d29daa058eeb1ea311987eac14d7193 Mon Sep 17 00:00:00 2001 From: Kevin Burke Date: Thu, 19 Mar 2026 22:32:55 -0700 Subject: [PATCH 1/2] rm: use "traversal failed" message when readdir fails during recursive removal When readdir fails mid-traversal (e.g., due to I/O errors), GNU rm reports "traversal failed: " rather than "cannot remove ''". Update the error handling in safe_remove_dir_recursive_impl to match this behavior. Fixes GNU test: tests/rm/rm-readdir-fail.sh Co-Authored-By: Claude Opus 4.6 --- src/uu/rm/locales/en-US.ftl | 1 + src/uu/rm/locales/fr-FR.ftl | 1 + src/uu/rm/src/platform/unix.rs | 6 +++++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/uu/rm/locales/en-US.ftl b/src/uu/rm/locales/en-US.ftl index 8a9a3513eaa..2b7a570fd42 100644 --- a/src/uu/rm/locales/en-US.ftl +++ b/src/uu/rm/locales/en-US.ftl @@ -44,6 +44,7 @@ rm-error-dangerous-recursive-operation-same-as-root = it is dangerous to operate rm-error-use-no-preserve-root = use --no-preserve-root to override this failsafe rm-error-refusing-to-remove-directory = refusing to remove '.' or '..' directory: skipping {$path} rm-error-cannot-remove = cannot remove {$file} +rm-error-traversal-failed = traversal failed: {$path} rm-error-may-not-abbreviate-no-preserve-root = you may not abbreviate the --no-preserve-root option # Verbose messages diff --git a/src/uu/rm/locales/fr-FR.ftl b/src/uu/rm/locales/fr-FR.ftl index 6052e2f8964..9c9124db676 100644 --- a/src/uu/rm/locales/fr-FR.ftl +++ b/src/uu/rm/locales/fr-FR.ftl @@ -44,6 +44,7 @@ rm-error-dangerous-recursive-operation-same-as-root = il est dangereux d'opérer rm-error-use-no-preserve-root = utilisez --no-preserve-root pour outrepasser cette protection rm-error-refusing-to-remove-directory = refus de supprimer le répertoire '.' ou '..' : ignorer {$path} rm-error-cannot-remove = impossible de supprimer {$file} +rm-error-traversal-failed = échec du parcours : {$path} rm-error-may-not-abbreviate-no-preserve-root = Vous ne pouvez pas abréger l'option --no-preserve-root # Messages verbeux diff --git a/src/uu/rm/src/platform/unix.rs b/src/uu/rm/src/platform/unix.rs index d2bcf6e2f46..43ff01dd34b 100644 --- a/src/uu/rm/src/platform/unix.rs +++ b/src/uu/rm/src/platform/unix.rs @@ -349,7 +349,11 @@ pub fn safe_remove_dir_recursive_impl(path: &Path, dir_fd: &DirFd, options: &Opt return !options.force; } Err(e) => { - return handle_error_with_force(e, path, options); + let e = e.map_err_context(|| { + translate!("rm-error-traversal-failed", "path" => path.display().to_string()) + }); + show_error!("{e}"); + return true; } }; From ed919a4368368ce33d496742d38860848db85141 Mon Sep 17 00:00:00 2001 From: Kevin Burke Date: Fri, 20 Mar 2026 09:43:35 -0700 Subject: [PATCH 2/2] rm: fix cargo fmt style violation in map_err_context closure Co-Authored-By: Claude Opus 4.6 --- src/uu/rm/src/platform/unix.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/uu/rm/src/platform/unix.rs b/src/uu/rm/src/platform/unix.rs index 43ff01dd34b..08ae94fdd23 100644 --- a/src/uu/rm/src/platform/unix.rs +++ b/src/uu/rm/src/platform/unix.rs @@ -349,9 +349,9 @@ pub fn safe_remove_dir_recursive_impl(path: &Path, dir_fd: &DirFd, options: &Opt return !options.force; } Err(e) => { - let e = e.map_err_context(|| { - translate!("rm-error-traversal-failed", "path" => path.display().to_string()) - }); + let e = e.map_err_context( + || translate!("rm-error-traversal-failed", "path" => path.display().to_string()), + ); show_error!("{e}"); return true; }