From 6aa4b01692c47cc63e270a0473f662be59c120cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Motiejus=20Jak=C5=A1tys?= Date: Wed, 22 Jun 2022 16:23:02 +0300 Subject: [PATCH] wip handling errors in top level --- src/ErrCtx.zig | 4 ++-- src/unix2db/main.zig | 38 +++++++++++++++++++++++++------------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/ErrCtx.zig b/src/ErrCtx.zig index 4343a3a..da15f70 100644 --- a/src/ErrCtx.zig +++ b/src/ErrCtx.zig @@ -22,8 +22,8 @@ pub fn write(self: *ErrCtx, bytes: []const u8) error{}!usize { self.overflow = bytes.len > can_add; self.buf.appendSliceAssumeCapacity(bytes[0..math.min(bytes.len, can_add)]); - // not adding the final zero is ok, because it needs - // to be ignored in the iterator anyway. + // not adding the final zero is ok, because it will + // be ignored in the iterator anyway. _ = self.buf.append(0) catch null; return bytes.len; diff --git a/src/unix2db/main.zig b/src/unix2db/main.zig index bacaf18..1e2400f 100644 --- a/src/unix2db/main.zig +++ b/src/unix2db/main.zig @@ -40,25 +40,25 @@ fn execute( allocator: Allocator, stderr: anytype, argv: []const [*:0]const u8, -) !u8 { +) u8 { const result = flags.parse(argv, &[_]flags.Flag{ .{ .name = "-h", .kind = .boolean }, .{ .name = "--passwd", .kind = .arg }, .{ .name = "--group", .kind = .arg }, .{ .name = "--output", .kind = .arg }, }) catch { - try stderr.writeAll(usage); + stderr.writeAll(usage) catch {}; return 1; }; if (result.boolFlag("-h")) { - try io.getStdOut().writeAll(usage); + io.getStdOut().writeAll(usage) catch return 1; return 0; } if (result.args.len != 0) { - try stderr.print("ERROR: unknown option '{s}'\n", .{result.args[0]}); - try stderr.writeAll(usage); + stderr.print("ERROR: unknown option '{s}'\n", .{result.args[0]}) catch {}; + stderr.writeAll(usage) catch {}; return 1; } @@ -66,10 +66,20 @@ fn execute( const groupFname = result.argFlag("--group") orelse "./group"; const outFile = result.argFlag("--output") orelse "./db.turbo"; - //std.debug.print("passwd file name: {s}\n", .{passwdFname}); - var passwdFile = try fs.cwd().openFile(passwdFname, .{ .mode = .read_only }); + // to catch a specific file.OpenError, wait for + // https://github.com/ziglang/zig/issues/2473 + var passwdFile = fs.cwd().openFile( + passwdFname, + .{ .mode = .read_only }, + ) catch |err| { + stderr.print("Error opening {s}: {s}\n", .{ passwdFname, @errorName(err) }) catch {}; + return 1; + }; defer passwdFile.close(); - var groupFile = try fs.cwd().openFile(groupFname, .{ .mode = .read_only }); + var groupFile = fs.cwd().openFile(groupFname, .{ .mode = .read_only }) catch |err| { + stderr.print("Error opening {s}: {s}\n", .{ groupFname, @errorName(err) }) catch {}; + return 1; + }; defer groupFile.close(); var err_ctx = ErrCtx{}; @@ -79,9 +89,11 @@ fn execute( passwdFile.reader(), ); errdefer { - var it = err_ctx.iterator(); + stderr.print("ERROR", .{}) catch {}; + var it = err_ctx.rev(); while (it.next()) |err| - std.debug.print("ERROR: {s}\n", .{err}); + stderr.print(": {s}", .{err}) catch {}; + stderr.print("\n", .{}) catch {}; } defer for (users) |*user| user.deinit(allocator); defer allocator.free(users); @@ -118,7 +130,7 @@ test "invalid argument" { var stderr = ArrayList(u8).init(allocator); defer stderr.deinit(); - const exit_code = try execute(allocator, stderr.writer(), args[0..]); + const exit_code = execute(allocator, stderr.writer(), args[0..]); try testing.expectEqual(@as(u8, 1), exit_code); try testing.expect(mem.startsWith( u8, @@ -128,8 +140,6 @@ test "invalid argument" { } test "smoke test" { - if (true) return error.SkipZigTest; - const allocator = testing.allocator; var stderr = ArrayList(u8).init(allocator); defer stderr.deinit(); @@ -181,6 +191,8 @@ test "smoke test" { "--group", groupPath, "--output", outPath, }; + + if (true) return error.SkipZigTest; const exit_code = try execute(allocator, stderr.writer(), args); try testing.expectEqual(@as(u8, 0), exit_code);