diff --git a/src/xpdev/genwrap.c b/src/xpdev/genwrap.c index 560eb71c0adb462ab4d1aa56de9d5916f95707a6..bfa2f60dbdb9b681cedc34df9690049137dd2167 100644 --- a/src/xpdev/genwrap.c +++ b/src/xpdev/genwrap.c @@ -236,9 +236,7 @@ char* strrev(char* str) /****************************************************************************/ unsigned DLLCALL xp_randomize(void) { - unsigned thread_id = (unsigned)GetCurrentThreadId(); - unsigned process_id = (unsigned)GetCurrentProcessId(); - unsigned seed = time(NULL) ^ BYTE_SWAP_INT(thread_id) ^ process_id; + unsigned seed=~0; #if defined(HAS_DEV_RANDOM) && defined(RANDOM_DEV) int rf; @@ -247,6 +245,16 @@ unsigned DLLCALL xp_randomize(void) read(rf, &seed, sizeof(seed)); close(rf); } +#else + unsigned curtime = (unsigned)time(NULL); + unsigned process_id = (unsigned)GetCurrentProcessId(); + + seed = curtime ^ BYTE_SWAP_INT(process_id); + + #if defined(_WIN32) || defined(GetCurrentThreadId) + seed ^= (unsigned)GetCurrentThreadId(); + #endif + #endif srand(seed); diff --git a/src/xpdev/genwrap.h b/src/xpdev/genwrap.h index 7bf052d80b16ab2d28ff6313c1c0966a039be61e..90770d894e41acd893b50765f094b139627dcea2 100644 --- a/src/xpdev/genwrap.h +++ b/src/xpdev/genwrap.h @@ -48,11 +48,16 @@ #include <sys/time.h> /* struct timeval */ #include <strings.h> /* strcasecmp() */ #include <unistd.h> /* usleep */ + + /* Simple Win32 function equivalents */ + #define GetCurrentProcessId() getpid() + #ifdef _THREAD_SAFE #include <pthread.h>/* Check for GNU PTH libs */ #ifdef _PTH_PTHREAD_H_ #include <pth.h> #endif + #define GetCurrentThreadId() pthread_self() #endif #elif defined(_WIN32) #include <process.h> /* getpid() */