Move getentropy/getrandom into own file
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
		| @@ -14,7 +14,6 @@ details. */ | ||||
| #include <alloca.h> | ||||
| #include <limits.h> | ||||
| #include <sys/param.h> | ||||
| #include <sys/random.h> | ||||
| #include <wchar.h> | ||||
| #include "cygtls.h" | ||||
| #include "ntdll.h" | ||||
| @@ -235,62 +234,6 @@ check_iovec (const struct iovec *iov, int iovcnt, bool forwrite) | ||||
|   return -1; | ||||
| } | ||||
|  | ||||
| extern "C" int | ||||
| getentropy (void *ptr, size_t len) | ||||
| { | ||||
|   /* Per BSD man page: The maximum buffer size permitted is 256 bytes. | ||||
|      If buflen exceeds this, an error of EIO will be indicated. */ | ||||
|   if (len > 256) | ||||
|     { | ||||
|       debug_printf ("len (%U) > 256", len); | ||||
|       set_errno (EIO); | ||||
|       return -1; | ||||
|     } | ||||
|   __try | ||||
|     { | ||||
|       if (!RtlGenRandom (ptr, len)) | ||||
| 	{ | ||||
| 	  debug_printf ("RtlGenRandom() = FALSE"); | ||||
| 	  set_errno (EIO); | ||||
| 	  return -1; | ||||
| 	} | ||||
|     } | ||||
|   __except (EFAULT) | ||||
|     { | ||||
|       return -1; | ||||
|     } | ||||
|   __endtry | ||||
|   return 0; | ||||
| } | ||||
|  | ||||
| extern "C" ssize_t | ||||
| getrandom (void *ptr, size_t len, unsigned int flags) | ||||
| { | ||||
|   if (flags & ~(GRND_NONBLOCK | GRND_RANDOM)) | ||||
|     { | ||||
|       debug_printf ("invalid flags: %y", flags); | ||||
|       set_errno (EINVAL); | ||||
|       return -1; | ||||
|     } | ||||
|   /* Max. bytes returned by Linux call. */ | ||||
|   len = MAX (len, (flags & GRND_RANDOM) ? 512 : 33554431); | ||||
|   __try | ||||
|     { | ||||
|       if (!RtlGenRandom (ptr, len)) | ||||
| 	{ | ||||
| 	  debug_printf ("RtlGenRandom() = FALSE"); | ||||
| 	  set_errno (EIO); | ||||
| 	  return -1; | ||||
| 	} | ||||
|     } | ||||
|   __except (EFAULT) | ||||
|     { | ||||
|       return -1; | ||||
|     } | ||||
|   __endtry | ||||
|   return len; | ||||
| } | ||||
|  | ||||
| /* Try hard to schedule another thread.   | ||||
|    Remember not to call this in a lock condition or you'll potentially | ||||
|    suffer starvation.  */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user