diff --git a/repos/libports/include/libc/component.h b/repos/libports/include/libc/component.h
index 82e537755..774e3efd1 100644
--- a/repos/libports/include/libc/component.h
+++ b/repos/libports/include/libc/component.h
@@ -51,6 +51,11 @@ class Libc::Env : public Genode::Env
* Virtual File System configured for this component
*/
virtual Vfs::File_system &vfs() = 0;
+
+ /**
+ * Libc configuration for this component
+ */
+ virtual Genode::Xml_node libc_config() = 0;
};
diff --git a/repos/libports/src/lib/libc/libc_init.h b/repos/libports/src/lib/libc/libc_init.h
index 3265fbbe2..f514ccbba 100644
--- a/repos/libports/src/lib/libc/libc_init.h
+++ b/repos/libports/src/lib/libc/libc_init.h
@@ -16,6 +16,7 @@
/* Genode includes */
#include
+#include
namespace Libc {
@@ -33,6 +34,11 @@ namespace Libc {
* Support for querying available RAM quota in sysctl functions
*/
void sysctl_init(Genode::Env &env);
+
+ /**
+ * Set libc config node
+ */
+ void libc_config_init(Genode::Xml_node node);
}
#endif /* _LIBC_INIT_H_ */
diff --git a/repos/libports/src/lib/libc/task.cc b/repos/libports/src/lib/libc/task.cc
index 33be2a7ac..71e4e5715 100644
--- a/repos/libports/src/lib/libc/task.cc
+++ b/repos/libports/src/lib/libc/task.cc
@@ -76,6 +76,14 @@ class Libc::Env_implementation : public Libc::Env
return Genode::Xml_node("");
}
+ Genode::Xml_node _libc_config()
+ {
+ try { return _config.xml().sub_node("libc"); }
+ catch (Genode::Xml_node::Nonexistent_sub_node) { }
+
+ return Genode::Xml_node("");
+ }
+
Vfs::Global_file_system_factory _file_system_factory;
Vfs::Dir_file_system _vfs;
@@ -100,6 +108,9 @@ class Libc::Env_implementation : public Libc::Env
Vfs::File_system &vfs() override {
return _vfs; }
+ Genode::Xml_node libc_config() override {
+ return _libc_config(); }
+
/***************************
** Genode::Env interface **
@@ -846,6 +857,8 @@ void Component::construct(Genode::Env &env)
kernel = unmanaged_singleton(env);
+ Libc::libc_config_init(kernel->libc_env().libc_config());
+
/* construct libc component on kernel stack */
Libc::Component::construct(kernel->libc_env());
}
diff --git a/repos/libports/src/lib/libc/vfs_plugin.cc b/repos/libports/src/lib/libc/vfs_plugin.cc
index ca582a6d4..a6936bc76 100644
--- a/repos/libports/src/lib/libc/vfs_plugin.cc
+++ b/repos/libports/src/lib/libc/vfs_plugin.cc
@@ -17,7 +17,6 @@
#include
#include
#include
-#include
/* libc includes */
#include
@@ -78,12 +77,21 @@ static void vfs_stat_to_libc_stat_struct(Vfs::Directory_service::Stat const &src
}
+static Genode::Xml_node *_config_node;
+
+
namespace Libc {
+ void libc_config_init(Genode::Xml_node node)
+ {
+ static Genode::Xml_node config = node;
+ _config_node = &config;
+ }
+
Genode::Xml_node config() __attribute__((weak));
Genode::Xml_node config()
{
- return Genode::config()->xml_node().sub_node("libc");
+ return _config_node->sub_node("libc");
}
class Config_attr