瀏覽代碼

Kernel: Add OpenFileDescriptions::try_enumerate for fallible iteration

This API will allow users to short circuit iteration and properly
propagate errors.
Idan Horowitz 3 年之前
父節點
當前提交
064b93c2ad
共有 2 個文件被更改,包括 9 次插入0 次删除
  1. 8 0
      Kernel/Process.cpp
  2. 1 0
      Kernel/Process.h

+ 8 - 0
Kernel/Process.cpp

@@ -446,6 +446,14 @@ void Process::OpenFileDescriptions::enumerate(Function<void(const OpenFileDescri
     }
 }
 
+ErrorOr<void> Process::OpenFileDescriptions::try_enumerate(Function<ErrorOr<void>(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<void(OpenFileDescriptionAndFlags&)> callback)
 {
     for (auto& file_description_metadata : m_fds_metadatas) {

+ 1 - 0
Kernel/Process.h

@@ -660,6 +660,7 @@ public:
         OpenFileDescriptionAndFlags* get_if_valid(size_t i);
 
         void enumerate(Function<void(const OpenFileDescriptionAndFlags&)>) const;
+        ErrorOr<void> try_enumerate(Function<ErrorOr<void>(const OpenFileDescriptionAndFlags&)>) const;
         void change_each(Function<void(OpenFileDescriptionAndFlags&)>);
 
         ErrorOr<ScopedDescriptionAllocation> allocate(int first_candidate_fd = 0);