summaryrefslogtreecommitdiff
path: root/Kernel/GlobalProcessExposed.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/GlobalProcessExposed.cpp')
-rw-r--r--Kernel/GlobalProcessExposed.cpp34
1 files changed, 14 insertions, 20 deletions
diff --git a/Kernel/GlobalProcessExposed.cpp b/Kernel/GlobalProcessExposed.cpp
index c4c6516c41..8ce519b424 100644
--- a/Kernel/GlobalProcessExposed.cpp
+++ b/Kernel/GlobalProcessExposed.cpp
@@ -27,6 +27,7 @@
#include <Kernel/Net/Routing.h>
#include <Kernel/Net/TCPSocket.h>
#include <Kernel/Net/UDPSocket.h>
+#include <Kernel/Process.h>
#include <Kernel/ProcessExposed.h>
#include <Kernel/Sections.h>
#include <Kernel/TTY/TTY.h>
@@ -905,10 +906,13 @@ KResult ProcFSRootDirectory::traverse_as_directory(unsigned fsid, Function<bool(
InodeIdentifier identifier = { fsid, component.component_index() };
callback({ component.name(), identifier, 0 });
}
- for (auto& component : m_process_directories) {
- InodeIdentifier identifier = { fsid, component.component_index() };
- callback({ component.name(), identifier, 0 });
- }
+ processes().for_each_shared([&](Process& process) {
+ VERIFY(!(process.pid() < 0));
+ u64 process_id = (u64)process.pid().value();
+ InodeIdentifier identifier = { fsid, static_cast<InodeIndex>(process_id << 36) };
+ callback({ String::formatted("{:d}", process.pid().value()), identifier, 0 });
+ return IterationDecision::Continue;
+ });
return KSuccess;
}
@@ -917,12 +921,12 @@ RefPtr<ProcFSExposedComponent> ProcFSRootDirectory::lookup(StringView name)
if (auto candidate = ProcFSExposedDirectory::lookup(name); !candidate.is_null())
return candidate;
- for (auto& component : m_process_directories) {
- if (component.name() == name) {
- return component;
- }
- }
- return {};
+ String process_directory_name = name;
+ auto pid = process_directory_name.to_uint<unsigned>();
+ if (!pid.has_value())
+ return {};
+ auto actual_pid = pid.value();
+ return Process::from_pid(actual_pid);
}
UNMAP_AFTER_INIT ProcFSRootDirectory::ProcFSRootDirectory()
@@ -934,14 +938,4 @@ UNMAP_AFTER_INIT ProcFSRootDirectory::~ProcFSRootDirectory()
{
}
-RefPtr<ProcFSProcessDirectory> ProcFSRootDirectory::process_directory_for(Process& process)
-{
- RefPtr<Process> checked_process = process;
- for (auto& directory : m_process_directories) {
- if (directory.associated_process().ptr() == checked_process.ptr())
- return directory;
- }
- return {};
-}
-
}