commit 5e9c484745b2a2dd997d1870b70f0303fa8ae2c7 (tree)
parent 97986184ca67abdb877bda39707dd129ed6473ae
Author: Carmen <carmen@dotcarmen.dev>
Date: Sat, 24 Jan 2026 13:00:38 +0100
std.Io.Reader.takeStruct: dont assert buffer capacity is sizeOf(T)
Diffstat:
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git 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;
},