diff --git a/src/delete.zig b/src/delete.zig index ecc490e..f76e4c3 100644 --- a/src/delete.zig +++ b/src/delete.zig @@ -74,8 +74,7 @@ fn deleteItem(dir: std.Io.Dir, path: [:0]const u8, ptr: *align(1) ?*model.Entry) // Returns true if the item has been deleted successfully. fn deleteCmd(path: [:0]const u8, ptr: *align(1) ?*model.Entry) bool { { - var env = std.process.getEnvMap(main.allocator) catch unreachable; - defer env.deinit(); + var env = main.environ_map.clone(main.allocator) catch unreachable; env.put("NCDU_DELETE_PATH", path) catch unreachable; // Since we're passing the path as an environment variable and go through @@ -83,7 +82,7 @@ fn deleteCmd(path: [:0]const u8, ptr: *align(1) ?*model.Entry) bool { // shell escaping. const cmd = std.fmt.allocPrint(main.allocator, "{s} \"$NCDU_DELETE_PATH\"", .{main.config.delete_command}) catch unreachable; defer main.allocator.free(cmd); - ui.runCmd(&.{"/bin/sh", "-c", cmd}, null, &env, true); + ui.runCmd(&.{"/bin/sh", "-c", cmd}, null, env, true); } const stat = scan.statAt(std.fs.cwd(), path, false, null) catch { diff --git a/src/main.zig b/src/main.zig index 980b9ba..f943447 100644 --- a/src/main.zig +++ b/src/main.zig @@ -609,7 +609,7 @@ pub fn main(init: std.process.Init) void { }, .shell => { const shell = environ_map.get("NCDU_SHELL") orelse environ_map.get("SHELL") orelse "/bin/sh"; - ui.runCmd(&.{shell}, browser.dir_path, false); + ui.runCmd(&.{shell}, browser.dir_path, environ_map.clone(allocator) catch unreachable, false); state = .browse; }, .delete => { diff --git a/src/ui.zig b/src/ui.zig index aa0a340..5e6cd1e 100644 --- a/src/ui.zig +++ b/src/ui.zig @@ -645,10 +645,10 @@ fn waitInput() void { _ = rd.interface.discardDelimiterExclusive('\n') catch unreachable; } -pub fn runCmd(cmd: []const []const u8, cwd: ?[]const u8, reporterr: bool) void { +pub fn runCmd(cmd: []const []const u8, cwd: ?[]const u8, environ: std.process.Environ.Map, reporterr: bool) void { deinit(); defer init(); - var env = main.environ_map.clone(main.allocator) catch unreachable; + var env = @constCast(&environ); defer env.deinit(); // NCDU_LEVEL can only count to 9, keeps the implementation simple. @@ -664,7 +664,7 @@ pub fn runCmd(cmd: []const []const u8, cwd: ?[]const u8, reporterr: bool) void { var child = std.process.spawn(main.io, .{ .argv = cmd, .cwd = if (cwd) |p| .{ .path = p } else .inherit, - .environ_map = &env, + .environ_map = env, }) catch |e| die("Failed to spawn process: {s}", .{errorString(e)}); const term = child.wait(main.io) catch |e| blk: {