zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 894cb5a1fc51e457065d2ec8820863a00e7d96e4 (tree)
parent 97bde94e360cc95206edca478a9dbbc5a0e75264
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Sun, 19 Oct 2025 22:31:52 -0700

std.posix: untangle getRandomBytesDevURandom from Io.Reader

Diffstat:
Mlib/std/posix.zig | 14+++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/lib/std/posix.zig b/lib/std/posix.zig @@ -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.