[PATCH v2 2/5] user32: Use user_driver_funcs to expose user driver function from drivers.

Huw Davies huw at codeweavers.com
Thu Nov 11 02:44:58 CST 2021


On Wed, Nov 10, 2021 at 01:33:32PM +0100, Jacek Caban wrote:
> diff --git a/dlls/user32/driver.c b/dlls/user32/driver.c
> index 7b51823014d..ed7cc5c72ba 100644
> --- a/dlls/user32/driver.c
> +++ b/dlls/user32/driver.c
> @@ -59,9 +59,16 @@ static BOOL load_desktop_driver( HWND hwnd, HMODULE *module )
>      size = sizeof(path);
>      if (!RegQueryValueExW( hkey, L"GraphicsDriver", NULL, NULL, (BYTE *)path, &size ))
>      {
> -        if ((ret = !wcscmp( path, L"null" ))) *module = NULL;
> -        else ret = (*module = LoadLibraryW( path )) != NULL;
> -        if (!ret) ERR( "failed to load %s\n", debugstr_w(path) );
> +        if (wcscmp( path, L"null" ))
> +        {
> +            ret = LoadLibraryW( path ) != NULL;
> +            if (!ret) ERR( "failed to load %s\n", debugstr_w(path) );
> +        }
> +        else
> +        {
> +            __wine_set_user_driver( &null_driver, WINE_GDI_DRIVER_VERSION );
> +            ret = TRUE;
> +        }
>          TRACE( "%s %p\n", debugstr_w(path), *module );

This doesn't look quite right as "module" is now unused (I realise it's
eliminated in the next patch, but it would be nice to have this patch
make sense too).

This leads to:
i686-w64-mingw32-gcc -c -o dlls/user32/driver.cross.o dlls/user32/driver.c -Idlls/user32 -Iinclude -Iinclude/msvcrt -I./libs/png \
  -D__WINESRC__ -D_USER32_ -D_WINABLE_ -D_UCRT -D__WINE_PE_BUILD -Wall -fno-strict-aliasing \
  -Wdeclaration-after-statement -Wempty-body -Wignored-qualifiers -Winit-self \
  -Wno-packed-not-aligned -Wshift-overflow=2 -Wstrict-prototypes -Wtype-limits \
  -Wunused-but-set-parameter -Wvla -Wwrite-strings -Wpointer-arith -Wlogical-op -Wabsolute-value \
  -fno-omit-frame-pointer -gdwarf-2 -gstrict-dwarf -g -O2
In file included from dlls/user32/driver.c:27:
dlls/user32/driver.c: In function ‘load_driver’:
include/wine/debug.h:89:5: warning: ‘module’ may be used uninitialized in this function [-Wmaybe-uninitialized]
   89 |     wine_dbg_log( __dbcl, __dbch, __FUNCTION__, args); } } while(0)
      |     ^~~~~~~~~~~~

> diff --git a/dlls/winemac.drv/gdi.c b/dlls/winemac.drv/gdi.c
> index 3148e28afdd..db5cd1b8810 100644
> --- a/dlls/winemac.drv/gdi.c
> +++ b/dlls/winemac.drv/gdi.c
> @@ -57,7 +57,7 @@ static CRITICAL_SECTION_DEBUG critsect_debug =
>  static CRITICAL_SECTION device_data_section = { &critsect_debug, -1, 0, 0, 0, 0 };
>
>  
> -static const struct gdi_dc_funcs macdrv_funcs;
> +static const struct user_driver_funcs macdrv_funcs;
>  
>  /***********************************************************************
>   *              compute_desktop_rect
> @@ -184,7 +184,7 @@ static BOOL CDECL macdrv_CreateDC(PHYSDEV *pdev, LPCWSTR device, LPCWSTR output,
>  
>      if (!physDev) return FALSE;
>  
> -    push_dc_driver(pdev, &physDev->dev, &macdrv_funcs);
> +    push_dc_driver(pdev, &physDev->dev, &macdrv_funcs.dc_funcs);
>      return TRUE;
>  }
>  
> @@ -201,7 +201,7 @@ static BOOL CDECL macdrv_CreateCompatibleDC(PHYSDEV orig, PHYSDEV *pdev)
>  
>      if (!physDev) return FALSE;
>  
> -    push_dc_driver(pdev, &physDev->dev, &macdrv_funcs);
> +    push_dc_driver(pdev, &physDev->dev, &macdrv_funcs.dc_funcs);
>      return TRUE;
>  }

You forgot to change macdrv_get_gdi_driver() to avoid this:

gcc -m32 -c -o dlls/winemac.drv/gdi.o dlls/winemac.drv/gdi.c -Idlls/winemac.drv -Iinclude -D__WINESRC__ -fPIC \
  -fasynchronous-unwind-tables -Wall -pipe -fno-stack-protector -fno-strict-aliasing \
  -Wdeclaration-after-statement -Wempty-body -Wignored-qualifiers -Winit-self -Wno-pragma-pack \
  -Wstrict-prototypes -Wtype-limits -Wvla -Wwrite-strings -Wpointer-arith -gdwarf-2 -gstrict-dwarf \
  -fno-omit-frame-pointer -O2 -g -Wno-deprecated-declarations -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
dlls/winemac.drv/gdi.c:324:12: warning: incompatible pointer types returning 'const struct user_driver_funcs *' from a
      function with result type 'const struct gdi_dc_funcs *' [-Wincompatible-pointer-types]
    return &macdrv_funcs;

(I'd have fixed this up myself, if that had been the only issue).

Thanks,
Huw.



More information about the wine-devel mailing list