| ... | ... | @@ -109,13 +109,31 @@ pub fn main() !void { |
| 109 | 109 | |
| 110 | 110 | { |
| 111 | 111 | // Also add all new def and def.in files. |
| 112 | | var walker = try src_crt_dir.walk(arena); |
| 112 | var walker = try src_crt_dir.walkSelectively(arena); |
| 113 | 113 | defer walker.deinit(); |
| 114 | 114 | |
| 115 | 115 | var fail = false; |
| 116 | 116 | |
| 117 | 117 | while (try walker.next()) |entry| { |
| 118 | | if (entry.kind != .file) continue; |
| 118 | switch (entry.kind) { |
| 119 | .directory => { |
| 120 | switch (walker.depth()) { |
| 121 | 1 => for (def_dirs) |p| { |
| 122 | if (std.mem.eql(u8, entry.basename, p)) { |
| 123 | try walker.enter(entry); |
| 124 | continue; |
| 125 | } |
| 126 | }, |
| 127 | else => { |
| 128 | // The top-level directory was already validated |
| 129 | try walker.enter(entry); |
| 130 | continue; |
| 131 | }, |
| 132 | } |
| 133 | }, |
| 134 | .file => {}, |
| 135 | else => continue, |
| 136 | } |
| 119 | 137 | |
| 120 | 138 | const ok_ext = for (def_exts) |ext| { |
| 121 | 139 | if (std.mem.endsWith(u8, entry.path, ext)) break true; |
| ... | ... | @@ -123,12 +141,6 @@ pub fn main() !void { |
| 123 | 141 | |
| 124 | 142 | if (!ok_ext) continue; |
| 125 | 143 | |
| 126 | | const ok_prefix = for (def_dirs) |p| { |
| 127 | | if (std.mem.startsWith(u8, entry.path, p)) break true; |
| 128 | | } else false; |
| 129 | | |
| 130 | | if (!ok_prefix) continue; |
| 131 | | |
| 132 | 144 | const blacklisted = for (blacklisted_defs) |item| { |
| 133 | 145 | if (std.mem.eql(u8, entry.basename, item)) break true; |
| 134 | 146 | } else false; |