From c36cac1b0660cb9f0e68071898318a843b8b5b61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Krzy=C5=BCanowski?= Date: Wed, 4 Sep 2024 00:01:58 +0200 Subject: [PATCH] Update Zig Cat Example * Added file open error handling, by catching an error. * Added better streamUntilDelimiter error handling. You can try, but you can't catch. * Use ArrayList's writer to dynamically allocate space needed to read a line. --- zig-cat/src/main.zig | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/zig-cat/src/main.zig b/zig-cat/src/main.zig index 2c384d5..9daf487 100644 --- a/zig-cat/src/main.zig +++ b/zig-cat/src/main.zig @@ -3,24 +3,26 @@ const std = @import("std"); pub fn main() !void { for (std.os.argv[1..]) |file_path_sent| { const file_path = std.mem.span(file_path_sent); - const file = try std.fs.openFileAbsolute( + const file = std.fs.openFileAbsolute( file_path, .{ .mode = .read_only }, - ); + ) catch |err| { + std.debug.print("error occurred while opening file: {s}\n", .{@errorName(err)}); + return; + }; defer file.close(); while (true) { - const rw_result = file.reader().streamUntilDelimiter( - std.io.getStdOut().writer(), + var ar = std.ArrayList(u8).init(std.heap.page_allocator); + defer ar.deinit(); + + file.reader().streamUntilDelimiter( + ar.writer(), '\n', null, - ); + ) catch break; - if (rw_result) |_| {} else |_| { - break; - } - - std.debug.print("\n", .{}); + std.debug.print("{s}\n", .{ar.items}); } } }