From 36b3dc6c320b4bc30d08656e783d34d4f3daab51 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 10 Nov 2018 18:16:21 +0100 Subject: [PATCH] Add /proc/PID/cwd, a symlink to the process's current directory. --- Kernel/ProcFileSystem.cpp | 8 ++++++++ Userland/sh.cpp | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Kernel/ProcFileSystem.cpp b/Kernel/ProcFileSystem.cpp index c0efdbe89a..350897774e 100644 --- a/Kernel/ProcFileSystem.cpp +++ b/Kernel/ProcFileSystem.cpp @@ -138,6 +138,13 @@ ByteBuffer procfs$pid_exe(Process& process) return VirtualFileSystem::the().absolutePath(inode).toByteBuffer(); } +ByteBuffer procfs$pid_cwd(Process& process) +{ + ProcessInspectionHandle handle(process); + auto inode = process.cwdInode(); + return VirtualFileSystem::the().absolutePath(inode).toByteBuffer(); +} + void ProcFileSystem::addProcess(Process& process) { InterruptDisabler disabler; @@ -151,6 +158,7 @@ void ProcFileSystem::addProcess(Process& process) addFile(createGeneratedFile("fds", [&process] { return procfs$pid_fds(process); }), dir.index()); if (process.executableInode().isValid()) addFile(createGeneratedFile("exe", [&process] { return procfs$pid_exe(process); }, 00120777), dir.index()); + addFile(createGeneratedFile("cwd", [&process] { return procfs$pid_cwd(process); }, 00120777), dir.index()); } void ProcFileSystem::removeProcess(Process& process) diff --git a/Userland/sh.cpp b/Userland/sh.cpp index 84172ab18d..3fc2444237 100644 --- a/Userland/sh.cpp +++ b/Userland/sh.cpp @@ -186,7 +186,7 @@ static int sh_cd(int argc, const char** argv) const char* path = canonicalPath.string().characters(); struct stat st; - int rc = lstat(path, &st); + int rc = stat(path, &st); if (rc < 0) { printf("lstat(%s) failed: %s\n", path, strerror(errno)); return 1;