diff options
author | Richard Levitte <levitte@openssl.org> | 2000-09-14 09:19:19 +0000 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2000-09-14 09:19:19 +0000 |
commit | 7abee0cedf45f25027d14a3d439d0e1874c5bc77 (patch) | |
tree | 7c552c7a374017312f6f6d9abadb771147473980 | |
parent | 6dcbaf585709aae072f8b18236126fc3ca38a6ed (diff) |
Jeffrey Altman convinced me this patch was really needed, or there is
no way to make sure GetCursorInfo will give us a valid answer.
-rw-r--r-- | crypto/rand/rand_win.c | 33 |
1 files changed, 24 insertions, 9 deletions
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) |