From f45224457687a55aa885aca8e7300f1fbf0af59b Mon Sep 17 00:00:00 2001 From: Yorhel Date: Thu, 23 Oct 2025 11:26:59 +0200 Subject: [PATCH] Fix infinite loop when reading config file on Zig 0.15.2 Works around Zig issue https://github.com/ziglang/zig/issues/25664 Fixes #266 --- src/util.zig | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/util.zig b/src/util.zig index e2090fb..b9b6fea 100644 --- a/src/util.zig +++ b/src/util.zig @@ -231,9 +231,18 @@ pub const LineReader = if (@hasDecl(std.io, "bufferedReader")) struct { } pub fn read(s: *@This()) !?[]u8 { - return s.rd.interface.takeDelimiterExclusive('\n') catch |err| switch (err) { - error.EndOfStream => null, + // Avoid takeDelimiterExclusive() for now, it's bugged in 0.15.2: https://github.com/ziglang/zig/issues/25664 + const r = &s.rd.interface; + const result = r.peekDelimiterInclusive('\n') catch |err| switch (err) { + error.EndOfStream => { + const remaining = r.buffer[r.seek..r.end]; + if (remaining.len == 0) return null; + r.toss(remaining.len); + return remaining; + }, else => |e| return e, }; + r.toss(result.len); + return result[0 .. result.len - 1]; } };