diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index a3ad914a697..f197cb4f92b 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -428,6 +428,29 @@ RefPtr Process::from_pid(ProcessID pid) }); } +const Process::FileDescriptionAndFlags* Process::FileDescriptions::get_if_valid(size_t i) const +{ + ScopedSpinLock lock(m_fds_lock); + if (m_fds_metadatas.size() <= i) + return nullptr; + + if (auto& metadata = m_fds_metadatas[i]; metadata.is_valid()) + return &metadata; + + return nullptr; +} +Process::FileDescriptionAndFlags* Process::FileDescriptions::get_if_valid(size_t i) +{ + ScopedSpinLock lock(m_fds_lock); + if (m_fds_metadatas.size() <= i) + return nullptr; + + if (auto& metadata = m_fds_metadatas[i]; metadata.is_valid()) + return &metadata; + + return nullptr; +} + const Process::FileDescriptionAndFlags& Process::FileDescriptions::at(size_t i) const { ScopedSpinLock lock(m_fds_lock); diff --git a/Kernel/Process.h b/Kernel/Process.h index a5d1bc9c1cd..6c0d57b58ca 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -643,6 +643,9 @@ public: const FileDescriptionAndFlags& at(size_t i) const; FileDescriptionAndFlags& at(size_t i); + FileDescriptionAndFlags const* get_if_valid(size_t i) const; + FileDescriptionAndFlags* get_if_valid(size_t i); + void enumerate(Function) const; void change_each(Function);