From 74ab8ccde0aaacc8663cea13f96ded69238da7be Mon Sep 17 00:00:00 2001 From: Idan Horowitz Date: Thu, 24 Feb 2022 20:04:32 +0200 Subject: [PATCH] Kernel: Add NetworkingManagement::try_for_each() for fallible iteration This API will allow users to short circuit iteration and properly propagate errors. --- Kernel/Net/NetworkingManagement.cpp | 9 +++++++++ Kernel/Net/NetworkingManagement.h | 1 + 2 files changed, 10 insertions(+) diff --git a/Kernel/Net/NetworkingManagement.cpp b/Kernel/Net/NetworkingManagement.cpp index c01e01da8f..42774dbde0 100644 --- a/Kernel/Net/NetworkingManagement.cpp +++ b/Kernel/Net/NetworkingManagement.cpp @@ -50,6 +50,15 @@ void NetworkingManagement::for_each(Function callback) }); } +ErrorOr NetworkingManagement::try_for_each(Function(NetworkAdapter&)> callback) +{ + return m_adapters.with([&](auto& adapters) -> ErrorOr { + for (auto& adapter : adapters) + TRY(callback(adapter)); + return {}; + }); +} + RefPtr NetworkingManagement::from_ipv4_address(IPv4Address const& address) const { if (address[0] == 0 && address[1] == 0 && address[2] == 0 && address[3] == 0) diff --git a/Kernel/Net/NetworkingManagement.h b/Kernel/Net/NetworkingManagement.h index 8ea6a3e0ba..43bb8a6455 100644 --- a/Kernel/Net/NetworkingManagement.h +++ b/Kernel/Net/NetworkingManagement.h @@ -31,6 +31,7 @@ public: NetworkingManagement(); void for_each(Function); + ErrorOr try_for_each(Function(NetworkAdapter&)>); RefPtr from_ipv4_address(const IPv4Address&) const; RefPtr lookup_by_name(StringView) const;