diff options
-rw-r--r-- | src/lj_prng.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/lj_prng.c b/src/lj_prng.c index c24fe630..a8b8b6de 100644 --- a/src/lj_prng.c +++ b/src/lj_prng.c | |||
@@ -107,7 +107,19 @@ static PRGR libfunc_rgr; | |||
107 | #if LJ_TARGET_LINUX | 107 | #if LJ_TARGET_LINUX |
108 | /* Avoid a dependency on glibc 2.25+ and use the getrandom syscall instead. */ | 108 | /* Avoid a dependency on glibc 2.25+ and use the getrandom syscall instead. */ |
109 | #include <sys/syscall.h> | 109 | #include <sys/syscall.h> |
110 | #elif LJ_TARGET_OSX || LJ_TARGET_BSD || LJ_TARGET_SOLARIS || LJ_TARGET_CYGWIN | 110 | #else |
111 | |||
112 | #if LJ_TARGET_OSX | ||
113 | #include <Availability.h> | ||
114 | #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200 || \ | ||
115 | __IPHONE_OS_VERSION_MIN_REQUIRED >= 100000 | ||
116 | #define LJ_TARGET_HAS_GETENTROPY 1 | ||
117 | #endif | ||
118 | #elif LJ_TARGET_BSD || LJ_TARGET_SOLARIS || LJ_TARGET_CYGWIN | ||
119 | #define LJ_TARGET_HAS_GETENTROPY 1 | ||
120 | #endif | ||
121 | |||
122 | #if LJ_TARGET_HAS_GETENTROPY | ||
111 | extern int getentropy(void *buf, size_t len); | 123 | extern int getentropy(void *buf, size_t len); |
112 | #ifdef __ELF__ | 124 | #ifdef __ELF__ |
113 | __attribute__((weak)) | 125 | __attribute__((weak)) |
@@ -115,6 +127,8 @@ extern int getentropy(void *buf, size_t len); | |||
115 | ; | 127 | ; |
116 | #endif | 128 | #endif |
117 | 129 | ||
130 | #endif | ||
131 | |||
118 | /* For the /dev/urandom fallback. */ | 132 | /* For the /dev/urandom fallback. */ |
119 | #include <fcntl.h> | 133 | #include <fcntl.h> |
120 | #include <unistd.h> | 134 | #include <unistd.h> |
@@ -181,7 +195,7 @@ int LJ_FASTCALL lj_prng_seed_secure(PRNGState *rs) | |||
181 | if (syscall(SYS_getrandom, rs->u, sizeof(rs->u), 0) == (long)sizeof(rs->u)) | 195 | if (syscall(SYS_getrandom, rs->u, sizeof(rs->u), 0) == (long)sizeof(rs->u)) |
182 | goto ok; | 196 | goto ok; |
183 | 197 | ||
184 | #elif LJ_TARGET_OSX || LJ_TARGET_BSD || LJ_TARGET_SOLARIS || LJ_TARGET_CYGWIN | 198 | #elif LJ_TARGET_HAS_GETENTROPY |
185 | 199 | ||
186 | #ifdef __ELF__ | 200 | #ifdef __ELF__ |
187 | if (getentropy && getentropy(rs->u, sizeof(rs->u)) == 0) | 201 | if (getentropy && getentropy(rs->u, sizeof(rs->u)) == 0) |