#define SWITCH_ACCEPTABLE_INTERVAL(_i) (_i && _i <= SWITCH_MAX_INTERVAL && (_i % 10) == 0)
+/* Check if RAND_MAX is a power of 2 minus 1 or in other words all bits set */
+#if ((RAND_MAX) & ((RAND_MAX) + 1)) == 0 && (RAND_MAX) != 0
+#define SWITCH_RAND_MAX RAND_MAX
+#else
+#define SWITCH_RAND_MAX 0x7fff
+#endif
+
typedef enum {
SWITCH_RW_READ,
SWITCH_RW_WRITE
BCryptCloseAlgorithmProvider(hAlgorithm, 0);
- /* Make sure we return from 0 to RAND_MAX */
- return (random_number & 0x7FFF);
+ /* Make sure we return from 0 to SWITCH_RAND_MAX */
+ return (random_number & (SWITCH_RAND_MAX));
#elif defined(__unix__) || defined(__APPLE__)
int random_fd = open("/dev/urandom", O_RDONLY);
ssize_t result;
close(random_fd);
- /* Make sure we return from 0 to RAND_MAX */
- return (random_number & 0x7FFF);
+ /* Make sure we return from 0 to SWITCH_RAND_MAX */
+ return (random_number & (SWITCH_RAND_MAX));
#else
return rand();
#endif