From 83479b2652b3326d482645925fc2101626d00dfd Mon Sep 17 00:00:00 2001 From: Jordan Orelli Date: Sun, 27 Dec 2020 20:52:01 -0600 Subject: [PATCH] this might be worse? --- cat/src/main.zig | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/cat/src/main.zig b/cat/src/main.zig index f2c100a..2568ec3 100644 --- a/cat/src/main.zig +++ b/cat/src/main.zig @@ -18,19 +18,16 @@ fn run(mem: *Allocator) !void { const stderr = std.io.getStdErr(); var handles = ArrayList(File).init(mem); - defer handles.deinit(); - defer { for (handles.items) |f| { f.close(); } + handles.deinit(); } var args = std.process.args(); defer args.deinit(); - var path_buffer: [std.fs.MAX_PATH_BYTES]u8 = undefined; - _ = args.skip(); while (args.next(mem)) |maybe| { const arg = try maybe; @@ -39,19 +36,10 @@ fn run(mem: *Allocator) !void { if (std.mem.eql(u8, arg, "-")) { try handles.append(stdin); } else { - const path = std.fs.realpath(arg, &path_buffer) catch |err| { - stderr.writer().print("Path Error with path {}: {}\n", .{ arg, err }) catch {}; + const f = openFile(arg) catch |err| { + stderr.writer().print("Error with {}: {}\n", .{ arg, err }) catch {}; std.os.exit(1); }; - const f = std.fs.openFileAbsolute(path, .{ .read = true }) catch |err| { - stderr.writer().print("Open Error with path {}: {}\n", .{ arg, err }) catch {}; - std.os.exit(1); - }; - const fi = try f.stat(); - if (fi.kind != .File) { - stderr.writer().print("File at path {} is not regular file, is: {}\n", .{ arg, fi.kind }) catch {}; - std.os.exit(1); - } try handles.append(f); } } @@ -80,3 +68,16 @@ fn dump(page: []u8, f: File) !void { _ = try stdout.write(page[0..n]); } } + +const BadFileType = error.BadFileType; + +var path_buffer: [std.fs.MAX_PATH_BYTES]u8 = undefined; +fn openFile(rel: []u8) !File { + const path = try std.fs.realpath(rel, &path_buffer); + const f = try std.fs.openFileAbsolute(path, .{ .read = true }); + const fi = try f.stat(); + if (fi.kind != .File) { + return BadFileType; + } + return f; +}