From nobody Wed Mar 9 21:22:49 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 02D4019F4B4B; Wed, 9 Mar 2022 21:22:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4KDQCF4MGhz3ndB; Wed, 9 Mar 2022 21:22:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1646860969; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=S14g+QE5Lp3t0eHmz+byKZ0OR2kUdMLc+UO6PChSRBU=; b=nIamj0/OVmYJsA0ZUoJENpoCrMZRI7ZTYY7XCsUVmhwLrBQNFYBMMSkGhFZL1pw2voeg26 rAty+pWUpjtqfMHlwXSxLTpalK90/VFIeaTyCr3YSk8RgDWSjHl5CalElAsp+BiSz9lzuK rzGENF8cnRdb8k6F5JXrYBvbBbLmRJZeZeC5ZFU3gW8ANxKrNPcsrOhG2u+cE3ZZvri0o9 QquzPVKJOk24f14PE5CgozMFNOLZDYkiKQ5O9Zlfq9c0C2FD74IS9aFPuDhO39fxoQqivh mLTtIUOuCAFQTWk4krsqsg4RKmWYTi8mpN1DSbCEY+sLsaA/FrtpiNkiYU25gQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 45C2018889; Wed, 9 Mar 2022 21:22:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 229LMnoW003361; Wed, 9 Mar 2022 21:22:49 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 229LMn5n003360; Wed, 9 Mar 2022 21:22:49 GMT (envelope-from git) Date: Wed, 9 Mar 2022 21:22:49 GMT Message-Id: <202203092122.229LMn5n003360@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kyle Evans Subject: git: 44eb8cfdc69b - stable/13 - cp: Make -P work without -R as per POSIX List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kevans X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 44eb8cfdc69bb31f11293a8d4f6f36b608887b64 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1646860969; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=S14g+QE5Lp3t0eHmz+byKZ0OR2kUdMLc+UO6PChSRBU=; b=VGUokog2tKFWEjTCfEFmeLSTk6uXQ1MjHjZcJYDQdjOj1X6oXGfX1goAZYJ5H6R5nWU7iy GoFnA+pw6Gp8wHdFZx8UeQITZTtdHt55FGM3lJtuuS+VGVHBAqsnz0Nz88uVNM2eQ51TJi 0MLwEQW9lMXtdk/0TGxBitujADJr6/s9C20BH4MGKVOqcxABukbnWngwIysK8LHOPSfX3y CbYAFhLB6zza+vNGRukypSNtJ4LVIl4KS3OHm30cG3XKJbU/FV9KmtANBzh080PNLfbwOz l9/1MJo0lMLdDuPCG6f5uSPQSW93U8fiD8NexpTuQoN6PscklbFIiFKOP4QiRA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1646860969; a=rsa-sha256; cv=none; b=ZvLoBR7VMITOZKJ4JyaQO/TLvrDT5FYlE9rLc1UWvkSuwPHjOU/G2/1g/cWDPRk31GUk93 tQlnquqBNG3vBMoJ3x998/mFbqjvCMl8QsIj49JZOyjLAQ76MtKkFlrbO5A3VkmsCaCdPt wW9ySgZyOmC6FqcwiKI+4sbEAcEFk9DECjuRz7lLrUs3n3ALkOSl3TYOMPm2UXro7ivFz8 5HTeYkmnkMYsrfkIBDGCSx4cEy9O94WiLsYOUKS6nvgeuEj9eP1vYfu1A8FpmiUxQ7woNq hmTIEwkQh0DQ65NCN7WQ/bBLisK2UHdKyBWtrySTollbYq0ydpM+IoOtgDyUAA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=44eb8cfdc69bb31f11293a8d4f6f36b608887b64 commit 44eb8cfdc69bb31f11293a8d4f6f36b608887b64 Author: Cameron Katri AuthorDate: 2022-02-23 18:55:13 +0000 Commit: Kyle Evans CommitDate: 2022-03-09 21:22:02 +0000 cp: Make -P work without -R as per POSIX According to POSIX, cp should allow the `-P` flag to work whether `-R` is specified or not. Currently, the `-P` option only works along with `-R`. PR: 199466 (cherry picked from commit 97e13037915c22162f199461f56951793d669f57) --- bin/cp/cp.1 | 16 ++++++++++++---- bin/cp/cp.c | 13 ++++++++----- bin/cp/tests/cp_test.sh | 11 +++++++++++ 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/bin/cp/cp.1 b/bin/cp/cp.1 index f7e2d639def7..f6ff23a16f41 100644 --- a/bin/cp/cp.1 +++ b/bin/cp/cp.1 @@ -32,7 +32,7 @@ .\" @(#)cp.1 8.3 (Berkeley) 4/18/94 .\" $FreeBSD$ .\" -.Dd June 6, 2015 +.Dd February 23, 2022 .Dt CP 1 .Os .Sh NAME @@ -55,6 +55,14 @@ .Op Fl f | i | n .Op Fl alpsvx .Ar source_file ... target_directory +.Nm +.Op Fl f | i | n +.Op Fl alPpsvx +.Ar source_file target_file +.Nm +.Op Fl f | i | n +.Op Fl alPpsvx +.Ar source_file ... target_directory .Sh DESCRIPTION In the first synopsis form, the .Nm @@ -84,10 +92,10 @@ If the .Fl R option is specified, all symbolic links are followed. .It Fl P -If the +No symbolic links are followed. +This is the default if the .Fl R -option is specified, no symbolic links are followed. -This is the default. +option is specified. .It Fl R If .Ar source_file diff --git a/bin/cp/cp.c b/bin/cp/cp.c index 14007cf1ee66..e846b0ee6dd2 100644 --- a/bin/cp/cp.c +++ b/bin/cp/cp.c @@ -99,21 +99,23 @@ main(int argc, char *argv[]) { struct stat to_stat, tmp_stat; enum op type; - int ch, fts_options, r, have_trailing_slash; + int Pflag, ch, fts_options, r, have_trailing_slash; char *target; fts_options = FTS_NOCHDIR | FTS_PHYSICAL; + Pflag = 0; while ((ch = getopt(argc, argv, "HLPRafilnprsvx")) != -1) switch (ch) { case 'H': Hflag = 1; - Lflag = 0; + Lflag = Pflag = 0; break; case 'L': Lflag = 1; - Hflag = 0; + Hflag = Pflag = 0; break; case 'P': + Pflag = 1; Hflag = Lflag = 0; break; case 'R': @@ -122,6 +124,7 @@ main(int argc, char *argv[]) case 'a': pflag = 1; Rflag = 1; + Pflag = 1; Hflag = Lflag = 0; break; case 'f': @@ -144,7 +147,7 @@ main(int argc, char *argv[]) break; case 'r': rflag = Lflag = 1; - Hflag = 0; + Hflag = Pflag = 0; break; case 's': sflag = 1; @@ -178,7 +181,7 @@ main(int argc, char *argv[]) fts_options &= ~FTS_PHYSICAL; fts_options |= FTS_LOGICAL; } - } else { + } else if (!Pflag) { fts_options &= ~FTS_PHYSICAL; fts_options |= FTS_LOGICAL | FTS_COMFOLLOW; } diff --git a/bin/cp/tests/cp_test.sh b/bin/cp/tests/cp_test.sh index fa2bf82e1478..eb8852a579c5 100755 --- a/bin/cp/tests/cp_test.sh +++ b/bin/cp/tests/cp_test.sh @@ -117,6 +117,16 @@ recursive_link_Lflag_body() '(' ! -L foo-mirror/foo/baz ')' } +atf_test_case standalone_Pflag +standalone_Pflag_body() +{ + echo "foo" > bar + ln -s bar foo + + atf_check cp -P foo baz + atf_check -o inline:'Symbolic Link\n' stat -f %SHT baz +} + atf_init_test_cases() { atf_add_test_case basic @@ -125,4 +135,5 @@ atf_init_test_cases() atf_add_test_case recursive_link_dflt atf_add_test_case recursive_link_Hflag atf_add_test_case recursive_link_Lflag + atf_add_test_case standalone_Pflag }