* path.cc (path_conv::get_nt_native_path): Properly detect \\?\ paths.

(mount_info::conv_to_win32_path): Update comment.
	* fhandler_disk_file.cc (path_conv::ndisk_links): Use backslashes
	to make NT kernel functions work for \\?\GLOBALROOT paths.
This commit is contained in:
Corinna Vinschen 2006-10-09 14:01:52 +00:00
parent 5623fbd4ca
commit b9c7deed9a
3 changed files with 14 additions and 6 deletions

View File

@ -1,3 +1,10 @@
2006-10-06 David Jade <d3@mutable.net>
* path.cc (path_conv::get_nt_native_path): Properly detect \\?\ paths.
(mount_info::conv_to_win32_path): Update comment.
* fhandler_disk_file.cc (path_conv::ndisk_links): Use backslashes
to make NT kernel functions work for \\?\GLOBALROOT paths.
2006-10-09 Corinna Vinschen <corinna@vinschen.de>
* devices.in: Raise number of handled serial ports to 64.

View File

@ -143,12 +143,12 @@ path_conv::ndisk_links (DWORD nNumberOfLinks)
__DIR_mounts *dir = new __DIR_mounts (normalized_path);
if (nNumberOfLinks <= 1)
{
s = "/*";
s = "\\*";
count = 0;
}
else
{
s = "/..";
s = "\\..";
count = nNumberOfLinks;
}

View File

@ -526,13 +526,13 @@ path_conv::get_nt_native_path (UNICODE_STRING &upath)
}
else if (path[1] != '\\') /* \Device\... */
str2uni_cat (upath, path);
else if (path[2] != '.'
else if ((path[2] != '.' && path[2] != '?')
|| path[3] != '\\') /* \\server\share\... */
{
str2uni_cat (upath, "\\??\\UNC\\");
str2uni_cat (upath, path + 2);
}
else /* \\.\device */
else /* \\.\device or \\?\foo */
{
str2uni_cat (upath, "\\??\\");
str2uni_cat (upath, path + 4);
@ -1661,8 +1661,9 @@ mount_info::conv_to_win32_path (const char *src_path, char *dst, device& dev,
}
MALLOC_CHECK;
/* If the path is on a network drive, bypass the mount table.
If it's // or //MACHINE, use the netdrive device. */
/* If the path is on a network drive or a //./ resp.//?/ path prefix,
bypass the mount table. If it's // or //MACHINE, use the netdrive
device. */
if (src_path[1] == '/')
{
if (!strchr (src_path + 2, '/'))