part 3
OK?
martijn@
diff --git cp.c cp.c
index fbf924c..2ccef08 100644
--- cp.c
+++ cp.c
@@ -434,7 +434,7 @@ copy(char *argv[], enum op type, int fts_options)
!fts_dne(curr))) == 1)
rval = 1;
} else {
- cval = copy_file(curr, fts_dne(curr));
+ cval = copy_file(curr, !fts_dne(curr));
if (cval == 1)
rval = 1;
}
@@ -449,7 +449,7 @@ copy(char *argv[], enum op type, int fts_options)
!fts_dne(curr))) == 1)
rval = 1;
} else {
- cval = copy_file(curr, fts_dne(curr));
+ cval = copy_file(curr, !fts_dne(curr));
if (cval == 1)
rval = 1;
}
@@ -462,7 +462,7 @@ copy(char *argv[], enum op type, int fts_options)
warnc(EOPNOTSUPP, "%s", curr->fts_path);
break;
default:
- if ((cval = copy_file(curr, fts_dne(curr))) == 1)
+ if ((cval = copy_file(curr, !fts_dne(curr))) == 1)
rval = 1;
if (!cval && vflag)
(void)fprintf(stdout, "%s -> %s\n",
diff --git utils.c utils.c
index 4a9219c..0f44bbf 100644
--- utils.c
+++ utils.c
@@ -50,7 +50,7 @@
int copy_overwrite(void);
int
-copy_file(FTSENT *entp, int dne)
+copy_file(FTSENT *entp, int exists)
{
static char *buf;
static char *zeroes;
@@ -82,7 +82,7 @@ copy_file(FTSENT *entp, int dne)
* In -f (force) mode, we always unlink the destination first
* if it exists. Note that -i and -f are mutually exclusive.
*/
- if (!dne && fflag)
+ if (exists && fflag)
(void)unlink(to.p_path);
/*
@@ -92,7 +92,7 @@ copy_file(FTSENT *entp, int dne)
* other choice is 666 or'ed with the execute bits on the from file
* modified by the umask.)
*/
- if (!dne && !fflag) {
+ if (exists && !fflag) {
if (!copy_overwrite()) {
(void)close(from_fd);
return 2;
@@ -174,7 +174,7 @@ copy_file(FTSENT *entp, int dne)
*/
#define RETAINBITS \
(S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
- if (!pflag && dne &&
+ if (!pflag && !exists &&
fs->st_mode & (S_ISUID | S_ISGID) && fs->st_uid == myuid) {
if (fstat(to_fd, &to_stat)) {
warn("%s", to.p_path);