From f561f03d31ee056f2cc102bb5d16800b10cebcb0 Mon Sep 17 00:00:00 2001 From: Rafal Harabien Date: Mon, 21 Mar 2011 14:52:08 +0000 Subject: [PATCH] Fix gdi32:SetSysColors apitest svn path=/trunk/; revision=51110 --- .../subsystems/win32/win32k/include/intgdi.h | 4 +- .../subsystems/win32/win32k/ntuser/ntstubs.c | 50 ++++++++++--------- .../win32/win32k/objects/stockobj.c | 5 +- 3 files changed, 31 insertions(+), 28 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/intgdi.h b/reactos/subsystems/win32/win32k/include/intgdi.h index 5e7ca97d68f..c88545cfa4f 100644 --- a/reactos/subsystems/win32/win32k/include/intgdi.h +++ b/reactos/subsystems/win32/win32k/include/intgdi.h @@ -156,8 +156,8 @@ IntGdiCombineTransform(LPXFORM XFormResult, /* Stock objects */ -BOOL FASTCALL -IntSetSysColors(UINT nColors, INT *Elements, COLORREF *Colors); +VOID FASTCALL +IntSetSysColors(UINT nColors, CONST INT *Elements, CONST COLORREF *Colors); HGDIOBJ FASTCALL IntGetSysColorBrush(INT Object); diff --git a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c index 1f7615debf2..7cdc720cd0a 100644 --- a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c +++ b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c @@ -538,36 +538,40 @@ NtUserSetSysColors( IN CONST COLORREF *lpaRgbValues, FLONG Flags) { - DWORD Ret = FALSE; - NTSTATUS Status = STATUS_SUCCESS; - UserEnterExclusive(); - _SEH2_TRY - { - ProbeForRead(lpaElements, + DWORD Ret = TRUE; + NTSTATUS Status = STATUS_SUCCESS; + + if (cElements == 0) + return TRUE; + + UserEnterExclusive(); + _SEH2_TRY + { + ProbeForRead(lpaElements, sizeof(INT), 1); - ProbeForRead(lpaRgbValues, - sizeof(INT), + ProbeForRead(lpaRgbValues, + sizeof(COLORREF), 1); // Developers: We are thread locked and calling gdi. - Ret = IntSetSysColors(cElements, (INT*)lpaElements, (COLORREF*)lpaRgbValues); - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { + IntSetSysColors(cElements, lpaElements, lpaRgbValues); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { Status = _SEH2_GetExceptionCode(); - } - _SEH2_END; - if (!NT_SUCCESS(Status)) - { + } + _SEH2_END; + if (!NT_SUCCESS(Status)) + { SetLastNtError(Status); Ret = FALSE; - } - if (Ret) - { - UserSendNotifyMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0); - } - UserLeave(); - return Ret; + } + if (Ret) + { + UserSendNotifyMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0); + } + UserLeave(); + return Ret; } DWORD diff --git a/reactos/subsystems/win32/win32k/objects/stockobj.c b/reactos/subsystems/win32/win32k/objects/stockobj.c index 02b07dfbf94..ca8a5e744e2 100644 --- a/reactos/subsystems/win32/win32k/objects/stockobj.c +++ b/reactos/subsystems/win32/win32k/objects/stockobj.c @@ -216,8 +216,8 @@ NtGdiGetStockObject(INT Object) return ((Object < 0) || (NB_STOCK_OBJECTS <= Object)) ? NULL : StockObjects[Object]; } -BOOL FASTCALL -IntSetSysColors(UINT nColors, INT *Elements, COLORREF *Colors) +VOID FASTCALL +IntSetSysColors(UINT nColors, CONST INT *Elements, CONST COLORREF *Colors) { UINT i; @@ -234,7 +234,6 @@ IntSetSysColors(UINT nColors, INT *Elements, COLORREF *Colors) Elements++; Colors++; } - return nColors > 0; } HGDIOBJ FASTCALL