commit 8dfcbf23b0b767f941d55364d8aff9785b7e91a5
Author:     Arthur Williams <[email protected]>
AuthorDate: Sun Mar 6 04:14:01 2022 -0800
Commit:     Michael Forney <[email protected]>
CommitDate: Wed Apr 12 21:09:12 2023 -0700

    cp: don't abort when src and dest file are the same
    
    The POSIX spec gives many options on how to handle this case, but it
    also states that cp (and mv) should continue with remaining operands
    regardless. We used to exit immediately, which violates the spec.
    
    This change makes cp/mv not exit immediately in this case and
    also won't cause the return value to be non-zero.
    
    From `man 1p cp`:
       If source_file references the same file as dest_file, cp may write
       a diagnostic message to standard error; it shall do nothing more
       with source_file and shall go on to any remaining files.

diff --git a/libutil/fnck.c b/libutil/fnck.c
index 92da1f4..4f8875b 100644
--- a/libutil/fnck.c
+++ b/libutil/fnck.c
@@ -13,7 +13,8 @@ fnck(const char *a, const char *b,
            && !stat(b, &stb)
            && sta.st_dev == stb.st_dev
            && sta.st_ino == stb.st_ino) {
-               eprintf("%s -> %s: same file\n", a, b);
+               weprintf("%s -> %s: same file\n", a, b);
+               return;
        }
 
        if (fn(a, b, depth) < 0)

Reply via email to