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>
This commit is contained in:
		| @@ -3560,10 +3560,12 @@ realpath (const char *__restrict path, char *__restrict resolved) | |||||||
|      potentially invalid resolved. */ |      potentially invalid resolved. */ | ||||||
|   __try |   __try | ||||||
|     { |     { | ||||||
|       /* Win32 drive letter paths have to be converted to a POSIX path first, |       /* Win32 drive letter paths and, generally, any path starting with a | ||||||
| 	 because path_conv leaves the incoming path untouched except for | 	 backslash, have to be converted to a POSIX path first, because | ||||||
| 	 converting backslashes to forward slashes. */ | 	 path_conv leaves the incoming path untouched except for converting | ||||||
|       if (isdrive (path)) | 	 backslashes to forward slashes.  This also covers '\\?\ and '\??\' | ||||||
|  | 	 path prefixes. */ | ||||||
|  |       if (isdrive (path) || path[0] == '\\') | ||||||
| 	{ | 	{ | ||||||
| 	  tpath = tp.c_get (); | 	  tpath = tp.c_get (); | ||||||
| 	  mount_table->conv_to_posix_path (path, tpath, 0); | 	  mount_table->conv_to_posix_path (path, tpath, 0); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user