diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index bdabb21a4..1c8bc5a76 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2013-07-31 Corinna Vinschen + + * path.cc (normalize_posix_path): Don't check existence of / or // dir + in parent dir check. + 2013-07-26 Christopher Faylor * environ.cc (tty_is_gone): Delete. diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index 7f0e5b81f..8acb6ff6b 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -311,11 +311,14 @@ normalize_posix_path (const char *src, char *dst, char *&tail) double check in case of foo/bar/../.. */ if (check_parent) { - *tail = 0; - debug_printf ("checking %s before '..'", dst); - path_conv head (dst); - if (!head.isdir()) - return ENOENT; + if (tail > dst_start) /* Don't check for / or // dir. */ + { + *tail = 0; + debug_printf ("checking %s before '..'", dst); + path_conv head (dst); + if (!head.isdir()) + return ENOENT; + } check_parent = false; } while (tail > dst_start && !isslash (*--tail))