| ... | ... | @@ -166,12 +166,7 @@ pub fn parseTree(alloc: std.mem.Allocator, treefile: string) !Tree { |
| 166 | 166 | inline for (std.meta.fields(Tree.Object.Id)) |item| { |
| 167 | 167 | if (std.mem.eql(u8, item.name, @tagName(otype))) { |
| 168 | 168 | 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), |
| 175 | 170 | .id = @unionInit(Tree.Object.Id, item.name, item.type{ .id = id }), |
| 176 | 171 | .name = name, |
| 177 | 172 | }); |
| ... | ... | @@ -183,6 +178,16 @@ pub fn parseTree(alloc: std.mem.Allocator, treefile: string) !Tree { |
| 183 | 178 | }; |
| 184 | 179 | } |
| 185 | 180 | |
| 181 | fn 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 | |
| 186 | 191 | pub const Tree = struct { |
| 187 | 192 | children: []const Object, |
| 188 | 193 | |