remove LFS64 symbol aliases; replace with dynamic linker remapping
[musl] / src / misc / getentropy.c
1 #define _BSD_SOURCE
2 #include <unistd.h>
3 #include <sys/random.h>
4 #include <pthread.h>
5 #include <errno.h>
6
7 int getentropy(void *buffer, size_t len)
8 {
9         int cs, ret = 0;
10         char *pos = buffer;
11
12         if (len > 256) {
13                 errno = EIO;
14                 return -1;
15         }
16
17         pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
18
19         while (len) {
20                 ret = getrandom(pos, len, 0);
21                 if (ret < 0) {
22                         if (errno == EINTR) continue;
23                         else break;
24                 }
25                 pos += ret;
26                 len -= ret;
27                 ret = 0;
28         }
29
30         pthread_setcancelstate(cs, 0);
31
32         return ret;
33 }