mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
std.posix: untangle getRandomBytesDevURandom from Io.Reader
This commit is contained in:
parent
97bde94e36
commit
894cb5a1fc
@ -666,18 +666,22 @@ pub fn getrandom(buffer: []u8) GetRandomError!void {
|
||||
return getRandomBytesDevURandom(buffer);
|
||||
}
|
||||
|
||||
fn getRandomBytesDevURandom(buf: []u8) !void {
|
||||
fn getRandomBytesDevURandom(buf: []u8) GetRandomError!void {
|
||||
const fd = try openZ("/dev/urandom", .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
|
||||
defer close(fd);
|
||||
|
||||
const st = try fstat(fd);
|
||||
const st = fstat(fd) catch |err| switch (err) {
|
||||
error.Streaming => return error.NoDevice,
|
||||
else => |e| return e,
|
||||
};
|
||||
if (!S.ISCHR(st.mode)) {
|
||||
return error.NoDevice;
|
||||
}
|
||||
|
||||
const file: fs.File = .{ .handle = fd };
|
||||
var file_reader = file.readerStreaming(&.{});
|
||||
file_reader.interface.readSliceAll(buf) catch return error.Unexpected;
|
||||
var i: usize = 0;
|
||||
while (i < buf.len) {
|
||||
i += read(fd, buf[i..]) catch return error.Unexpected;
|
||||
}
|
||||
}
|
||||
|
||||
/// Causes abnormal process termination.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user