>From c9a6c3dcc5c4c880f3543961c5f1ad31157b788d Mon Sep 17 00:00:00 2001 From: Andrew Eggenberger Date: Tue, 29 Oct 2019 00:19:28 -0500 Subject: [PATCH] naive getrandom and getentropy --- stdlib/getentropy.c | 13 ++++++++----- stdlib/getrandom.c | 16 +++++++++++----- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/stdlib/getentropy.c b/stdlib/getentropy.c index b73efedff0..ff0731057b 100644 --- a/stdlib/getentropy.c +++ b/stdlib/getentropy.c @@ -1,4 +1,4 @@ -/* Stub for getentropy. +/* Hurdish implementation of getentropy. Copyright (C) 2016-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -24,8 +24,11 @@ int getentropy (void *buffer, size_t length) { - __set_errno (ENOSYS); - return -1; + size_t bytes_read; + bytes_read = getrandom(buffer, length, 0); + if (bytes_read != length){ + __set_errno (EIO); + return -1; + } + return 0; } - -stub_warning (getentropy) diff --git a/stdlib/getrandom.c b/stdlib/getrandom.c index 45234bea17..e2b091cc50 100644 --- a/stdlib/getrandom.c +++ b/stdlib/getrandom.c @@ -1,4 +1,4 @@ -/* Stub for getrandom. +/* Hurdish implementation of getrandom Copyright (C) 2016-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -18,14 +18,20 @@ #include #include +#include +#include /* Write up to LENGTH bytes of randomness starting at BUFFER. Return the number of bytes written, or -1 on error. */ ssize_t getrandom (void *buffer, size_t length, unsigned int flags) { - __set_errno (ENOSYS); - return -1; -} + FILE * random_source; + if (flags & GRND_RANDOM){ + random_source = fopen("/dev/random", "r"); + return fread(buffer, 1, length, random_source); + } -stub_warning (getrandom) + random_source = fopen("/dev/urandom", "r"); + return fread(buffer, 1, length, random_source); +} -- 2.23.0