diff --git a/src/uu/cp/src/cp.rs b/src/uu/cp/src/cp.rs index cda57ed0fb0..de23a619596 100644 --- a/src/uu/cp/src/cp.rs +++ b/src/uu/cp/src/cp.rs @@ -2386,7 +2386,7 @@ fn handle_copy_mode( .truncate(false) .create(true) .open(dest) - .unwrap(); + .map_err(|e| CpError::IoErrContext(e, context.to_owned()))?; } } diff --git a/tests/by-util/test_cp.rs b/tests/by-util/test_cp.rs index 1b3fde67814..f3c0fbd195b 100644 --- a/tests/by-util/test_cp.rs +++ b/tests/by-util/test_cp.rs @@ -4412,6 +4412,16 @@ fn test_cp_attributes_only() { assert_eq!(mode_b, at.metadata(b).mode()); } +#[test] +#[cfg(unix)] +fn test_cp_attributes_only_dest_open_error() { + let (at, mut ucmd) = at_and_ucmd!(); + at.write("s.txt", "hi"); + ucmd.args(&["--attributes-only", "s.txt", "/dev/null/n.txt"]) + .fails_with_code(1) + .stderr_contains("cp: 's.txt' -> '/dev/null/n.txt'"); +} + #[test] fn test_cp_seen_file() { let ts = TestScenario::new(util_name!());