summaryrefslogtreecommitdiffstats
path: root/bin/cp/cp.c
diff options
context:
space:
mode:
Diffstat (limited to 'bin/cp/cp.c')
-rw-r--r--bin/cp/cp.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/bin/cp/cp.c b/bin/cp/cp.c
index 935388d..e803e82 100644
--- a/bin/cp/cp.c
+++ b/bin/cp/cp.c
@@ -99,8 +99,8 @@ main(int argc, char *argv[])
{
struct stat to_stat, tmp_stat;
enum op type;
- int Hflag, Lflag, Pflag, ch, fts_options, r;
- char *target;
+ int Hflag, Lflag, Pflag, ch, fts_options, r, have_trailing_slash;
+ char *target, *s;
Hflag = Lflag = Pflag = 0;
while ((ch = getopt(argc, argv, "HLPRfiprv")) != -1)
@@ -179,6 +179,8 @@ main(int argc, char *argv[])
*to.p_end++ = '.';
*to.p_end = 0;
}
+ have_trailing_slash =
+ ((s = strrchr(to.p_path, '/')) != NULL && s[1] == '\0');
STRIP_TRAILING_SLASH(to);
to.target_end = to.p_end;
@@ -229,6 +231,14 @@ main(int argc, char *argv[])
type = FILE_TO_FILE;
} else
type = FILE_TO_FILE;
+
+ if (have_trailing_slash && type == FILE_TO_FILE) {
+ if (r == -1)
+ errx(1, "directory %s does not exist",
+ to.p_path);
+ else
+ errx(1, "%s is not a directory", to.p_path);
+ }
} else
/*
* Case (2). Target is a directory.
OpenPOWER on IntegriCloud