12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #define _DEFAULT_SOURCE
- #include <errno.h>
- #include <unistd.h>
- #include <sys/random.h>
- #include <sys/syscall.h>
- #ifdef __NR_getrandom
- int
- getentropy(void *__buf, size_t __len)
- {
- ssize_t n;
- if (__len > 256U) {
- errno = EIO;
- return (-1);
- }
- again:
- if ((n = getrandom(__buf, __len, 0)) == -1)
- switch (errno) {
- case EAGAIN:
- case EINTR:
- goto again;
- default:
- errno = EIO;
-
- case EFAULT:
- case ENOSYS:
- return (-1);
- }
- if ((size_t)n != __len)
-
- goto again;
- return (0);
- }
- #endif
|