From bb6a77afa328f16568a41b26de75f255dcfc9daf Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 13 Sep 2014 16:31:03 +0300 Subject: [PATCH] grand: Only use rand_s() when targetting Visual Studio >= 2005 It did not exist before. Fall back to the current time plus process id on older targets. This makes GLib work again on Windows XP. https://bugzilla.gnome.org/show_bug.cgi?id=736458 --- glib/grand.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/glib/grand.c b/glib/grand.c index 6262cd2..ac1053d 100644 --- a/glib/grand.c +++ b/glib/grand.c @@ -56,6 +56,7 @@ #ifdef G_OS_WIN32 #include +#include /* For getpid() */ #endif /** @@ -261,10 +262,23 @@ g_rand_new (void) seed[3] = getppid (); } #else /* G_OS_WIN32 */ + /* rand_s() is only available since Visual Studio 2005 */ +#if defined(_MSC_VER) && _MSC_VER >= 1400 gint i; for (i = 0; i < G_N_ELEMENTS (seed); i++) rand_s (&seed[i]); +#else +#warning Using insecure seed for random number generation because of missing rand_s() in Windows XP + GTimeVal now; + + g_get_current_time (&now); + seed[0] = now.tv_sec; + seed[1] = now.tv_usec; + seed[2] = getpid (); + seed[3] = 0; +#endif + #endif return g_rand_new_with_seed_array (seed, 4); -- 2.7.4