1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-05 09:14:03 +00:00

Trailing slash fixes.

Fix the case:
        cp file nonexistent/
which create nonextstent as file while trailing slash clearly indicates
that nonexistent must be a directory.
Also fix the case:
	cp file1 file2/
which should produce error.
This commit is contained in:
Andrey A. Chernov 2002-05-17 11:52:48 +00:00
parent 5fab96cfa4
commit 27d3ae3587
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=96808

View File

@ -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.