From 4318aeb6e24e89245917e9b011892b944c26bea3 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Tue, 26 May 2026 21:33:21 -0700 Subject: [PATCH] Readable added readUntilDelimiterOrEofAlloc --- AnyReadable.zig | 1 + buffered_reader.zig | 1 + fixed_buffer_stream.zig | 1 + nio.zig | 10 ++++++++++ 4 files changed, 13 insertions(+) diff --git a/AnyReadable.zig b/AnyReadable.zig index e83fd6f433d5d37c581521ce0bff964538374a61..a1caf3ece11fbd97ec7f1b352b8ee28edcf94cd2 100644 --- a/AnyReadable.zig +++ b/AnyReadable.zig @@ -17,6 +17,7 @@ pub const readArray = R.readArray; pub const readByte = R.readByte; pub const readUntilDelimiterArrayList = R.readUntilDelimiterArrayList; pub const readUntilDelimiterAlloc = R.readUntilDelimiterAlloc; +pub const readUntilDelimiterOrEofAlloc = R.readUntilDelimiterOrEofAlloc; pub const readUntilDelimitersBuf = R.readUntilDelimitersBuf; pub const readUntilDelimitersArrayList = R.readUntilDelimitersArrayList; pub const readAlloc = R.readAlloc; diff --git a/buffered_reader.zig b/buffered_reader.zig index c4831041804a1d4b989fed147155f625f923b7e3..9c49b40a0a088fd7c681bf12c58cffe4b1d635f3 100644 --- a/buffered_reader.zig +++ b/buffered_reader.zig @@ -28,6 +28,7 @@ pub fn BufferedReader(comptime buffer_size: usize, comptime ReaderType: type) ty pub const readByte = R.readByte; pub const readUntilDelimiterArrayList = R.readUntilDelimiterArrayList; pub const readUntilDelimiterAlloc = R.readUntilDelimiterAlloc; + pub const readUntilDelimiterOrEofAlloc = R.readUntilDelimiterOrEofAlloc; pub const readUntilDelimitersBuf = R.readUntilDelimitersBuf; pub const readUntilDelimitersArrayList = R.readUntilDelimitersArrayList; pub const readAlloc = R.readAlloc; diff --git a/fixed_buffer_stream.zig b/fixed_buffer_stream.zig index 82b1f100de7a4c282ffb4d187c57bb3796b86d22..268b3942d8f02d7502c6181a0f8587d983f18204 100644 --- a/fixed_buffer_stream.zig +++ b/fixed_buffer_stream.zig @@ -36,6 +36,7 @@ pub fn FixedBufferStream(comptime Buffer: type) type { pub const readByte = R.readByte; pub const readUntilDelimiterArrayList = R.readUntilDelimiterArrayList; pub const readUntilDelimiterAlloc = R.readUntilDelimiterAlloc; + pub const readUntilDelimiterOrEofAlloc = R.readUntilDelimiterOrEofAlloc; pub const readUntilDelimitersBuf = R.readUntilDelimitersBuf; pub const readUntilDelimitersArrayList = R.readUntilDelimitersArrayList; pub const readAlloc = R.readAlloc; diff --git a/nio.zig b/nio.zig index cc002e0db93ed31e14b258ab25d30359d2417a48..93d72eab7d844cb3def8e8d31ecea41cab5a934c 100644 --- a/nio.zig +++ b/nio.zig @@ -125,6 +125,16 @@ pub fn Readable(T: type, this_kind: enum { _var, _const, _bare }) type { return list.toOwnedSlice(); } + pub fn readUntilDelimiterOrEofAlloc(self: Self, allocator: std.mem.Allocator, needle: u8, max_size: usize) !?[]u8 { + var list: std.ArrayList(u8) = .init(allocator); + defer list.deinit(); + _ = readUntilDelimiterArrayList(self, &list, needle, max_size) catch |err| switch (err) { + error.EndOfStream => return null, + else => |e| return e, + }; + return try list.toOwnedSlice(); + } + /// Returned slice is not suffixed by needle but buffer will contain it. pub fn readUntilDelimitersBuf(self: Self, buffer: []u8, needle: []const u8) ![]u8 { var real_len: usize = 0; -- 2.54.0