aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2022-12-02 10:20:05 +0100
committerAndrew Kelley <andrew@ziglang.org>2022-12-02 12:24:15 -0500
commit5eaacf1ce9b2b99f1f29bf51a663291329a1793e (patch)
treed64ba2a49b7ce2c283f70d7dd997c20581b18573
parent16dc86a49e1e92d036d196be40a4fc073314bcf7 (diff)
downloadzig-5eaacf1ce9b2b99f1f29bf51a663291329a1793e.tar.gz
zig-5eaacf1ce9b2b99f1f29bf51a663291329a1793e.zip
windows: use array of tmp bufs as backing store for input memory to ntdll
-rw-r--r--lib/std/zig/system/windows.zig25
1 files changed, 11 insertions, 14 deletions
diff --git a/lib/std/zig/system/windows.zig b/lib/std/zig/system/windows.zig
index af6e9ef665..9dded69ca0 100644
--- a/lib/std/zig/system/windows.zig
+++ b/lib/std/zig/system/windows.zig
@@ -1,5 +1,6 @@
const std = @import("std");
const builtin = @import("builtin");
+const assert = std.debug.assert;
const mem = std.mem;
const Target = std.Target;
@@ -89,6 +90,8 @@ fn getCpuInfoFromRegistry(core: usize, args: anytype) !void {
.DefaultLength = 0,
};
+ var tmp_bufs: [fields_info.len][max_value_len]u8 align(@alignOf(std.os.windows.UNICODE_STRING)) = undefined;
+
inline for (fields_info) |field, i| {
const ctx: *anyopaque = blk: {
switch (@field(args, field.name).value_type) {
@@ -96,26 +99,20 @@ fn getCpuInfoFromRegistry(core: usize, args: anytype) !void {
REG.EXPAND_SZ,
REG.MULTI_SZ,
=> {
- var buf: [max_value_len / 2]u16 = undefined;
- var unicode = std.os.windows.UNICODE_STRING{
+ comptime assert(@sizeOf(std.os.windows.UNICODE_STRING) % 2 == 0);
+ const unicode = @ptrCast(*std.os.windows.UNICODE_STRING, &tmp_bufs[i]);
+ unicode.* = .{
.Length = 0,
- .MaximumLength = max_value_len,
- .Buffer = &buf,
+ .MaximumLength = max_value_len - @sizeOf(std.os.windows.UNICODE_STRING),
+ .Buffer = @ptrCast([*]u16, tmp_bufs[i][@sizeOf(std.os.windows.UNICODE_STRING)..]),
};
- break :blk &unicode;
+ break :blk unicode;
},
REG.DWORD,
REG.DWORD_BIG_ENDIAN,
- => {
- var buf: [4]u8 = undefined;
- break :blk &buf;
- },
-
- REG.QWORD => {
- var buf: [8]u8 = undefined;
- break :blk &buf;
- },
+ REG.QWORD,
+ => break :blk &tmp_bufs[i],
else => unreachable,
}