From 5e9c484745b2a2dd997d1870b70f0303fa8ae2c7 Mon Sep 17 00:00:00 2001 From: Carmen Date: Sat, 24 Jan 2026 13:00:38 +0100 Subject: [PATCH] std.Io.Reader.takeStruct: dont assert buffer capacity is sizeOf(T) --- lib/std/Io/Reader.zig | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/std/Io/Reader.zig b/lib/std/Io/Reader.zig index 08df1e99bc9d0ad80c254f66b5aab923dc03f66c..a2b70afc67db4edc9c1a3afed0eb0fe79737d471 100644 --- a/lib/std/Io/Reader.zig +++ b/lib/std/Io/Reader.zig @@ -1192,8 +1192,6 @@ pub fn peekStructPointer(r: *Reader, comptime T: type) Error!*align(1) T { return @ptrCast(try r.peekArray(@sizeOf(T))); } -/// Asserts the buffer was initialized with a capacity at least `@sizeOf(T)`. -/// /// This function is inline to avoid referencing `std.mem.byteSwapAllFields` /// when `endian` is comptime-known and matches the host endianness. /// @@ -1205,7 +1203,8 @@ pub inline fn takeStruct(r: *Reader, comptime T: type, endian: std.builtin.Endia .@"struct" => |info| switch (info.layout) { .auto => @compileError("ill-defined memory layout"), .@"extern" => { - var res = (try r.takeStructPointer(T)).*; + var res: T = undefined; + try r.readSliceAll(std.mem.asBytes(&res)); if (native_endian != endian) std.mem.byteSwapAllFields(T, &res); return res; }, -- 2.54.0