summaryrefslogtreecommitdiff
path: root/src/ninep
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-29 09:03:41 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:16 -0300
commit78d6f64e72be2a22c40feaf012636bc8f04d46de (patch)
treeae2f5828eb32f78e1536a75235706828067e6e0b /src/ninep
parent039ae6aa70d963f942d8a5747060c67599664af9 (diff)
downloadpardes-78d6f64e72be2a22c40feaf012636bc8f04d46de.tar.gz
pardes-78d6f64e72be2a22c40feaf012636bc8f04d46de.zip
A shell given a directory is not taken to be in this process's before it has spoken, so it logs no rename to the session's and back
Each host read /proc/<pid>/cwd right after forking the shell and at every frame after; before the shell's chdir that says this process's directory, a rename to it, then the real one a frame later, a rename back. A shell given a directory is named by it already (newShell) and is no longer asked at fork; and until it has printed anything, an answer naming this process's directory is not taken. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'src/ninep')
-rw-r--r--src/ninep/ctl.zig6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/ninep/ctl.zig b/src/ninep/ctl.zig
index 95d81e3b..66092451 100644
--- a/src/ninep/ctl.zig
+++ b/src/ninep/ctl.zig
@@ -1881,6 +1881,12 @@ test "a terminal told the directory it already goes by logs no rename" {
p.setCwd(term, "/tmp");
var rec: [32]u8 = undefined;
try testing.expect(!th.logHas(p, try std.fmt.bufPrint(&rec, "rename {d} ", .{p.panes[term].?.serial})));
+ // This process's directory, asked before the shell has said anything
+ // (so before its chdir): not taken.
+ const session = p.sessionDir();
+ p.setCwd(term, session);
+ try testing.expect(!th.logHas(p, try std.fmt.bufPrint(&rec, "rename {d} ", .{p.panes[term].?.serial})));
+ p.update(.{ .output = .{ .pane = @intCast(term), .bytes = "$ " } });
// Somewhere else is a rename.
p.setCwd(term, "/usr");
try testing.expect(th.logHas(p, try std.fmt.bufPrint(&rec, "rename {d} /usr", .{p.panes[term].?.serial})));