mirror of
https://github.com/ziglang/zig.git
synced 2025-12-29 09:33:18 +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);
|
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);
|
const fd = try openZ("/dev/urandom", .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
|
||||||
defer close(fd);
|
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)) {
|
if (!S.ISCHR(st.mode)) {
|
||||||
return error.NoDevice;
|
return error.NoDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
const file: fs.File = .{ .handle = fd };
|
var i: usize = 0;
|
||||||
var file_reader = file.readerStreaming(&.{});
|
while (i < buf.len) {
|
||||||
file_reader.interface.readSliceAll(buf) catch return error.Unexpected;
|
i += read(fd, buf[i..]) catch return error.Unexpected;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Causes abnormal process termination.
|
/// Causes abnormal process termination.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user