aboutsummaryrefslogtreecommitdiffstats
path: root/util-src
diff options
context:
space:
mode:
Diffstat (limited to 'util-src')
-rw-r--r--util-src/crand.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/util-src/crand.c b/util-src/crand.c
index 762f7454..2996b84d 100644
--- a/util-src/crand.c
+++ b/util-src/crand.c
@@ -68,12 +68,22 @@ int Lrandom(lua_State *L) {
* This acts like a read from /dev/urandom with the exception that it
* *does* block if the entropy pool is not yet initialized.
*/
- ret = getrandom(buf, len, 0);
+ int left = len;
+ char *b = buf;
- if(ret < 0) {
- lua_pushstring(L, strerror(errno));
- return lua_error(L);
- }
+ do {
+ ret = getrandom(b, left, 0);
+
+ if(ret < 0) {
+ lua_pushstring(L, strerror(errno));
+ return lua_error(L);
+ }
+
+ b += ret;
+ left -= ret;
+ } while(left > 0);
+
+ ret = len;
#elif defined(WITH_ARC4RANDOM)
arc4random_buf(buf, len);