summaryrefslogtreecommitdiff
path: root/oldresources/st/patch/newterm.c
diff options
context:
space:
mode:
authorauric <auric7@protonmail.com>2025-09-07 20:17:07 -0500
committerauric <auric7@protonmail.com>2025-09-07 20:17:07 -0500
commit22d02614eaa4530092d564336b3e7076c9f0bc36 (patch)
tree947fd56ed33fedb80c14dab7adab0dc71760540b /oldresources/st/patch/newterm.c
parent7de2c2044596ef810045e4565916e18903d822c1 (diff)
1
Diffstat (limited to 'oldresources/st/patch/newterm.c')
-rw-r--r--oldresources/st/patch/newterm.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/oldresources/st/patch/newterm.c b/oldresources/st/patch/newterm.c
new file mode 100644
index 0000000..d4a1735
--- /dev/null
+++ b/oldresources/st/patch/newterm.c
@@ -0,0 +1,30 @@
+void
+newterm(const Arg* a)
+{
+ int res;
+ switch (fork()) {
+ case -1:
+ die("fork failed: %s\n", strerror(errno));
+ break;
+ case 0:
+ switch (fork()) {
+ case -1:
+ die("fork failed: %s\n", strerror(errno));
+ break;
+ case 0:
+ res = chdir(getcwd_by_pid(pid));
+ execlp("st", "./st", NULL);
+ break;
+ default:
+ exit(0);
+ }
+ default:
+ wait(NULL);
+ }
+}
+
+static char *getcwd_by_pid(pid_t pid) {
+ char buf[32];
+ snprintf(buf, sizeof buf, "/proc/%d/cwd", pid);
+ return realpath(buf, NULL);
+} \ No newline at end of file