std.fs: split Dir into IterableDir

Also adds safety check for attempting to iterate directory not opened with `iterate = true`.
This commit is contained in:
Veikka Tuominen
2022-07-09 18:59:21 +03:00
parent 577f9fdbae
commit 2b67f56c35
10 changed files with 145 additions and 104 deletions

View File

@@ -181,14 +181,14 @@ pub fn main() !void {
try dir_stack.append(target_include_dir);
while (dir_stack.popOrNull()) |full_dir_name| {
var dir = std.fs.cwd().openDir(full_dir_name, .{ .iterate = true }) catch |err| switch (err) {
var iterable_dir = std.fs.cwd().openIterableDir(full_dir_name, .{}) catch |err| switch (err) {
error.FileNotFound => continue :search,
error.AccessDenied => continue :search,
else => return err,
};
defer dir.close();
defer iterable_dir.close();
var dir_it = dir.iterate();
var dir_it = iterable_dir.iterate();
while (try dir_it.next()) |entry| {
const full_path = try std.fs.path.join(arena, &[_][]const u8{ full_dir_name, entry.name });