mirror of https://git.musl-libc.org/git/musl
Browse Source
based loosely on patch by Hauke Mehrtens; converted to wrap the public API of the underlying getrandom function rather than direct syscalls, so that if/when a fallback implementation of getrandom is added it will automatically get picked up by getentropy too.master
2 changed files with 32 additions and 0 deletions
@ -0,0 +1,31 @@ |
|||
#include <sys/random.h> |
|||
#include <pthread.h> |
|||
#include <errno.h> |
|||
|
|||
int getentropy(void *buffer, size_t len) |
|||
{ |
|||
int cs, ret; |
|||
char *pos = buffer; |
|||
|
|||
if (len > 256) { |
|||
errno = EIO; |
|||
return -1; |
|||
} |
|||
|
|||
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs); |
|||
|
|||
while (len) { |
|||
ret = getrandom(pos, len, 0); |
|||
if (ret < 0) { |
|||
if (errno == EINTR) continue; |
|||
else break; |
|||
} |
|||
pos += ret; |
|||
len -= ret; |
|||
ret = 0; |
|||
} |
|||
|
|||
pthread_setcancelstate(cs, 0); |
|||
|
|||
return ret; |
|||
} |
|||
Loading…
Reference in new issue