From: Richard Levitte Date: Thu, 14 Sep 2000 09:19:19 +0000 (+0000) Subject: Jeffrey Altman convinced me this patch was really needed, or there is X-Git-Tag: OpenSSL-engine-0_9_6-beta2~9^2~25 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=7abee0cedf45f25027d14a3d439d0e1874c5bc77;p=oweals%2Fopenssl.git Jeffrey Altman convinced me this patch was really needed, or there is no way to make sure GetCursorInfo will give us a valid answer. --- diff --git a/crypto/rand/rand_win.c b/crypto/rand/rand_win.c index 82955d8d30..3119200cd8 100644 --- a/crypto/rand/rand_win.c +++ b/crypto/rand/rand_win.c @@ -130,14 +130,27 @@ static void readtimer(void); static void readscreen(void); -/* It appears like PCURSORINFO is only defined when WINVER is 0x0500 and up, - which currently only happens on Win2000. Unfortunately, that is a typedef, - so it's a little bit difficult to detect properly. On the other hand, the - macro CURSOR_SHOWING is defined within the same conditional, so it can be - use to detect the absence of PCURSORINFO. */ +/* It appears like CURSORINFO, PCURSORINFO and LPCURSORINFO are only defined + when WINVER is 0x0500 and up, which currently only happens on Win2000. + Unfortunately, those are typedefs, so they're a little bit difficult to + detect properly. On the other hand, the macro CURSOR_SHOWING is defined + within the same conditional, so it can be use to detect the absence of said + typedefs. */ + #ifndef CURSOR_SHOWING -typedef void *PCURSORINFO; -#endif +/* + * Information about the global cursor. + */ +typedef struct tagCURSORINFO +{ + DWORD cbSize; + DWORD flags; + HCURSOR hCursor; + POINT ptScreenPos; +} CURSORINFO, *PCURSORINFO, *LPCURSORINFO; + +#define CURSOR_SHOWING 0x00000001 +#endif /* CURSOR_SHOWING */ typedef BOOL (WINAPI *CRYPTACQUIRECONTEXT)(HCRYPTPROV *, LPCTSTR, LPCTSTR, DWORD, DWORD); @@ -245,8 +258,10 @@ int RAND_poll(void) if (cursor) { /* cursor position */ - cursor((PCURSORINFO)buf); - RAND_add(buf, sizeof(buf), 0); + PCURSORINFO p = (PCURSORINFO) buf; + p->cbSize = sizeof(CURSORINFO); + if (cursor(p)) + RAND_add(p+sizeof(p->cbSize), p->cbSize-sizeof(p->cbSize), 0); } if (queue)