From 24079682429b67a457705d6f12b13f53aaacf433 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 15 Jan 2025 16:05:52 +0100 Subject: [PATCH] sandbox: don't use Xml_node as return value Issue #5411 --- repos/os/src/lib/sandbox/child.h | 24 ++++++++++++++++++++---- repos/os/src/lib/sandbox/library.cc | 6 +++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/repos/os/src/lib/sandbox/child.h b/repos/os/src/lib/sandbox/child.h index 1ecf912f7a..9af64ff87b 100644 --- a/repos/os/src/lib/sandbox/child.h +++ b/repos/os/src/lib/sandbox/child.h @@ -50,8 +50,22 @@ class Sandbox::Child : Child_policy, Routed_service::Wakeup */ struct Id { unsigned value; }; - struct Default_route_accessor : Interface { virtual Xml_node default_route() = 0; }; - struct Default_caps_accessor : Interface { virtual Cap_quota default_caps() = 0; }; + using With_xml = Callable; + + struct Default_route_accessor : Interface + { + virtual void _with_default_route(With_xml::Ft const &) = 0; + + void with_default_route(auto const &fn) + { + _with_default_route(With_xml::Fn { fn }); + } + }; + + struct Default_caps_accessor : Interface + { + virtual Cap_quota default_caps() = 0; + }; template struct Resource_limit_accessor : Interface @@ -140,8 +154,10 @@ class Sandbox::Child : Child_policy, Routed_service::Wakeup start.with_sub_node("route", [&] (Xml_node const &route) { _route_model.construct(_alloc, route); }, - [&] () { - _route_model.construct(_alloc, _default_route_accessor.default_route()); }); + [&] { + _default_route_accessor.with_default_route([&] (Xml_node const &node) { + _route_model.construct(_alloc, node); }); + }); } /* diff --git a/repos/os/src/lib/sandbox/library.cc b/repos/os/src/lib/sandbox/library.cc index 144a9cd03b..06f863f680 100644 --- a/repos/os/src/lib/sandbox/library.cc +++ b/repos/os/src/lib/sandbox/library.cc @@ -189,10 +189,10 @@ struct Genode::Sandbox::Library : ::Sandbox::State_reporter::Producer, /** * Default_route_accessor interface */ - Xml_node default_route() override + void _with_default_route(Child::With_xml::Ft const &fn) override { - return _default_route.constructed() ? _default_route->xml() - : Xml_node(""); + if (_default_route.constructed()) + fn(_default_route->xml()); } /**