authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-08-07 14:21:54-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2019-08-07 14:21:54-07:00
loge6ef00233e77758fb0ae33a9ad52ed9011005e45
treecf7723651556ca6040c3c8e9ce088853d6be6a77
parent8621e3b5bd814005129b58469d93c2499e3d085e
parentf2bef0447a523e6f21ab21e4845aa982a1332572
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #3025 from euantorano/fix/3015-std-os-window-rtlgenrandom

Fix #3015 - fix RtlGenRandom function signature

2 files changed, 13 insertions(+), 4 deletions(-)

std/os/windows.zig+12-3
...@@ -138,10 +138,19 @@ pub const RtlGenRandomError = error{Unexpected};...@@ -138,10 +138,19 @@ pub const RtlGenRandomError = error{Unexpected};
138/// https://github.com/rust-lang-nursery/rand/issues/111138/// https://github.com/rust-lang-nursery/rand/issues/111
139/// https://bugzilla.mozilla.org/show_bug.cgi?id=504270139/// https://bugzilla.mozilla.org/show_bug.cgi?id=504270
140pub fn RtlGenRandom(output: []u8) RtlGenRandomError!void {140pub fn RtlGenRandom(output: []u8) RtlGenRandomError!void {
141 if (advapi32.RtlGenRandom(output.ptr, output.len) == 0) {141 var total_read: usize = 0;
142 switch (kernel32.GetLastError()) {142 var buff: []u8 = output[0..];
143 else => |err| return unexpectedError(err),143 const max_read_size: ULONG = maxInt(ULONG);
144
145 while (total_read < output.len) {
146 const to_read: ULONG = math.min(buff.len, max_read_size);
147
148 if (advapi32.RtlGenRandom(buff.ptr, to_read) == 0) {
149 return unexpectedError(kernel32.GetLastError());
144 }150 }
151
152 total_read += to_read;
153 buff = buff[to_read..];
145 }154 }
146}155}
147156
std/os/windows/advapi32.zig+1-1
...@@ -19,5 +19,5 @@ pub extern "advapi32" stdcallcc fn RegQueryValueExW(...@@ -19,5 +19,5 @@ pub extern "advapi32" stdcallcc fn RegQueryValueExW(
1919
20// RtlGenRandom is known as SystemFunction036 under advapi3220// RtlGenRandom is known as SystemFunction036 under advapi32
21// http://msdn.microsoft.com/en-us/library/windows/desktop/aa387694.aspx */21// http://msdn.microsoft.com/en-us/library/windows/desktop/aa387694.aspx */
22pub extern "advapi32" stdcallcc fn SystemFunction036(output: [*]u8, length: usize) BOOL;22pub extern "advapi32" stdcallcc fn SystemFunction036(output: [*]u8, length: ULONG) BOOL;
23pub const RtlGenRandom = SystemFunction036;23pub const RtlGenRandom = SystemFunction036;