]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[Core] Introduce SWITCH_RAND_MAX to switch_rand() 2544/head
authorAndrey Volk <andywolk@gmail.com>
Mon, 29 Jul 2024 18:50:13 +0000 (21:50 +0300)
committerAndrey Volk <andywolk@gmail.com>
Mon, 29 Jul 2024 19:26:27 +0000 (22:26 +0300)
src/include/switch_types.h
src/switch_utils.c

index f8ae00790d97c10df9f10c383c4e3b3ff3e1077b..c4c9131bd6cffc2083f5fdd074d048d158a1b4f7 100644 (file)
@@ -599,6 +599,13 @@ SWITCH_DECLARE_DATA extern switch_filenames SWITCH_GLOBAL_filenames;
 
 #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
index 64577d3997d29a03dbbe372a907179efdd2a8ff0..90c5de059a5d5064687bcee4cceaddd1343ebff2 100644 (file)
@@ -4835,8 +4835,8 @@ SWITCH_DECLARE(int) switch_rand(void)
 
        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;
@@ -4865,8 +4865,8 @@ SWITCH_DECLARE(int) switch_rand(void)
        
        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