Implement getentropy for Cygwin
* miscfuncs.cc (getentropy): Move fhandler_dev_random::crypt_gen_random here and rename to getentropy. Fix type and return values to match getentropy requirements. * miscfuncs.h (getentropy): Add prototype. * fhandler.h (fhandler_dev_random::crypt_gen_random): Remove prototype. * fhandler_random.cc (fhandler_dev_random::crypt_gen_random): Drop. (fhandler_dev_random::write): Use getentropy instead. (fhandler_dev_random::read): Ditto. * fhandler_socket.cc (fhandler_socket::af_local_set_secret): Ditto. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
@@ -236,6 +236,25 @@ check_iovec (const struct iovec *iov, int iovcnt, bool forwrite)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* There's a bug in ntsecapi.h (Mingw as well as MSFT). SystemFunction036
|
||||
is, in fact, a WINAPI function, but it's not defined as such. Therefore
|
||||
we have to do it correctly here. */
|
||||
#define RtlGenRandom SystemFunction036
|
||||
extern "C" BOOLEAN WINAPI RtlGenRandom (PVOID, ULONG);
|
||||
|
||||
/* Used by arc2random, fhandler_socket and fhandler_random. */
|
||||
extern "C" int
|
||||
getentropy (void *ptr, size_t len)
|
||||
{
|
||||
if (!RtlGenRandom (ptr, len))
|
||||
{
|
||||
debug_printf ("%E = RtlGenRandom()");
|
||||
set_errno (EIO);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 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