[PATCH] user32: Fix error handling in MapWindowPoints, ClientToScreen and ScreenToClient and add tests for them. (try 3)
Nikolay Sivov
bunglehead at gmail.com
Wed Oct 24 04:41:23 CDT 2012
On 10/24/2012 11:33, Christian Costa wrote:
>
>
> 2012/10/24 Dmitry Timoshkov <dmitry at baikal.ru <mailto:dmitry at baikal.ru>>
>
> Christian Costa <titan.costa at gmail.com
> <mailto:titan.costa at gmail.com>> wrote:
>
> > BOOL WINAPI ClientToScreen( HWND hwnd, LPPOINT lppnt )
> > {
> > + DWORD error = GetLastError();
> > +
> > + if (!hwnd)
> > + {
> > + SetLastError( ERROR_INVALID_WINDOW_HANDLE );
> > + return FALSE;
> > + }
> > +
> > + SetLastError( 0xdeadbeef );
> > MapWindowPoints( hwnd, 0, lppnt, 1 );
> > +
> > + if (GetLastError() != 0xdeadbeef)
> > + return FALSE;
> > +
> > + SetLastError(error);
> > return TRUE;
> > }
>
> As been said before these games with saving/restoring last error value
> are broken.
>
>
> Last time you said wrong so what do you mean by wrong or broken?
> The only way to know if MapWindowPoints fails is to set last error
> first and check it
> after. If I don't restore the previous value, the tests will not pass.
> Of course I can
> arrange the tests but hey. And I can check windows handle here as
> Alexandre said.
If error reporting from MapWindowPoints is not sufficient to use it
somewhere else you can always move its guts to
a separate function and report failure as you want. By the way, it only
fails on invalid window handles I guess, is that right?
If you need this behaviour you have a failing WIN_GetPtr() in this case.
Messing with last error is not a solution obviously,
and I don't see where MapWindowPoints even sets it.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20121024/0ccafc2a/attachment.html>
More information about the wine-devel
mailing list