Add /proc/PID/cwd, a symlink to the process's current directory.

This commit is contained in:
Andreas Kling 2018-11-10 18:16:21 +01:00
parent a768c2b919
commit 36b3dc6c32
Notes: sideshowbarker 2024-07-19 16:11:24 +09:00
2 changed files with 9 additions and 1 deletions

View file

@ -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)

View file

@ -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;