Jacek Caban : gdi32: Support NULL prev_value in NtGdiGetAndSetDCDword.

Alexandre Julliard julliard at winehq.org
Thu Sep 9 15:42:31 CDT 2021


Module: wine
Branch: master
Commit: bf4cdfad5be250e4fc34441da3133e96a92c04fb
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=bf4cdfad5be250e4fc34441da3133e96a92c04fb

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Sep  9 14:01:47 2021 +0200

gdi32: Support NULL prev_value in NtGdiGetAndSetDCDword.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/gdi32/dc.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c
index 4ed09e91eb1..ae6119529f5 100644
--- a/dlls/gdi32/dc.c
+++ b/dlls/gdi32/dc.c
@@ -830,6 +830,7 @@ BOOL WINAPI NtGdiGetAndSetDCDword( HDC hdc, UINT method, DWORD value, DWORD *pre
 {
     PHYSDEV physdev;
     BOOL ret = TRUE;
+    DWORD prev;
     DC *dc;
 
     if (!(dc = get_dc_ptr( hdc ))) return 0;
@@ -837,36 +838,36 @@ BOOL WINAPI NtGdiGetAndSetDCDword( HDC hdc, UINT method, DWORD value, DWORD *pre
     switch (method)
     {
     case NtGdiSetMapMode:
-        *prev_value = dc->attr->map_mode;
+        prev = dc->attr->map_mode;
         ret = set_map_mode( dc, value );
         break;
 
     case NtGdiSetBkColor:
-        *prev_value = dc->attr->background_color;
+        prev = dc->attr->background_color;
         set_bk_color( dc, value );
         break;
 
     case NtGdiSetTextColor:
-        *prev_value = dc->attr->text_color;
+        prev = dc->attr->text_color;
         set_text_color( dc, value );
         break;
 
     case NtGdiSetDCBrushColor:
         physdev = GET_DC_PHYSDEV( dc, pSetDCBrushColor );
-        *prev_value = dc->attr->brush_color;
+        prev = dc->attr->brush_color;
         value = physdev->funcs->pSetDCBrushColor( physdev, value );
         if (value != CLR_INVALID) dc->attr->brush_color = value;
         break;
 
     case NtGdiSetDCPenColor:
         physdev = GET_DC_PHYSDEV( dc, pSetDCPenColor );
-        *prev_value = dc->attr->pen_color;
+        prev = dc->attr->pen_color;
         value = physdev->funcs->pSetDCPenColor( physdev, value );
         if (value != CLR_INVALID) dc->attr->pen_color = value;
         break;
 
     case NtGdiSetGraphicsMode:
-        if (prev_value) *prev_value = dc->attr->graphics_mode;
+        prev = dc->attr->graphics_mode;
         ret = set_graphics_mode( dc, value );
         break;
 
@@ -877,7 +878,9 @@ BOOL WINAPI NtGdiGetAndSetDCDword( HDC hdc, UINT method, DWORD value, DWORD *pre
     }
 
     release_dc_ptr( dc );
-    return ret;
+    if (!ret || !prev_value) return FALSE;
+    *prev_value = prev;
+    return TRUE;
 }
 
 




More information about the wine-cvs mailing list