server/report_rom: partial ROM label matching

Fixes #1801
This commit is contained in:
Emery Hemingway 2015-11-30 15:00:10 +01:00 committed by Christian Helmuth
parent 23ff3b1877
commit 6e9fa10e65
3 changed files with 25 additions and 40 deletions

View File

@ -28,10 +28,8 @@ install_config {
<resource name="RAM" quantum="2M"/> <resource name="RAM" quantum="2M"/>
<provides> <service name="ROM"/> <service name="Report"/> </provides> <provides> <service name="ROM"/> <service name="Report"/> </provides>
<config> <config>
<rom> <policy label_prefix="test-report_rom ->" label_suffix="brightness"
<policy label="test-report_rom -> brightness" report="test-report_rom -> brightness"/>
report="test-report_rom -> brightness"/>
</rom>
</config> </config>
</start> </start>
<start name="test-report_rom"> <start name="test-report_rom">

View File

@ -25,7 +25,6 @@
namespace Server { namespace Server {
using Genode::env; using Genode::env;
using Genode::Xml_node;
struct Main; struct Main;
} }
@ -37,26 +36,9 @@ struct Server::Main
Genode::Sliced_heap sliced_heap = { env()->ram_session(), Genode::Sliced_heap sliced_heap = { env()->ram_session(),
env()->rm_session() }; env()->rm_session() };
Xml_node _rom_config_node() const Rom::Registry rom_registry = { sliced_heap };
{
try {
return Genode::config()->xml_node().sub_node("rom"); }
catch (Xml_node::Nonexistent_sub_node) {
PWRN("missing <rom> configuration");
return Xml_node("<rom>");
}
}
Rom::Registry rom_registry = { sliced_heap, _rom_config_node() }; bool verbose = Genode::config()->xml_node().attribute_value("verbose", false);
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();
Report::Root report_root = { ep, sliced_heap, rom_registry, verbose }; Report::Root report_root = { ep, sliced_heap, rom_registry, verbose };
Rom ::Root rom_root = { ep, sliced_heap, rom_registry }; Rom ::Root rom_root = { ep, sliced_heap, rom_registry };

View File

@ -16,6 +16,7 @@
/* Genode includes */ /* Genode includes */
#include <report_rom/rom_registry.h> #include <report_rom/rom_registry.h>
#include <os/session_policy.h>
namespace Rom { struct Registry; } namespace Rom { struct Registry; }
@ -26,8 +27,6 @@ struct Rom::Registry : Registry_for_reader, Registry_for_writer, Genode::Noncopy
Genode::Allocator &_md_alloc; Genode::Allocator &_md_alloc;
Xml_node _config;
Module_list _modules; Module_list _modules;
struct Read_write_policy : Module::Read_policy, Module::Write_policy 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 Module::Name _report_name(Module::Name const &rom_label) const
{ {
using namespace Genode;
String<Rom::Module::Name::capacity()> report;
try { try {
for (Xml_node node = _config.sub_node("policy"); Session_policy policy(rom_label);
true; node = node.next("policy")) { 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 <rom> policies");
if (!node.has_attribute("label") Session_policy policy(rom_label, rom_node);
|| !node.has_attribute("report") policy.attribute("report").value(&report);
|| !node.attribute("label").has_value(rom_label.string())) return Rom::Module::Name(report.string());
continue; } catch (Xml_node::Nonexistent_sub_node) { /* no <rom> node */ }
catch (Session_policy::No_policy_defined) { }
char report[Rom::Module::Name::capacity()]; }
node.attribute("report").value(report, sizeof(report));
return Rom::Module::Name(report);
}
} catch (Xml_node::Nonexistent_sub_node) { }
PWRN("no valid policy for label \"%s\"", rom_label.string()); PWRN("no valid policy for label \"%s\"", rom_label.string());
throw Root::Invalid_args(); throw Root::Invalid_args();
@ -136,9 +141,9 @@ struct Rom::Registry : Registry_for_reader, Registry_for_writer, Genode::Noncopy
public: 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 Module &lookup(Writer &writer, Module::Name const &name) override