authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2023-05-03 16:30:53 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2023-05-03 16:30:53 -07:00
logeef2c9c630267c027fd1814d7ce9a94ce4372f54
tree268125ddd7b9f7bdc3fe156cce7a1e64451655a5
parent3230ac8d0206bde1d645850fe611989935ef6f6c

add parseTreeMode


1 files changed, 11 insertions(+), 6 deletions(-)

git.zig+11-6
......@@ -166,12 +166,7 @@ pub fn parseTree(alloc: std.mem.Allocator, treefile: string) !Tree {
166166 inline for (std.meta.fields(Tree.Object.Id)) |item| {
167167 if (std.mem.eql(u8, item.name, @tagName(otype))) {
168168 try children.append(.{
169 .mode = .{
170 .type = @intToEnum(Tree.Object.Type, try std.fmt.parseInt(u16, mode[0..3], 10)),
171 .perm_user = @bitCast(Tree.Object.Perm, try std.fmt.parseInt(u3, mode[3..][0..1], 8)),
172 .perm_group = @bitCast(Tree.Object.Perm, try std.fmt.parseInt(u3, mode[4..][0..1], 8)),
173 .perm_other = @bitCast(Tree.Object.Perm, try std.fmt.parseInt(u3, mode[5..][0..1], 8)),
174 },
169 .mode = try parseTreeMode(mode),
175170 .id = @unionInit(Tree.Object.Id, item.name, item.type{ .id = id }),
176171 .name = name,
177172 });
......@@ -183,6 +178,16 @@ pub fn parseTree(alloc: std.mem.Allocator, treefile: string) !Tree {
183178 };
184179}
185180
181fn parseTreeMode(input: string) !Tree.Object.Mode {
182 std.debug.assert(input.len == 6);
183 return .{
184 .type = @intToEnum(Tree.Object.Type, try std.fmt.parseInt(u16, input[0..3], 10)),
185 .perm_user = @bitCast(Tree.Object.Perm, try std.fmt.parseInt(u3, input[3..][0..1], 8)),
186 .perm_group = @bitCast(Tree.Object.Perm, try std.fmt.parseInt(u3, input[4..][0..1], 8)),
187 .perm_other = @bitCast(Tree.Object.Perm, try std.fmt.parseInt(u3, input[5..][0..1], 8)),
188 };
189}
190
186191pub const Tree = struct {
187192 children: []const Object,
188193