authorgravatar for carmen@dotcarmen.devCarmen <carmen@dotcarmen.dev> 2026-01-24 13:00:38+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-27 00:05:42+01:00
log5e9c484745b2a2dd997d1870b70f0303fa8ae2c7
tree909f75a0e7eee4cd9c2a6b84749cd0f6291d5156
parent97986184ca67abdb877bda39707dd129ed6473ae

std.Io.Reader.takeStruct: dont assert buffer capacity is sizeOf(T)


1 files changed, 2 insertions(+), 3 deletions(-)

lib/std/Io/Reader.zig+2-3
...@@ -1192,8 +1192,6 @@ pub fn peekStructPointer(r: *Reader, comptime T: type) Error!*align(1) T {...@@ -1192,8 +1192,6 @@ pub fn peekStructPointer(r: *Reader, comptime T: type) Error!*align(1) T {
1192 return @ptrCast(try r.peekArray(@sizeOf(T)));1192 return @ptrCast(try r.peekArray(@sizeOf(T)));
1193}1193}
11941194
1195/// Asserts the buffer was initialized with a capacity at least `@sizeOf(T)`.
1196///
1197/// This function is inline to avoid referencing `std.mem.byteSwapAllFields`1195/// This function is inline to avoid referencing `std.mem.byteSwapAllFields`
1198/// when `endian` is comptime-known and matches the host endianness.1196/// when `endian` is comptime-known and matches the host endianness.
1199///1197///
...@@ -1205,7 +1203,8 @@ pub inline fn takeStruct(r: *Reader, comptime T: type, endian: std.builtin.Endia...@@ -1205,7 +1203,8 @@ pub inline fn takeStruct(r: *Reader, comptime T: type, endian: std.builtin.Endia
1205 .@"struct" => |info| switch (info.layout) {1203 .@"struct" => |info| switch (info.layout) {
1206 .auto => @compileError("ill-defined memory layout"),1204 .auto => @compileError("ill-defined memory layout"),
1207 .@"extern" => {1205 .@"extern" => {
1208 var res = (try r.takeStructPointer(T)).*;1206 var res: T = undefined;
1207 try r.readSliceAll(std.mem.asBytes(&res));
1209 if (native_endian != endian) std.mem.byteSwapAllFields(T, &res);1208 if (native_endian != endian) std.mem.byteSwapAllFields(T, &res);
1210 return res;1209 return res;
1211 },1210 },