diff --git a/repos/os/src/server/rom_filter/README b/repos/os/src/server/rom_filter/README index b94ce5ad35..cfb64aee3e 100644 --- a/repos/os/src/server/rom_filter/README +++ b/repos/os/src/server/rom_filter/README @@ -40,7 +40,8 @@ The '' node can contain the following sub nodes: :'': Copies the content of the input specified by the 'name' attribute to the - output node. + output node. If the optional attribute 'skip_toplevel' is set and evaluates + to true, the top-level XML node from the input will not be copied. :'': Adds an attribute with the specified 'name' and 'value'. If the node diff --git a/repos/os/src/server/rom_filter/input_rom_registry.h b/repos/os/src/server/rom_filter/input_rom_registry.h index 1f0f6ee1be..2207ea93ca 100644 --- a/repos/os/src/server/rom_filter/input_rom_registry.h +++ b/repos/os/src/server/rom_filter/input_rom_registry.h @@ -434,14 +434,18 @@ class Rom_filter::Input_rom_registry * * \throw Nonexistent_input_node */ - void gen_xml(Input_name const &input_name, Genode::Xml_generator &xml) + void gen_xml(Input_name const &input_name, Genode::Xml_generator &xml, bool skip_toplevel=false) { Entry const *e = _lookup_entry_by_name(input_name); if (!e) throw Nonexistent_input_node(); - e->node().with_raw_node([&] (char const *start, Genode::size_t length) { - xml.append(start, length); }); + if (skip_toplevel) + e->node().with_raw_content([&] (char const *start, Genode::size_t length) { + xml.append(start, length); }); + else + e->node().with_raw_node([&] (char const *start, Genode::size_t length) { + xml.append(start, length); }); } }; diff --git a/repos/os/src/server/rom_filter/main.cc b/repos/os/src/server/rom_filter/main.cc index 2761ae5395..c0cfdad1ef 100644 --- a/repos/os/src/server/rom_filter/main.cc +++ b/repos/os/src/server/rom_filter/main.cc @@ -350,8 +350,11 @@ void Rom_filter::Main::_evaluate_node(Xml_node node, Xml_generator &xml) Input_name const input_name = node.attribute_value("name", Input_name()); + bool const skip_toplevel = + node.attribute_value("skip_toplevel", false); + try { - _input_rom_registry.gen_xml(input_name, xml); } + _input_rom_registry.gen_xml(input_name, xml, skip_toplevel); } catch (...) { } } };