diff --git a/repos/os/run/report_rom.run b/repos/os/run/report_rom.run
index a30c4300c7..332b975581 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 da4eefaf59..3a46f2249c 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 cbfd2bc549..97e93627de 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