mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-01 16:58:30 +00:00
Fix issues with previous commit
This commit is contained in:
parent
2f48a02b44
commit
a0a404a431
8 changed files with 122 additions and 57 deletions
|
@ -86,19 +86,28 @@ static ssize_t GetRandomBsd(char *p, size_t n, void impl(char *, size_t)) {
|
|||
}
|
||||
}
|
||||
|
||||
static ssize_t GetDevUrandom(char *p, size_t n) {
|
||||
static ssize_t GetDevUrandom(char *p, size_t n, unsigned f) {
|
||||
int fd;
|
||||
int oflags;
|
||||
ssize_t rc;
|
||||
BLOCK_SIGNALS;
|
||||
BLOCK_CANCELATION;
|
||||
fd = sys_openat(AT_FDCWD, "/dev/urandom", O_RDONLY | O_CLOEXEC, 0);
|
||||
const char *dev;
|
||||
BEGIN_CANCELATION_POINT;
|
||||
if (f & GRND_RANDOM) {
|
||||
dev = "/dev/random";
|
||||
} else {
|
||||
dev = "/dev/urandom";
|
||||
}
|
||||
oflags = O_RDONLY | O_CLOEXEC;
|
||||
if (f & GRND_NONBLOCK)
|
||||
oflags |= O_NONBLOCK;
|
||||
fd = sys_openat(AT_FDCWD, dev, oflags, 0);
|
||||
if (fd != -1) {
|
||||
rc = sys_read(fd, p, n);
|
||||
sys_close(fd);
|
||||
} else {
|
||||
rc = -1;
|
||||
}
|
||||
ALLOW_CANCELATION;
|
||||
ALLOW_SIGNALS;
|
||||
END_CANCELATION_POINT;
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -122,7 +131,7 @@ ssize_t __getrandom(void *p, size_t n, unsigned f) {
|
|||
#endif
|
||||
} else {
|
||||
BEGIN_CANCELATION_POINT;
|
||||
rc = GetDevUrandom(p, n);
|
||||
rc = GetDevUrandom(p, n, f);
|
||||
END_CANCELATION_POINT;
|
||||
}
|
||||
return rc;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue