From 4771ac298b0c692750524cb7e94eaf0b4343ce2b Mon Sep 17 00:00:00 2001 From: fifty-six Date: Sun, 16 Jan 2022 01:44:15 -0500 Subject: [PATCH] std/os/uefi: Simplify packed struct padding and default zero-initialize Beyond adding default zero-initialization, this commit changes undefined initialization to zero, as some cases reserved the padding and on other cases, I've found some systems act strange when giving uninit instead of zero even when it shouldn't be an issue, one example being FileProtocol.Open's attributes, which *should* be ignored when not creating a file, but ended up giving an unrelated error. --- lib/std/os/uefi.zig | 2 -- lib/std/os/uefi/protocols/absolute_pointer_protocol.zig | 8 ++------ lib/std/os/uefi/protocols/edid_override_protocol.zig | 4 +--- lib/std/os/uefi/protocols/hii.zig | 4 ++-- lib/std/os/uefi/protocols/simple_network_protocol.zig | 8 ++------ .../os/uefi/protocols/simple_text_input_ex_protocol.zig | 4 ++-- lib/std/os/uefi/tables/boot_services.zig | 4 +--- 7 files changed, 10 insertions(+), 24 deletions(-) diff --git a/lib/std/os/uefi.zig b/lib/std/os/uefi.zig index 1bceab5b2ace7563205f693287bbd73c0d81fcb7..4644130e7f9a9126845e78d3a897ab01b907063c 100644 --- a/lib/std/os/uefi.zig +++ b/lib/std/os/uefi.zig @@ -98,7 +98,6 @@ pub const Time = extern struct { /// 0 - 59 second: u8, - _pad1: u8, /// 0 - 999999999 nanosecond: u32, @@ -115,7 +114,6 @@ pub const Time = extern struct { /// If true, the time is affected by daylight savings time. adjust_daylight: bool, }, - _pad2: u8, /// Time is to be interpreted as local time pub const unspecified_timezone: i16 = 0x7ff; diff --git a/lib/std/os/uefi/protocols/absolute_pointer_protocol.zig b/lib/std/os/uefi/protocols/absolute_pointer_protocol.zig index ee795692338c3a6ac88e444ed0be43c137d26d6b..11a5008d9a412f9952c5fc40d4619919201d7ccd 100644 --- a/lib/std/os/uefi/protocols/absolute_pointer_protocol.zig +++ b/lib/std/os/uefi/protocols/absolute_pointer_protocol.zig @@ -40,9 +40,7 @@ pub const AbsolutePointerMode = extern struct { attributes: packed struct { supports_alt_active: bool, supports_pressure_as_z: bool, - _pad1: u6, - _pad2: u8, - _pad3: u16, + _pad: u30 = 0, }, }; @@ -53,8 +51,6 @@ pub const AbsolutePointerState = extern struct { active_buttons: packed struct { touch_active: bool, alt_active: bool, - _pad1: u6, - _pad2: u8, - _pad3: u16, + _pad: u30 = 0, }, }; diff --git a/lib/std/os/uefi/protocols/edid_override_protocol.zig b/lib/std/os/uefi/protocols/edid_override_protocol.zig index 8bf848c59abd7e5ec46aaf1b7166c623ba0a8160..9540cdc5d493a516a486100c73a4529f514d07f5 100644 --- a/lib/std/os/uefi/protocols/edid_override_protocol.zig +++ b/lib/std/os/uefi/protocols/edid_override_protocol.zig @@ -26,7 +26,5 @@ pub const EdidOverrideProtocol = extern struct { pub const EdidOverrideProtocolAttributes = packed struct { dont_override: bool, enable_hot_plug: bool, - _pad1: u6, - _pad2: u8, - _pad3: u16, + _pad: u30 = 0, }; diff --git a/lib/std/os/uefi/protocols/hii.zig b/lib/std/os/uefi/protocols/hii.zig index 5e3c23d22ab810bfa0eaedb3c2e2bf029216e762..b0b0418611b88112bc2b4bc515f7195737ef4ab2 100644 --- a/lib/std/os/uefi/protocols/hii.zig +++ b/lib/std/os/uefi/protocols/hii.zig @@ -48,7 +48,7 @@ pub const NarrowGlyph = extern struct { attributes: packed struct { non_spacing: bool, wide: bool, - _pad: u6, + _pad: u6 = 0, }, glyph_col_1: [19]u8, }; @@ -62,7 +62,7 @@ pub const WideGlyph = extern struct { }, glyph_col_1: [19]u8, glyph_col_2: [19]u8, - _pad: [3]u8, + _pad: [3]u8 = [_]u8{0} ** 3, }; pub const HIIStringPackage = extern struct { diff --git a/lib/std/os/uefi/protocols/simple_network_protocol.zig b/lib/std/os/uefi/protocols/simple_network_protocol.zig index 01e5986c2d077b34b1d26497c54aad5b5d3ccbcc..283d944d3498bfb33ce320c00881e8c3a5418fcd 100644 --- a/lib/std/os/uefi/protocols/simple_network_protocol.zig +++ b/lib/std/os/uefi/protocols/simple_network_protocol.zig @@ -126,9 +126,7 @@ pub const SimpleNetworkReceiveFilter = packed struct { receive_broadcast: bool, receive_promiscuous: bool, receive_promiscuous_multicast: bool, - _pad1: u3 = undefined, - _pad2: u8 = undefined, - _pad3: u16 = undefined, + _pad: u27 = 0, }; pub const SimpleNetworkState = enum(u32) { @@ -171,7 +169,5 @@ pub const SimpleNetworkInterruptStatus = packed struct { transmit_interrupt: bool, command_interrupt: bool, software_interrupt: bool, - _pad1: u4, - _pad2: u8, - _pad3: u16, + _pad: u28 = 0, }; diff --git a/lib/std/os/uefi/protocols/simple_text_input_ex_protocol.zig b/lib/std/os/uefi/protocols/simple_text_input_ex_protocol.zig index d816deb8cbfc064a8fe379b6c2efc39a7c3acc87..fbcebf1121342ecd454f343095702beeeb72bd45 100644 --- a/lib/std/os/uefi/protocols/simple_text_input_ex_protocol.zig +++ b/lib/std/os/uefi/protocols/simple_text_input_ex_protocol.zig @@ -64,14 +64,14 @@ pub const KeyState = extern struct { left_logo_pressed: bool, menu_key_pressed: bool, sys_req_pressed: bool, - _pad1: u21, + _pad: u21 = 0, shift_state_valid: bool, }, key_toggle_state: packed struct { scroll_lock_active: bool, num_lock_active: bool, caps_lock_active: bool, - _pad1: u3, + _pad: u3 = 0, key_state_exposed: bool, toggle_state_valid: bool, }, diff --git a/lib/std/os/uefi/tables/boot_services.zig b/lib/std/os/uefi/tables/boot_services.zig index 7da007b05dc19217c9b5bdb8980c8289a5099733..468aaf4cf7fb3f7a9055a83aa59b9800d8c64b2a 100644 --- a/lib/std/os/uefi/tables/boot_services.zig +++ b/lib/std/os/uefi/tables/boot_services.zig @@ -239,9 +239,7 @@ pub const OpenProtocolAttributes = packed struct { by_child_controller: bool = false, by_driver: bool = false, exclusive: bool = false, - _pad1: u2 = undefined, - _pad2: u8 = undefined, - _pad3: u16 = undefined, + _pad: u26 = 0, }; pub const ProtocolInformationEntry = extern struct { -- 2.54.0