Don't use __try+__except unless on VC++
authorDr. Stephen Henson <steve@openssl.org>
Sun, 20 Sep 2009 12:39:32 +0000 (12:39 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Sun, 20 Sep 2009 12:39:32 +0000 (12:39 +0000)
crypto/rand/rand_win.c

index 25a76cf..efe0f89 100644 (file)
@@ -497,6 +497,7 @@ int RAND_poll(void)
                        ZeroMemory(&hlist, sizeof(HEAPLIST32));
                        hlist.dwSize = sizeof(HEAPLIST32);              
                        if (good) stoptime = GetTickCount() + MAXDELAY;
+#ifdef _MSC_VER
                        if (heaplist_first(handle, &hlist))
                                {
                                /*
@@ -539,6 +540,29 @@ int RAND_poll(void)
                                                && ex_cnt_limit > 0);
                                }
 
+#else
+                       if (heaplist_first(handle, &hlist))
+                               {
+                               do
+                                       {
+                                       RAND_add(&hlist, hlist.dwSize, 3);
+                                       hentry.dwSize = sizeof(HEAPENTRY32);
+                                       if (heap_first(&hentry,
+                                               hlist.th32ProcessID,
+                                               hlist.th32HeapID))
+                                               {
+                                               int entrycnt = 80;
+                                               do
+                                                       RAND_add(&hentry,
+                                                               hentry.dwSize, 5);
+                                               while (heap_next(&hentry)
+                                                       && --entrycnt > 0);
+                                               }
+                                       } while (heaplist_next(handle, &hlist) 
+                                               && GetTickCount() < stoptime);
+                               }
+#endif
+
                        /* process walking */
                         /* PROCESSENTRY32 contains 9 fields that will change
                          * with each entry.  Consider each field a source of