rand_win.c: handle GetTickCount wrap-around.

This commit is contained in:
Andy Polyakov 2010-01-19 13:48:18 +00:00
parent 91fdacb2c3
commit 7a6e0901ff

View file

@ -463,7 +463,7 @@ int RAND_poll(void)
PROCESSENTRY32 p; PROCESSENTRY32 p;
THREADENTRY32 t; THREADENTRY32 t;
MODULEENTRY32 m; MODULEENTRY32 m;
DWORD stoptime = 0; DWORD starttime = 0;
snap = (CREATETOOLHELP32SNAPSHOT) snap = (CREATETOOLHELP32SNAPSHOT)
GetProcAddress(kernel, "CreateToolhelp32Snapshot"); GetProcAddress(kernel, "CreateToolhelp32Snapshot");
@ -496,7 +496,7 @@ int RAND_poll(void)
*/ */
ZeroMemory(&hlist, sizeof(HEAPLIST32)); ZeroMemory(&hlist, sizeof(HEAPLIST32));
hlist.dwSize = sizeof(HEAPLIST32); hlist.dwSize = sizeof(HEAPLIST32);
if (good) stoptime = GetTickCount() + MAXDELAY; if (good) starttime = GetTickCount();
#ifdef _MSC_VER #ifdef _MSC_VER
if (heaplist_first(handle, &hlist)) if (heaplist_first(handle, &hlist))
{ {
@ -536,7 +536,7 @@ int RAND_poll(void)
ex_cnt_limit--; ex_cnt_limit--;
} }
} while (heaplist_next(handle, &hlist) } while (heaplist_next(handle, &hlist)
&& GetTickCount() < stoptime && (GetTickCount()-starttime)<MAXDELAY
&& ex_cnt_limit > 0); && ex_cnt_limit > 0);
} }
@ -559,7 +559,7 @@ int RAND_poll(void)
&& --entrycnt > 0); && --entrycnt > 0);
} }
} while (heaplist_next(handle, &hlist) } while (heaplist_next(handle, &hlist)
&& GetTickCount() < stoptime); && (GetTickCount()-starttime)<MAXDELAY);
} }
#endif #endif
@ -570,11 +570,11 @@ int RAND_poll(void)
*/ */
p.dwSize = sizeof(PROCESSENTRY32); p.dwSize = sizeof(PROCESSENTRY32);
if (good) stoptime = GetTickCount() + MAXDELAY; if (good) starttime = GetTickCount();
if (process_first(handle, &p)) if (process_first(handle, &p))
do do
RAND_add(&p, p.dwSize, 9); RAND_add(&p, p.dwSize, 9);
while (process_next(handle, &p) && GetTickCount() < stoptime); while (process_next(handle, &p) && (GetTickCount()-starttime)<MAXDELAY);
/* thread walking */ /* thread walking */
/* THREADENTRY32 contains 6 fields that will change /* THREADENTRY32 contains 6 fields that will change
@ -582,11 +582,11 @@ int RAND_poll(void)
* 1 byte of entropy. * 1 byte of entropy.
*/ */
t.dwSize = sizeof(THREADENTRY32); t.dwSize = sizeof(THREADENTRY32);
if (good) stoptime = GetTickCount() + MAXDELAY; if (good) starttime = GetTickCount();
if (thread_first(handle, &t)) if (thread_first(handle, &t))
do do
RAND_add(&t, t.dwSize, 6); RAND_add(&t, t.dwSize, 6);
while (thread_next(handle, &t) && GetTickCount() < stoptime); while (thread_next(handle, &t) && (GetTickCount()-starttime)<MAXDELAY);
/* module walking */ /* module walking */
/* MODULEENTRY32 contains 9 fields that will change /* MODULEENTRY32 contains 9 fields that will change
@ -594,12 +594,12 @@ int RAND_poll(void)
* 1 byte of entropy. * 1 byte of entropy.
*/ */
m.dwSize = sizeof(MODULEENTRY32); m.dwSize = sizeof(MODULEENTRY32);
if (good) stoptime = GetTickCount() + MAXDELAY; if (good) starttime = GetTickCount();
if (module_first(handle, &m)) if (module_first(handle, &m))
do do
RAND_add(&m, m.dwSize, 9); RAND_add(&m, m.dwSize, 9);
while (module_next(handle, &m) while (module_next(handle, &m)
&& (GetTickCount() < stoptime)); && (GetTickCount()-starttime)<MAXDELAY);
if (close_snap) if (close_snap)
close_snap(handle); close_snap(handle);
else else