diff --git a/Kernel/Devices/DeviceManagement.cpp b/Kernel/Devices/DeviceManagement.cpp index af82467454..134f67c847 100644 --- a/Kernel/Devices/DeviceManagement.cpp +++ b/Kernel/Devices/DeviceManagement.cpp @@ -109,6 +109,15 @@ void DeviceManagement::for_each(Function callback) }); } +ErrorOr DeviceManagement::try_for_each(Function(Device&)> callback) +{ + return m_devices.with([&](auto& map) -> ErrorOr { + for (auto& entry : map) + TRY(callback(*entry.value)); + return {}; + }); +} + NullDevice& DeviceManagement::null_device() { return *m_null_device; diff --git a/Kernel/Devices/DeviceManagement.h b/Kernel/Devices/DeviceManagement.h index e23f86ce92..0b4f57ee7b 100644 --- a/Kernel/Devices/DeviceManagement.h +++ b/Kernel/Devices/DeviceManagement.h @@ -44,6 +44,7 @@ public: void before_device_removal(Badge, Device&); void for_each(Function); + ErrorOr try_for_each(Function(Device&)>); Device* get_device(MajorNumber major, MinorNumber minor); NullDevice const& null_device() const;