Fix W->A conversions in EnumDisplaySettingsExA. This is dedicated to Caroline! Modified: trunk/reactos/lib/user32/misc/display.c _____
Modified: trunk/reactos/lib/user32/misc/display.c --- trunk/reactos/lib/user32/misc/display.c 2005-03-02 22:17:34 UTC (rev 13801) +++ trunk/reactos/lib/user32/misc/display.c 2005-03-02 22:29:11 UTC (rev 13802) @@ -200,22 +200,32 @@
{ BOOL rc; UNICODE_STRING DeviceName; + LPDEVMODEW lpDevModeW;
+ lpDevModeW = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, + sizeof(DEVMODEW) + lpDevMode->dmDriverExtra); + if ( lpDevModeW == NULL ) + { + SetLastError ( ERROR_OUTOFMEMORY ); + return FALSE; + } + if ( !RtlCreateUnicodeStringFromAsciiz ( &DeviceName, (PCSZ)lpszDeviceName ) ) { SetLastError ( ERROR_OUTOFMEMORY ); return FALSE; }
- /* - * NOTE: We don't need to convert between DEVMODEW and DEVMODEA because - * only dmBitsPerPel, dmPelsWidth, dmPelsHeight, dmDisplayFlags and - * dmDisplayFrequency fields are set. - */ - rc = NtUserEnumDisplaySettings ( &DeviceName, iModeNum, (LPDEVMODEW)lpDevMode, + lpDevModeW->dmSize = sizeof(DEVMODEW); + lpDevModeW->dmDriverExtra = 0; + + rc = NtUserEnumDisplaySettings ( &DeviceName, iModeNum, lpDevModeW, dwFlags );
+ RosRtlDevModeW2A ( lpDevMode, lpDevModeW ); + RtlFreeUnicodeString ( &DeviceName ); + HeapFree ( GetProcessHeap(), 0, lpDevModeW );
return rc; }