| ... | @@ -1,5 +1,6 @@ | ... | @@ -1,5 +1,6 @@ |
| 1 | const std = @import("std"); | 1 | const std = @import("std"); |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| | 3 | const assert = std.debug.assert; |
| 3 | const mem = std.mem; | 4 | const mem = std.mem; |
| 4 | const Target = std.Target; | 5 | const Target = std.Target; |
| 5 | | 6 | |
| ... | @@ -89,6 +90,8 @@ fn getCpuInfoFromRegistry(core: usize, args: anytype) !void { | ... | @@ -89,6 +90,8 @@ fn getCpuInfoFromRegistry(core: usize, args: anytype) !void { |
| 89 | .DefaultLength = 0, | 90 | .DefaultLength = 0, |
| 90 | }; | 91 | }; |
| 91 | | 92 | |
| | 93 | var tmp_bufs: [fields_info.len][max_value_len]u8 align(@alignOf(std.os.windows.UNICODE_STRING)) = undefined; |
| | 94 | |
| 92 | inline for (fields_info) |field, i| { | 95 | inline for (fields_info) |field, i| { |
| 93 | const ctx: *anyopaque = blk: { | 96 | const ctx: *anyopaque = blk: { |
| 94 | switch (@field(args, field.name).value_type) { | 97 | switch (@field(args, field.name).value_type) { |
| ... | @@ -96,26 +99,20 @@ fn getCpuInfoFromRegistry(core: usize, args: anytype) !void { | ... | @@ -96,26 +99,20 @@ fn getCpuInfoFromRegistry(core: usize, args: anytype) !void { |
| 96 | REG.EXPAND_SZ, | 99 | REG.EXPAND_SZ, |
| 97 | REG.MULTI_SZ, | 100 | REG.MULTI_SZ, |
| 98 | => { | 101 | => { |
| 99 | var buf: [max_value_len / 2]u16 = undefined; | 102 | comptime assert(@sizeOf(std.os.windows.UNICODE_STRING) % 2 == 0); |
| 100 | var unicode = std.os.windows.UNICODE_STRING{ | 103 | const unicode = @ptrCast(*std.os.windows.UNICODE_STRING, &tmp_bufs[i]); |
| | 104 | unicode.* = .{ |
| 101 | .Length = 0, | 105 | .Length = 0, |
| 102 | .MaximumLength = max_value_len, | 106 | .MaximumLength = max_value_len - @sizeOf(std.os.windows.UNICODE_STRING), |
| 103 | .Buffer = &buf, | 107 | .Buffer = @ptrCast([*]u16, tmp_bufs[i][@sizeOf(std.os.windows.UNICODE_STRING)..]), |
| 104 | }; | 108 | }; |
| 105 | break :blk &unicode; | 109 | break :blk unicode; |
| 106 | }, | 110 | }, |
| 107 | | 111 | |
| 108 | REG.DWORD, | 112 | REG.DWORD, |
| 109 | REG.DWORD_BIG_ENDIAN, | 113 | REG.DWORD_BIG_ENDIAN, |
| 110 | => { | 114 | REG.QWORD, |
| 111 | var buf: [4]u8 = undefined; | 115 | => break :blk &tmp_bufs[i], |
| 112 | break :blk &buf; | | |
| 113 | }, | | |
| 114 | | | |
| 115 | REG.QWORD => { | | |
| 116 | var buf: [8]u8 = undefined; | | |
| 117 | break :blk &buf; | | |
| 118 | }, | | |
| 119 | | 116 | |
| 120 | else => unreachable, | 117 | else => unreachable, |
| 121 | } | 118 | } |