From: Ken Thomases ken@codeweavers.com
Signed-off-by: Zhiyi Zhang zzhang@codeweavers.com --- dlls/gdi32/driver.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-)
diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c index 96c2f1f129..dcbc480376 100644 --- a/dlls/gdi32/driver.c +++ b/dlls/gdi32/driver.c @@ -135,6 +135,32 @@ static const struct gdi_dc_funcs *get_display_driver(void) }
+/********************************************************************** + * is_display_device + */ +static BOOL is_display_device( LPCWSTR name ) +{ + static const WCHAR display_deviceW[] = {'\','\','.','\','D','I','S','P','L','A','Y'}; + const WCHAR *p = name; + + if (strncmpiW( name, display_deviceW, sizeof(display_deviceW) / sizeof(WCHAR) )) + return FALSE; + + p += sizeof(display_deviceW) / sizeof(WCHAR); + + if (!isdigitW( *p++ )) + return FALSE; + + for (; *p; p++) + { + if (!isdigitW( *p )) + return FALSE; + } + + return TRUE; +} + + /********************************************************************** * DRIVER_load_driver */ @@ -143,10 +169,9 @@ const struct gdi_dc_funcs *DRIVER_load_driver( LPCWSTR name ) HMODULE module; struct graphics_driver *driver, *new_driver; static const WCHAR displayW[] = { 'd','i','s','p','l','a','y',0 }; - static const WCHAR display1W[] = {'\','\','.','\','D','I','S','P','L','A','Y','1',0};
/* display driver is a special case */ - if (!strcmpiW( name, displayW ) || !strcmpiW( name, display1W )) return get_display_driver(); + if (!strcmpiW( name, displayW ) || is_display_device( name )) return get_display_driver();
if ((module = GetModuleHandleW( name ))) { @@ -883,13 +908,12 @@ BOOL DRIVER_GetDriverName( LPCWSTR device, LPWSTR driver, DWORD size ) { static const WCHAR displayW[] = { 'd','i','s','p','l','a','y',0 }; static const WCHAR devicesW[] = { 'd','e','v','i','c','e','s',0 }; - static const WCHAR display1W[] = {'\','\','.','\','D','I','S','P','L','A','Y','1',0}; static const WCHAR empty_strW[] = { 0 }; WCHAR *p;
/* display is a special case */ if (!strcmpiW( device, displayW ) || - !strcmpiW( device, display1W )) + is_display_device( device )) { lstrcpynW( driver, displayW, size ); return TRUE;
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=54046
Your paranoid android.
=== debian9 (32 bit Chinese:China report) ===
user32: clipboard.c:760: Test failed: 1: gle 5 clipboard.c:765: Test failed: 1.0: got 0000 instead of 0007 clipboard.c:805: Test failed: 1: gle 1418 clipboard.c:815: Test failed: 1: count 4 clipboard.c:818: Test failed: 1: gle 1418 clipboard.c:852: Test failed: 1: format 0007 got data 00128450 clipboard.c:853: Test failed: 1.0: formats 00000000 have been rendered clipboard.c:858: Test failed: 1.0: formats 00000000 have been rendered clipboard.c:852: Test failed: 1: format 0001 got data 00125180 clipboard.c:853: Test failed: 1.2: formats 00000000 have been rendered clipboard.c:858: Test failed: 1.2: formats 00000000 have been rendered clipboard.c:852: Test failed: 1: format 000d got data 00128480 clipboard.c:853: Test failed: 1.3: formats 00000000 have been rendered clipboard.c:858: Test failed: 1.3: formats 00000000 have been rendered