Ken Thomases : gdi32: Also accept "\\.\DISPLAY<n>" devices names with <n> other than 1 as display devices.
Alexandre Julliard
julliard at winehq.org
Tue Jun 25 17:25:51 CDT 2019
Module: wine
Branch: master
Commit: 7c2d5a7c25437bc872c8ddf335466cffc0e995fa
URL: https://source.winehq.org/git/wine.git/?a=commit;h=7c2d5a7c25437bc872c8ddf335466cffc0e995fa
Author: Ken Thomases <ken at codeweavers.com>
Date: Tue Jun 25 16:39:11 2019 +0800
gdi32: Also accept "\\.\DISPLAY<n>" devices names with <n> other than 1 as display devices.
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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 96c2f1f..dcbc480 100644
--- a/dlls/gdi32/driver.c
+++ b/dlls/gdi32/driver.c
@@ -136,6 +136,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
*/
const struct gdi_dc_funcs *DRIVER_load_driver( LPCWSTR name )
@@ -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;
More information about the wine-cvs
mailing list