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