* path.cc (normalize_posix_path): Preserve //./ and //?/ prefixes.

(path_conv::check): Allow access to root directory of native NT disk
	devices.
This commit is contained in:
Corinna Vinschen 2010-08-31 13:48:04 +00:00
parent 8fd414ffc6
commit 274116ea12
2 changed files with 21 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2010-08-31 Corinna Vinschen <corinna@vinschen.de>
* path.cc (normalize_posix_path): Preserve //./ and //?/ prefixes.
(path_conv::check): Allow access to root directory of native NT disk
devices.
2010-08-31 Corinna Vinschen <corinna@vinschen.de>
* include/cygwin/version.h: Bump DLL minor version number to 7.

View File

@ -267,6 +267,14 @@ normalize_posix_path (const char *src, char *dst, char *&tail)
{
*tail++ = *src++;
++dst_start;
/* Is that a //?/ or //./ prefix into the native NT namespace?
If so, preserve it. */
if ((src[1] == '.' || src[1] == '?') && isslash (src[2]))
{
*tail++ = *src++;
*tail++ = *src++;
dst_start += 2;
}
}
while (*src)
@ -818,6 +826,13 @@ path_conv::check (const char *src, unsigned opt,
full_path[2] = '\\';
full_path[3] = '\0';
}
/* Otherwise, if the user requires a directory and explicitely
specified a path into the native NT namespace, add the trailing
backslash. It's needed to access the root dir. */
else if (need_directory
&& full_path[0] == '\\' && full_path[1] == '\\'
&& (full_path[2] == '.' || full_path[2] == '?'))
strcat (full_path, "\\");
/* If the incoming path was given in DOS notation, always treat
it as caseinsensitive,noacl path. This must be set before