From c39f89d9956a5448564516249a9d0ae1aa2d2569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Motiejus=20Jak=C5=A1tys?= Date: Sun, 3 Jul 2022 09:44:09 +0300 Subject: [PATCH] realistic bugfixes --- build.zig | 2 +- src/Corpus.zig | 15 ++++++++++++--- src/Group.zig | 3 ++- src/test_all.zig | 4 +++- src/{unix2db/main.zig => unix2db.zig} | 14 +++++++------- 5 files changed, 25 insertions(+), 13 deletions(-) rename src/{unix2db/main.zig => unix2db.zig} (96%) diff --git a/build.zig b/build.zig index 33b117d..0056465 100644 --- a/build.zig +++ b/build.zig @@ -51,7 +51,7 @@ pub fn build(b: *zbs.Builder) void { cmph.addIncludeDir("include/deps/cmph"); { - const exe = b.addExecutable("turbo-unix2db", "src/unix2db/main.zig"); + const exe = b.addExecutable("turbo-unix2db", "src/unix2db.zig"); exe.setTarget(target); exe.setBuildMode(mode); addCmphDeps(exe, cmph); diff --git a/src/Corpus.zig b/src/Corpus.zig index edf9899..999313e 100644 --- a/src/Corpus.zig +++ b/src/Corpus.zig @@ -11,6 +11,7 @@ const ArrayListUnmanaged = std.ArrayListUnmanaged; const User = @import("User.zig"); const Group = @import("Group.zig"); +const ErrCtx = @import("ErrCtx.zig"); pub const Corpus = @This(); @@ -33,6 +34,7 @@ pub fn init( baseAllocator: Allocator, usersConst: []const User, groupsConst: []const Group, + err: *ErrCtx, ) error{ OutOfMemory, InvalidUtf8, Duplicate, NotFound, TooMany }!Corpus { if (usersConst.len >= math.maxInt(u32)) return error.TooMany; if (groupsConst.len >= math.maxInt(u32)) return error.TooMany; @@ -43,6 +45,7 @@ pub fn init( var groups_arr = try allocator.alloc(Group, groupsConst.len); var users_arr = try allocator.alloc(User, usersConst.len); + var getgr_bufsize: usize = 0; for (groupsConst) |*group, i| { groups_arr[i] = try group.clone(allocator); @@ -99,7 +102,13 @@ pub fn init( members.len += 1; members[members.len - 1] = user_idx; try user2groups[user_idx].append(allocator, @intCast(u32, i)); - } else return error.NotFound; + } else { + return err.returnf( + "user '{s}' not found, member of group '{s}'", + .{ member_name, groups_arr[i].name }, + error.NotFound, + ); + } } group2users[i] = members; @@ -145,10 +154,10 @@ fn cmpUser(_: void, a: User, b: User) bool { } // a is a prefix of b. It is thus shorter. - return false; + return true; } // b is a prefix of a - return true; + return false; } fn cmpGroup(_: void, a: Group, b: Group) bool { diff --git a/src/Group.zig b/src/Group.zig index ee83ead..8a4ceac 100644 --- a/src/Group.zig +++ b/src/Group.zig @@ -93,7 +93,8 @@ pub fn fromReader(allocator: Allocator, reader: anytype) FromReaderError![]Group var members_it = mem.split(u8, members_commas, ","); while (members_it.next()) |member| - try member_ptrs.append(member); + if (member.len != 0) + try member_ptrs.append(member); const group = try init(allocator, gid, name, member_ptrs.items); try groups.append(group); diff --git a/src/test_all.zig b/src/test_all.zig index da8fd45..0b441e2 100644 --- a/src/test_all.zig +++ b/src/test_all.zig @@ -12,7 +12,9 @@ test "turbonss test suite" { _ = @import("PackedUser.zig"); _ = @import("padding.zig"); _ = @import("shell.zig"); - _ = @import("unix2db/main.zig"); _ = @import("User.zig"); _ = @import("validate.zig"); + + // main + _ = @import("unix2db.zig"); } diff --git a/src/unix2db/main.zig b/src/unix2db.zig similarity index 96% rename from src/unix2db/main.zig rename to src/unix2db.zig index 5eed32f..d5a986e 100644 --- a/src/unix2db/main.zig +++ b/src/unix2db.zig @@ -7,12 +7,12 @@ const ArrayList = std.ArrayList; const Allocator = std.mem.Allocator; const GeneralPurposeAllocator = std.heap.GeneralPurposeAllocator; -const flags = @import("../flags.zig"); -const User = @import("../User.zig"); -const Group = @import("../Group.zig"); -const Corpus = @import("../Corpus.zig"); -const DB = @import("../DB.zig"); -const ErrCtx = @import("../ErrCtx.zig"); +const flags = @import("flags.zig"); +const User = @import("User.zig"); +const Group = @import("Group.zig"); +const Corpus = @import("Corpus.zig"); +const DB = @import("DB.zig"); +const ErrCtx = @import("ErrCtx.zig"); const usage = \\usage: turbonss-unix2db [options] @@ -93,7 +93,7 @@ fn execute( allocator.free(groups); } - var corpus = Corpus.init(allocator, users, groups) catch |err| + var corpus = Corpus.init(allocator, users, groups, &errc) catch |err| return fail(errc.wrap("init corpus"), stderr, err); defer corpus.deinit();