commit 93ed5e5d6665a8f7c5a442b21cc057b89fa26128
parent 8b28e693b25992174be3e865ea444414713b27ec
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date: Tue, 18 Feb 2014 18:39:43 +0000
Implement MHD_W32_random(), replace RANDOM() -> MHD_random_()
Diffstat:
5 files changed, 39 insertions(+), 5 deletions(-)
diff --git a/src/microhttpd/test_postprocessor.c b/src/microhttpd/test_postprocessor.c
@@ -141,7 +141,7 @@ test_urlencoding ()
size = strlen (URL_DATA);
while (i < size)
{
- delta = 1 + RANDOM () % (size - i);
+ delta = 1 + MHD_random_ () % (size - i);
MHD_post_process (pp, &URL_DATA[i], delta);
i += delta;
}
@@ -250,7 +250,7 @@ test_multipart ()
size = strlen (FORM_DATA);
while (i < size)
{
- delta = 1 + RANDOM () % (size - i);
+ delta = 1 + MHD_random_ () % (size - i);
MHD_post_process (pp, &FORM_DATA[i], delta);
i += delta;
}
@@ -285,7 +285,7 @@ test_nested_multipart ()
size = strlen (FORM_NESTED_DATA);
while (i < size)
{
- delta = 1 + RANDOM () % (size - i);
+ delta = 1 + MHD_random_ () % (size - i);
MHD_post_process (pp, &FORM_NESTED_DATA[i], delta);
i += delta;
}
@@ -319,7 +319,7 @@ test_empty_value ()
size = strlen (URL_EMPTY_VALUE_DATA);
while (i < size)
{
- delta = 1 + RANDOM () % (size - i);
+ delta = 1 + MHD_random_ () % (size - i);
MHD_post_process (pp, &URL_EMPTY_VALUE_DATA[i], delta);
i += delta;
}
diff --git a/src/microhttpd/test_postprocessor_large.c b/src/microhttpd/test_postprocessor_large.c
@@ -83,7 +83,7 @@ test_simple_large ()
size = strlen (data);
while (i < size)
{
- delta = 1 + RANDOM () % (size - i);
+ delta = 1 + MHD_random_ () % (size - i);
MHD_post_process (pp, &data[i], delta);
i += delta;
}
diff --git a/src/platform/platform_interface.h b/src/platform/platform_interface.h
@@ -133,4 +133,10 @@
#define MHD_INVALID_PIPE_ MHD_INVALID_SOCKET
#endif
+#if !defined(_WIN32) || defined(__CYGWIN__)
+#define MHD_random_() random()
+#else
+#define MHD_random_() MHD_W32_random()
+#endif
+
#endif // MHD_PLATFORM_INTERFACE_H
diff --git a/src/platform/w32functions.c b/src/platform/w32functions.c
@@ -27,6 +27,8 @@
#include <errno.h>
#include <winsock2.h>
#include <string.h>
+#include <stdint.h>
+#include <time.h>
/**
* Return errno equivalent of last winsock error
@@ -618,3 +620,22 @@ int MHD_W32_pair_of_sockets_(SOCKET sockets_pair[2])
sockets_pair[1] = INVALID_SOCKET;
return -1;
}
+
+/**
+ * Static variable used by pseudo random number generator
+ */
+static int32_t rnd_val = 0;
+/**
+ * Generate 31-bit pseudo random number.
+ * Function initialize itself at first call to current time.
+ * @return 31-bit pseudo random number.
+ */
+int MHD_W32_random(void)
+{
+ if (0 == rnd_val)
+ rnd_val = (int32_t)time(NULL);
+ /* stolen from winsup\cygwin\random.cc */
+ rnd_val = (16807 * (rnd_val % 127773) - 2836 * (rnd_val / 127773))
+ & 0x7fffffff;
+ return (int)rnd_val;
+}
diff --git a/src/platform/w32functions.h b/src/platform/w32functions.h
@@ -177,6 +177,13 @@ void MHD_W32_set_last_winsock_error_(int errnum);
* @return zero on success, -1 otherwise
*/
int MHD_W32_pair_of_sockets_(SOCKET sockets_pair[2]);
+/**
+ * Generate 31-bit pseudo random number.
+ * Function initialize itself at first call to current time.
+ * @return 31-bit pseudo random number.
+ */
+_MHD_EXTERN int MHD_W32_random(void); /* must be exported for "make check" tests */
+ /* TODO: exclude from exports */
#ifdef __cplusplus
}