This is the mail archive of the
cygwin-cvs@cygwin.com
mailing list for the Cygwin project.
[newlib-cygwin] realpath: Handle Win32 and NT long path prefixes
- From: Corinna Vinschen <corinna at sourceware dot org>
- To: cygwin-cvs at sourceware dot org
- Date: 31 May 2016 14:33:38 -0000
- Subject: [newlib-cygwin] realpath: Handle Win32 and NT long path prefixes
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=5c759ab2f45f966b5458d49a1a0e23c15d5c1eca
commit 5c759ab2f45f966b5458d49a1a0e23c15d5c1eca
Author: Corinna Vinschen <corinna@vinschen.de>
Date: Tue May 31 16:33:21 2016 +0200
realpath: Handle Win32 and NT long path prefixes
So far drive letter paths have been handled special since path_conv
leaves the incoming path untouched except for converting backslashes
to forward slashes. However, if the incoming path starts with a
long path prefix, the same problem occurs. Therefore handle all
paths starting with a backslahs the same way.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diff:
---
winsup/cygwin/path.cc | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index 250871d..18d5c1d 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -3560,10 +3560,12 @@ realpath (const char *__restrict path, char *__restrict resolved)
potentially invalid resolved. */
__try
{
- /* Win32 drive letter paths have to be converted to a POSIX path first,
- because path_conv leaves the incoming path untouched except for
- converting backslashes to forward slashes. */
- if (isdrive (path))
+ /* Win32 drive letter paths and, generally, any path starting with a
+ backslash, have to be converted to a POSIX path first, because
+ path_conv leaves the incoming path untouched except for converting
+ backslashes to forward slashes. This also covers '\\?\ and '\??\'
+ path prefixes. */
+ if (isdrive (path) || path[0] == '\\')
{
tpath = tp.c_get ();
mount_table->conv_to_posix_path (path, tpath, 0);