diff --git a/src/uu/cp/src/cp.rs b/src/uu/cp/src/cp.rs index 30cb3f59f..332bb5785 100644 --- a/src/uu/cp/src/cp.rs +++ b/src/uu/cp/src/cp.rs @@ -1713,6 +1713,7 @@ fn copy_file( if are_hardlinks_to_same_file(source, dest) && !options.force() && options.backup == BackupMode::NoBackup + && source != dest { return Ok(()); } diff --git a/tests/by-util/test_cp.rs b/tests/by-util/test_cp.rs index a1638584b..d166243ed 100644 --- a/tests/by-util/test_cp.rs +++ b/tests/by-util/test_cp.rs @@ -117,6 +117,20 @@ fn test_cp_duplicate_files() { assert_eq!(at.read(TEST_COPY_TO_FOLDER_FILE), "Hello, World!\n"); } +#[test] +fn test_cp_same_file() { + let (at, mut ucmd) = at_and_ucmd!(); + let file = "a"; + + at.touch(file); + + ucmd.arg(file) + .arg(file) + .fails() + .code_is(1) + .stderr_contains(format!("'{file}' and '{file}' are the same file")); +} + #[test] fn test_cp_multiple_files_target_is_file() { new_ucmd!()