Alexandre Julliard : kernel32: Check NT symlink first for all devices in QueryDosDeviceW.
Module: wine Branch: master Commit: f32600d3c1ae47731b53b6a872c16c9d1d0a893d URL: http://source.winehq.org/git/wine.git/?a=commit;h=f32600d3c1ae47731b53b6a872... Author: Alexandre Julliard <julliard(a)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 )) {
participants (1)
-
Alexandre Julliard