summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/syscalls.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/syscalls.cc')
-rw-r--r--winsup/cygwin/syscalls.cc16
1 files changed, 9 insertions, 7 deletions
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index 23faca911..45978bc91 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -484,21 +484,23 @@ _link (const char *a, const char *b)
{
int res = -1;
path_conv real_a (a, SYMLINK_NOFOLLOW);
+ path_conv real_b (b, SYMLINK_NOFOLLOW);
if (real_a.error)
{
set_errno (real_a.error);
- syscall_printf ("-1 = link (%s, %s)", a, b);
- return -1;
+ goto done;
}
-
- path_conv real_b (b, SYMLINK_NOFOLLOW);
-
if (real_b.error)
{
set_errno (real_b.error);
- syscall_printf ("-1 = link (%s, %s)", a, b);
- return -1;
+ goto done;
+ }
+ if (real_b.get_win32 ()[strlen (real_b.get_win32 ()) - 1] == '.')
+ {
+ syscall_printf ("trailing dot, bailing out");
+ set_errno (EINVAL);
+ goto done;
}
/* Try to make hard link first on Windows NT */