diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2022-12-02 10:20:05 +0100 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-12-02 12:24:15 -0500 |
| commit | 5eaacf1ce9b2b99f1f29bf51a663291329a1793e (patch) | |
| tree | d64ba2a49b7ce2c283f70d7dd997c20581b18573 | |
| parent | 16dc86a49e1e92d036d196be40a4fc073314bcf7 (diff) | |
| download | zig-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.zig | 25 |
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, } |
