diff --git a/repos/os/run/report_rom.run b/repos/os/run/report_rom.run index a30c4300c..332b97558 100644 --- a/repos/os/run/report_rom.run +++ b/repos/os/run/report_rom.run @@ -28,10 +28,8 @@ install_config { - - - + diff --git a/repos/os/src/server/report_rom/main.cc b/repos/os/src/server/report_rom/main.cc index da4eefaf5..3a46f2249 100644 --- a/repos/os/src/server/report_rom/main.cc +++ b/repos/os/src/server/report_rom/main.cc @@ -25,7 +25,6 @@ namespace Server { using Genode::env; - using Genode::Xml_node; struct Main; } @@ -37,26 +36,9 @@ struct Server::Main Genode::Sliced_heap sliced_heap = { env()->ram_session(), env()->rm_session() }; - Xml_node _rom_config_node() const - { - try { - return Genode::config()->xml_node().sub_node("rom"); } - catch (Xml_node::Nonexistent_sub_node) { - PWRN("missing configuration"); - return Xml_node(""); - } - } + Rom::Registry rom_registry = { sliced_heap }; - Rom::Registry rom_registry = { sliced_heap, _rom_config_node() }; - - bool _verbose_config() - { - char const *attr = "verbose"; - return Genode::config()->xml_node().has_attribute(attr) - && Genode::config()->xml_node().attribute(attr).has_value("yes"); - } - - bool verbose = _verbose_config(); + bool verbose = Genode::config()->xml_node().attribute_value("verbose", false); Report::Root report_root = { ep, sliced_heap, rom_registry, verbose }; Rom ::Root rom_root = { ep, sliced_heap, rom_registry }; diff --git a/repos/os/src/server/report_rom/rom_registry.h b/repos/os/src/server/report_rom/rom_registry.h index cbfd2bc54..97e93627d 100644 --- a/repos/os/src/server/report_rom/rom_registry.h +++ b/repos/os/src/server/report_rom/rom_registry.h @@ -16,6 +16,7 @@ /* Genode includes */ #include +#include namespace Rom { struct Registry; } @@ -26,8 +27,6 @@ struct Rom::Registry : Registry_for_reader, Registry_for_writer, Genode::Noncopy Genode::Allocator &_md_alloc; - Xml_node _config; - Module_list _modules; struct Read_write_policy : Module::Read_policy, Module::Write_policy @@ -115,20 +114,26 @@ struct Rom::Registry : Registry_for_reader, Registry_for_writer, Genode::Noncopy */ Module::Name _report_name(Module::Name const &rom_label) const { + using namespace Genode; + + String report; + try { - for (Xml_node node = _config.sub_node("policy"); - true; node = node.next("policy")) { + Session_policy policy(rom_label); + policy.attribute("report").value(&report); + return Rom::Module::Name(report.string()); + } catch (Session_policy::No_policy_defined) { + /* FIXME backwards compatibility, remove at next release */ + try { + Xml_node rom_node = config()->xml_node().sub_node("rom"); + PWRN("parsing legacy policies"); - if (!node.has_attribute("label") - || !node.has_attribute("report") - || !node.attribute("label").has_value(rom_label.string())) - continue; - - char report[Rom::Module::Name::capacity()]; - node.attribute("report").value(report, sizeof(report)); - return Rom::Module::Name(report); - } - } catch (Xml_node::Nonexistent_sub_node) { } + Session_policy policy(rom_label, rom_node); + policy.attribute("report").value(&report); + return Rom::Module::Name(report.string()); + } catch (Xml_node::Nonexistent_sub_node) { /* no node */ } + catch (Session_policy::No_policy_defined) { } + } PWRN("no valid policy for label \"%s\"", rom_label.string()); throw Root::Invalid_args(); @@ -136,9 +141,9 @@ struct Rom::Registry : Registry_for_reader, Registry_for_writer, Genode::Noncopy public: - Registry(Genode::Allocator &md_alloc, Xml_node config) + Registry(Genode::Allocator &md_alloc) : - _md_alloc(md_alloc), _config(config) + _md_alloc(md_alloc) { } Module &lookup(Writer &writer, Module::Name const &name) override