diff --git a/repos/os/src/lib/genode_c_api/usb.cc b/repos/os/src/lib/genode_c_api/usb.cc index 5dd2815468..2a1f49ee29 100644 --- a/repos/os/src/lib/genode_c_api/usb.cc +++ b/repos/os/src/lib/genode_c_api/usb.cc @@ -161,12 +161,13 @@ class Root : public Root_component Signal_handler _config_handler { _env.ep(), *this, &Root::_announce_service }; Reporter _config_reporter { _env, "config" }; - Reporter _device_reporter { _env, "devices" }; Constructible _devices[MAX_DEVICES]; - List> _sessions {}; Id_allocator _id_alloc {}; bool _announced { false }; + Constructible _device_reporter {}; + List> _sessions {}; + Root(const Root&); Root & operator=(const Root&); @@ -615,7 +616,10 @@ void ::Root::_report() { using Value = String<64>; - Reporter::Xml_generator xml(_device_reporter, [&] () { + if (!_device_reporter.constructed()) + return; + + _device_reporter->generate([&] (Reporter::Xml_generator &xml) { _for_each_device([&] (Device & d) { xml.node("device", [&] { xml.attribute("label", d.label()); @@ -678,7 +682,9 @@ void ::Root::_announce_service() * Check for report policy, and resp. con-/destruct device reporter */ _config.xml().with_sub_node("report", [&] (Xml_node node) { - _device_reporter.enabled(node.attribute_value("devices", false)); + _device_reporter.conditional(node.attribute_value("devices", false), + _env, "devices", "devices" ); + _config_reporter.enabled(node.attribute_value("config", false)); });