Skip to content

Commit 5fde2f4

Browse files
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: <dir>" rather than "cannot remove '<dir>'". 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 <noreply@anthropic.com>
1 parent 7369f4d commit 5fde2f4

3 files changed

Lines changed: 7 additions & 1 deletion

File tree

src/uu/rm/locales/en-US.ftl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ rm-error-dangerous-recursive-operation-same-as-root = it is dangerous to operate
4444
rm-error-use-no-preserve-root = use --no-preserve-root to override this failsafe
4545
rm-error-refusing-to-remove-directory = refusing to remove '.' or '..' directory: skipping {$path}
4646
rm-error-cannot-remove = cannot remove {$file}
47+
rm-error-traversal-failed = traversal failed: {$path}
4748
rm-error-may-not-abbreviate-no-preserve-root = you may not abbreviate the --no-preserve-root option
4849
4950
# Verbose messages

src/uu/rm/locales/fr-FR.ftl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ rm-error-dangerous-recursive-operation-same-as-root = il est dangereux d'opérer
4444
rm-error-use-no-preserve-root = utilisez --no-preserve-root pour outrepasser cette protection
4545
rm-error-refusing-to-remove-directory = refus de supprimer le répertoire '.' ou '..' : ignorer {$path}
4646
rm-error-cannot-remove = impossible de supprimer {$file}
47+
rm-error-traversal-failed = échec du parcours : {$path}
4748
rm-error-may-not-abbreviate-no-preserve-root = Vous ne pouvez pas abréger l'option --no-preserve-root
4849
4950
# Messages verbeux

src/uu/rm/src/platform/unix.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,11 @@ pub fn safe_remove_dir_recursive_impl(path: &Path, dir_fd: &DirFd, options: &Opt
349349
return !options.force;
350350
}
351351
Err(e) => {
352-
return handle_error_with_force(e, path, options);
352+
let e = e.map_err_context(|| {
353+
translate!("rm-error-traversal-failed", "path" => path.display().to_string())
354+
});
355+
show_error!("{e}");
356+
return true;
353357
}
354358
};
355359

0 commit comments

Comments
 (0)