libmicrohttpd

HTTP/1.x server C library (MHD 1.x, stable)
Log | Files | Refs | Submodules | README | LICENSE

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:
Msrc/microhttpd/test_postprocessor.c | 8++++----
Msrc/microhttpd/test_postprocessor_large.c | 2+-
Msrc/platform/platform_interface.h | 6++++++
Msrc/platform/w32functions.c | 21+++++++++++++++++++++
Msrc/platform/w32functions.h | 7+++++++
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 }