aboutsummaryrefslogtreecommitdiff
path: root/bin/cp
diff options
context:
space:
mode:
authorDavid E. O'Brien <obrien@FreeBSD.org>2013-02-08 16:10:16 +0000
committerDavid E. O'Brien <obrien@FreeBSD.org>2013-02-08 16:10:16 +0000
commitd9a447559bc04121f7c6682e64abe67efa154864 (patch)
treeb2f038222ff8a70f687652441df00d2b564c8abe /bin/cp
parent3cbf5f97aafc2b249c509ee1162c47c9b28e591e (diff)
parentfbda3d5daeeb730a49d025b614b35a32f0319718 (diff)
downloadsrc-d9a447559bc04121f7c6682e64abe67efa154864.tar.gz
src-d9a447559bc04121f7c6682e64abe67efa154864.zip
Sync with HEAD.
Notes
Notes: svn path=/projects/bmake/; revision=246555
Diffstat (limited to 'bin/cp')
-rw-r--r--bin/cp/cp.c12
-rw-r--r--bin/cp/utils.c19
2 files changed, 23 insertions, 8 deletions
diff --git a/bin/cp/cp.c b/bin/cp/cp.c
index 86dbb3c04cfb..b83eeadc86ae 100644
--- a/bin/cp/cp.c
+++ b/bin/cp/cp.c
@@ -98,30 +98,28 @@ main(int argc, char *argv[])
{
struct stat to_stat, tmp_stat;
enum op type;
- int Hflag, Lflag, Pflag, ch, fts_options, r, have_trailing_slash;
+ int Hflag, Lflag, ch, fts_options, r, have_trailing_slash;
char *target;
fts_options = FTS_NOCHDIR | FTS_PHYSICAL;
- Hflag = Lflag = Pflag = 0;
+ Hflag = Lflag = 0;
while ((ch = getopt(argc, argv, "HLPRafilnprvx")) != -1)
switch (ch) {
case 'H':
Hflag = 1;
- Lflag = Pflag = 0;
+ Lflag = 0;
break;
case 'L':
Lflag = 1;
- Hflag = Pflag = 0;
+ Hflag = 0;
break;
case 'P':
- Pflag = 1;
Hflag = Lflag = 0;
break;
case 'R':
Rflag = 1;
break;
case 'a':
- Pflag = 1;
pflag = 1;
Rflag = 1;
Hflag = Lflag = 0;
@@ -146,7 +144,7 @@ main(int argc, char *argv[])
break;
case 'r':
rflag = Lflag = 1;
- Hflag = Pflag = 0;
+ Hflag = 0;
break;
case 'v':
vflag = 1;
diff --git a/bin/cp/utils.c b/bin/cp/utils.c
index d729bd5b340f..ad9695c08a13 100644
--- a/bin/cp/utils.c
+++ b/bin/cp/utils.c
@@ -104,7 +104,7 @@ copy_file(const FTSENT *entp, int dne)
if (vflag)
printf("%s not overwritten\n", to.p_path);
(void)close(from_fd);
- return (0);
+ return (1);
} else if (iflag) {
(void)fprintf(stderr, "overwrite %s? %s",
to.p_path, YESNO);
@@ -266,6 +266,11 @@ copy_link(const FTSENT *p, int exists)
int len;
char llink[PATH_MAX];
+ if (exists && nflag) {
+ if (vflag)
+ printf("%s not overwritten\n", to.p_path);
+ return (1);
+ }
if ((len = readlink(p->fts_path, llink, sizeof(llink) - 1)) == -1) {
warn("readlink: %s", p->fts_path);
return (1);
@@ -285,6 +290,12 @@ copy_link(const FTSENT *p, int exists)
int
copy_fifo(struct stat *from_stat, int exists)
{
+
+ if (exists && nflag) {
+ if (vflag)
+ printf("%s not overwritten\n", to.p_path);
+ return (1);
+ }
if (exists && unlink(to.p_path)) {
warn("unlink: %s", to.p_path);
return (1);
@@ -299,6 +310,12 @@ copy_fifo(struct stat *from_stat, int exists)
int
copy_special(struct stat *from_stat, int exists)
{
+
+ if (exists && nflag) {
+ if (vflag)
+ printf("%s not overwritten\n", to.p_path);
+ return (1);
+ }
if (exists && unlink(to.p_path)) {
warn("unlink: %s", to.p_path);
return (1);