From 064b93c2ad51bbbf6dee3284ef37b7134d955d5f Mon Sep 17 00:00:00 2001 From: Idan Horowitz Date: Thu, 24 Feb 2022 20:02:13 +0200 Subject: [PATCH] Kernel: Add OpenFileDescriptions::try_enumerate for fallible iteration This API will allow users to short circuit iteration and properly propagate errors. --- Kernel/Process.cpp | 8 ++++++++ Kernel/Process.h | 1 + 2 files changed, 9 insertions(+) diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index f870d738ef..2f637473fe 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -446,6 +446,14 @@ void Process::OpenFileDescriptions::enumerate(Function Process::OpenFileDescriptions::try_enumerate(Function(const OpenFileDescriptionAndFlags&)> callback) const +{ + for (auto const& file_description_metadata : m_fds_metadatas) { + TRY(callback(file_description_metadata)); + } + return {}; +} + void Process::OpenFileDescriptions::change_each(Function callback) { for (auto& file_description_metadata : m_fds_metadatas) { diff --git a/Kernel/Process.h b/Kernel/Process.h index affd3d9a2e..d1acc52d64 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -660,6 +660,7 @@ public: OpenFileDescriptionAndFlags* get_if_valid(size_t i); void enumerate(Function) const; + ErrorOr try_enumerate(Function(const OpenFileDescriptionAndFlags&)>) const; void change_each(Function); ErrorOr allocate(int first_candidate_fd = 0);