diff --git a/src/delete.zig b/src/delete.zig index 22c2706..1f6575c 100644 --- a/src/delete.zig +++ b/src/delete.zig @@ -45,8 +45,7 @@ fn deleteItem(dir: std.fs.Dir, path: [:0]const u8, ptr: *align(1) ?*model.Entry) return true; if (entry.dir()) |d| { - var fd = dir.openDirZ(path, .{ .access_sub_paths = true, .iterate = false }) - catch |e| return err(e); + var fd = dir.openDirZ(path, .{.no_follow = true}, false) catch |e| return err(e); var it = &d.sub; parent = d; defer parent = parent.parent.?; diff --git a/src/main.zig b/src/main.zig index a04d96f..7e2d220 100644 --- a/src/main.zig +++ b/src/main.zig @@ -343,8 +343,7 @@ fn spawnShell() void { env.put("NCDU_LEVEL", "1") catch unreachable; const shell = std.os.getenvZ("NCDU_SHELL") orelse std.os.getenvZ("SHELL") orelse "/bin/sh"; - var child = std.ChildProcess.init(&.{shell}, allocator) catch unreachable; - defer child.deinit(); + var child = std.ChildProcess.init(&.{shell}, allocator); child.cwd = path.items; child.env_map = &env; diff --git a/src/scan.zig b/src/scan.zig index b6a411b..74c2ae5 100644 --- a/src/scan.zig +++ b/src/scan.zig @@ -450,8 +450,8 @@ const Context = struct { var active_context: *Context = undefined; // Read and index entries of the given dir. -fn scanDir(ctx: *Context, pat: *const exclude.Patterns, dir: std.fs.Dir, dir_dev: u64) void { - var it = main.allocator.create(std.fs.Dir.Iterator) catch unreachable; +fn scanDir(ctx: *Context, pat: *const exclude.Patterns, dir: std.fs.IterableDir, dir_dev: u64) void { + var it = main.allocator.create(std.fs.IterableDir.Iterator) catch unreachable; defer main.allocator.destroy(it); it.* = dir.iterate(); while(true) { @@ -471,7 +471,7 @@ fn scanDir(ctx: *Context, pat: *const exclude.Patterns, dir: std.fs.Dir, dir_dev continue; } - ctx.stat = Stat.read(dir, ctx.name, false) catch { + ctx.stat = Stat.read(dir.dir, ctx.name, false) catch { ctx.addSpecial(.err); continue; }; @@ -481,7 +481,7 @@ fn scanDir(ctx: *Context, pat: *const exclude.Patterns, dir: std.fs.Dir, dir_dev } if (main.config.follow_symlinks and ctx.stat.symlink) { - if (Stat.read(dir, ctx.name, true)) |nstat| { + if (Stat.read(dir.dir, ctx.name, true)) |nstat| { if (!nstat.dir) { ctx.stat = nstat; // Symlink targets may reside on different filesystems, @@ -497,19 +497,21 @@ fn scanDir(ctx: *Context, pat: *const exclude.Patterns, dir: std.fs.Dir, dir_dev }; var edir = - if (ctx.stat.dir) dir.openDirZ(ctx.name, .{ .access_sub_paths = true, .iterate = true, .no_follow = true }) catch { + if (!ctx.stat.dir) null + else if (dir.dir.openDirZ(ctx.name, .{ .no_follow = true }, true)) |d| std.fs.IterableDir{.dir = d} + else |_| { ctx.addSpecial(.err); continue; - } else null; + }; defer if (edir != null) edir.?.close(); - if (@import("builtin").os.tag == .linux and main.config.exclude_kernfs and ctx.stat.dir and isKernfs(edir.?, ctx.stat.dev)) { + if (@import("builtin").os.tag == .linux and main.config.exclude_kernfs and ctx.stat.dir and isKernfs(edir.?.dir, ctx.stat.dev)) { ctx.addSpecial(.kernfs); continue; } if (main.config.exclude_caches and ctx.stat.dir) { - if (edir.?.openFileZ("CACHEDIR.TAG", .{})) |f| { + if (edir.?.dir.openFileZ("CACHEDIR.TAG", .{})) |f| { const sig = "Signature: 8a477f597d28d172789f06886806bc55"; var buf: [sig.len]u8 = undefined; if (f.reader().readAll(&buf)) |len| { @@ -556,13 +558,14 @@ pub fn setupRefresh(parent: *model.Dir) void { // To be called after setupRefresh() (or from scanRoot()) pub fn scan() void { defer active_context.deinit(); - var dir = std.fs.cwd().openDirZ(active_context.pathZ(), .{ .access_sub_paths = true, .iterate = true }) catch |e| { + var dir_ = std.fs.cwd().openDirZ(active_context.pathZ(), .{}, true) catch |e| { active_context.last_error = main.allocator.dupeZ(u8, active_context.path.items) catch unreachable; active_context.fatal_error = e; while (main.state == .refresh or main.state == .scan) main.handleEvent(true, true); return; }; + var dir = std.fs.IterableDir{.dir = dir_}; defer dir.close(); var pat = exclude.getPatterns(active_context.pathZ()); defer pat.deinit(); diff --git a/src/ui.zig b/src/ui.zig index e0f66c8..4e00548 100644 --- a/src/ui.zig +++ b/src/ui.zig @@ -286,8 +286,8 @@ const styles = [_]StyleDef{ }; pub const Style = lbl: { - var fields: [styles.len]std.builtin.TypeInfo.EnumField = undefined; - var decls = [_]std.builtin.TypeInfo.Declaration{}; + var fields: [styles.len]std.builtin.Type.EnumField = undefined; + var decls = [_]std.builtin.Type.Declaration{}; inline for (styles) |s, i| { fields[i] = .{ .name = s.name,