Alexandre Julliard : kernel32: Check NT symlink first for all devices in QueryDosDeviceW.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu May 21 07:24:24 CDT 2015
Module: wine
Branch: master
Commit: f32600d3c1ae47731b53b6a872c16c9d1d0a893d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f32600d3c1ae47731b53b6a872c16c9d1d0a893d
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu May 21 17:35:06 2015 +0900
kernel32: Check NT symlink first for all devices in QueryDosDeviceW.
---
dlls/kernel32/volume.c | 37 +++++++++++++++++++------------------
1 file changed, 19 insertions(+), 18 deletions(-)
diff --git a/dlls/kernel32/volume.c b/dlls/kernel32/volume.c
index 38a72c5..0bbf621 100644
--- a/dlls/kernel32/volume.c
+++ b/dlls/kernel32/volume.c
@@ -1282,34 +1282,35 @@ DWORD WINAPI QueryDosDeviceW( LPCWSTR devname, LPWSTR target, DWORD bufsize )
{
WCHAR *p, name[5];
char *path, *link;
+ WCHAR *buffer;
DWORD dosdev, ret = 0;
if ((dosdev = RtlIsDosDeviceName_U( devname )))
{
memcpy( name, devname + HIWORD(dosdev)/sizeof(WCHAR), LOWORD(dosdev) );
name[LOWORD(dosdev)/sizeof(WCHAR)] = 0;
+ devname = name;
}
- else
- {
- WCHAR *buffer;
- if (!(buffer = HeapAlloc( GetProcessHeap(), 0, sizeof(dosdevW) + strlenW(devname)*sizeof(WCHAR) )))
- {
- SetLastError( ERROR_OUTOFMEMORY );
- return 0;
- }
- memcpy( buffer, dosdevW, sizeof(dosdevW) );
- strcatW( buffer, devname );
- status = read_nt_symlink( buffer, target, bufsize );
- HeapFree( GetProcessHeap(), 0, buffer );
- if (status)
- {
- SetLastError( RtlNtStatusToDosError(status) );
- return 0;
- }
+ if (!(buffer = HeapAlloc( GetProcessHeap(), 0, sizeof(dosdevW) + strlenW(devname)*sizeof(WCHAR) )))
+ {
+ SetLastError( ERROR_OUTOFMEMORY );
+ return 0;
+ }
+ memcpy( buffer, dosdevW, sizeof(dosdevW) );
+ strcatW( buffer, devname );
+ status = read_nt_symlink( buffer, target, bufsize );
+ HeapFree( GetProcessHeap(), 0, buffer );
+ if (!status)
+ {
ret = strlenW( target ) + 1;
goto done;
}
+ if (!dosdev) /* not a special DOS device */
+ {
+ SetLastError( RtlNtStatusToDosError(status) );
+ return 0;
+ }
/* FIXME: should read NT symlink for all devices */
@@ -1322,7 +1323,7 @@ DWORD WINAPI QueryDosDeviceW( LPCWSTR devname, LPWSTR target, DWORD bufsize )
ret = MultiByteToWideChar( CP_UNIXCP, 0, link, -1, target, bufsize );
HeapFree( GetProcessHeap(), 0, link );
}
- else if (dosdev) /* look for device defaults */
+ else /* look for device defaults */
{
if (!strcmpiW( name, auxW ))
{
More information about the wine-cvs
mailing list