diff --git a/repos/libports/lib/mk/libc.mk b/repos/libports/lib/mk/libc.mk
index e89ac6994d..e4257e5602 100644
--- a/repos/libports/lib/mk/libc.mk
+++ b/repos/libports/lib/mk/libc.mk
@@ -15,9 +15,9 @@ SRC_CC = atexit.cc dummies.cc rlimit.cc sysctl.cc \
malloc.cc progname.cc fd_alloc.cc file_operations.cc \
plugin.cc plugin_registry.cc select.cc exit.cc environ.cc nanosleep.cc \
pread_pwrite.cc readv_writev.cc poll.cc \
- libc_pdbg.cc vfs_plugin.cc rtc.cc dynamic_linker.cc signal.cc \
+ vfs_plugin.cc rtc.cc dynamic_linker.cc signal.cc \
socket_operations.cc task.cc socket_fs_plugin.cc syscall.cc \
- getpwent.cc
+ getpwent.cc
#
# Pthreads
diff --git a/repos/libports/ports/libc.hash b/repos/libports/ports/libc.hash
index 0bee2b391f..7314c69c7a 100644
--- a/repos/libports/ports/libc.hash
+++ b/repos/libports/ports/libc.hash
@@ -1 +1 @@
-3e6bd3a7705587485b1d4688db9f3922382ee48b
+be4908ff7037258395bb0dfbc5d4c5ffef22f859
diff --git a/repos/libports/recipes/pkg/test-ldso/runtime b/repos/libports/recipes/pkg/test-ldso/runtime
index 5356c0aa15..cba4d78dec 100644
--- a/repos/libports/recipes/pkg/test-ldso/runtime
+++ b/repos/libports/recipes/pkg/test-ldso/runtime
@@ -5,67 +5,66 @@
- [init -> test-ldso] Lib_2_global 11223343*
- [init -> test-ldso] Lib_1_global_1 5060707*
- [init -> test-ldso] Lib_1_global_2 1020303*
- [init -> test-ldso] lib_1_attr_constructor_2 4030200f*
- [init -> test-ldso] lib_1_attr_constructor_1 8070604f*
- [init -> test-ldso] Global_1 5060707*
- [init -> test-ldso] Global_2 1020303*
- [init -> test-ldso] attr_constructor_2 4030200f*
- [init -> test-ldso] attr_constructor_1 8070604f*
+ [init -> test-ldso] Lib_2_global 0x11223343*
+ [init -> test-ldso] Lib_1_global_1 0x5060707*
+ [init -> test-ldso] Lib_1_global_2 0x1020303*
+ [init -> test-ldso] lib_1_attr_constructor_2 0x4030200f*
+ [init -> test-ldso] lib_1_attr_constructor_1 0x8070604f*
+ [init -> test-ldso] Global_1 0x5060707*
+ [init -> test-ldso] Global_2 0x1020303*
+ [init -> test-ldso] attr_constructor_2 0x4030200f*
+ [init -> test-ldso] attr_constructor_1 0x8070604f*
[init -> test-ldso] *
[init -> test-ldso] Dynamic-linker test*
[init -> test-ldso] ===================*
[init -> test-ldso] *
[init -> test-ldso] Global objects and local static objects of program*
[init -> test-ldso] --------------------------------------------------*
- [init -> test-ldso] global_1 5060706*
- [init -> test-ldso] global_2 1020302*
- [init -> test-ldso] Local_1 5060707f*
- [init -> test-ldso] local_1 5060707e*
- [init -> test-ldso] Local_2 1020303f*
- [init -> test-ldso] local_2 1020303e*
- [init -> test-ldso] pod_1 8070604e*
- [init -> test-ldso] pod_2 4030200e*
+ [init -> test-ldso] global_1 0x5060706*
+ [init -> test-ldso] global_2 0x1020302*
+ [init -> test-ldso] Local_1 0x5060707f*
+ [init -> test-ldso] local_1 0x5060707e*
+ [init -> test-ldso] Local_2 0x1020303f*
+ [init -> test-ldso] local_2 0x1020303e*
+ [init -> test-ldso] pod_1 0x8070604e*
+ [init -> test-ldso] pod_2 0x4030200e*
[init -> test-ldso] *
[init -> test-ldso] Access shared lib from program*
[init -> test-ldso] ------------------------------*
- [init -> test-ldso] lib_2_global 11223342*
- [init -> test-ldso] Lib_1_local_3 12345677*
- [init -> test-ldso] lib_1_local_3 12345676*
- [init -> test-ldso] lib_1_pod_1 8070604d*
+ [init -> test-ldso] lib_2_global 0x11223342*
+ [init -> test-ldso] Lib_1_local_3 0x12345677*
+ [init -> test-ldso] lib_1_local_3 0x12345676*
+ [init -> test-ldso] lib_1_pod_1 0x8070604d*
[init -> test-ldso] Libc::read:*
[init -> test-ldso] Error: no plugin found for read(3)*
[init -> test-ldso] Libc::abs(-10): 10*
[init -> test-ldso] *
[init -> test-ldso] Catch exceptions in program*
[init -> test-ldso] ---------------------------*
- [init -> test-ldso] exception in remote procedure call:*
- [init -> test-ldso] Error: ROM-session creation failed (ram_quota=*, cap_quota=*, label="unknown_file")*
- [init -> test-ldso] Error: Could not open ROM session for "unknown_file"*
- [init -> test-ldso] caught*
+ [init -> test-ldso] Error: ROM-session creation failed (ram_quota=*, cap_quota=*, label="unknown_rom")*
+ [init -> test-ldso] Error: Could not open ROM session for "unknown_rom"*
+ [init -> test-ldso] exception in remote procedure call: caught*
[init -> test-ldso] exception in program: caught*
[init -> test-ldso] exception in shared lib: caught*
[init -> test-ldso] exception in dynamic linker: caught*
[init -> test-ldso] *
[init -> test-ldso] global objects and local static objects of shared lib*
[init -> test-ldso] -----------------------------------------------------*
- [init -> test-ldso] lib_1_global_1 5060706*
- [init -> test-ldso] lib_1_global_2 1020302*
- [init -> test-ldso] Lib_1_local_1 5060707f*
- [init -> test-ldso] lib_1_local_1 5060707e*
- [init -> test-ldso] Lib_1_local_2 1020303f*
- [init -> test-ldso] lib_1_local_2 1020303e*
- [init -> test-ldso] lib_1_pod_1 8070604e*
- [init -> test-ldso] lib_1_pod_2 4030200e*
+ [init -> test-ldso] lib_1_global_1 0x5060706*
+ [init -> test-ldso] lib_1_global_2 0x1020302*
+ [init -> test-ldso] Lib_1_local_1 0x5060707f*
+ [init -> test-ldso] lib_1_local_1 0x5060707e*
+ [init -> test-ldso] Lib_1_local_2 0x1020303f*
+ [init -> test-ldso] lib_1_local_2 0x1020303e*
+ [init -> test-ldso] lib_1_pod_1 0x8070604e*
+ [init -> test-ldso] lib_1_pod_2 0x4030200e*
[init -> test-ldso] *
[init -> test-ldso] Access shared lib from another shared lib*
[init -> test-ldso] -----------------------------------------*
- [init -> test-ldso] lib_2_global 11223341*
- [init -> test-ldso] Lib_2_local 55667787*
- [init -> test-ldso] lib_2_local 55667786*
- [init -> test-ldso] lib_2_pod_1 87654320*
+ [init -> test-ldso] lib_2_global 0x11223341*
+ [init -> test-ldso] Lib_2_local 0x55667787*
+ [init -> test-ldso] lib_2_local 0x55667786*
+ [init -> test-ldso] lib_2_pod_1 0x87654320*
[init -> test-ldso] *
[init -> test-ldso] Catch exceptions in shared lib*
[init -> test-ldso] ------------------------------*
@@ -89,19 +88,19 @@
[init -> test-ldso] *
[init -> test-ldso] Destruction*
[init -> test-ldso] -----------*
- [init -> test-ldso] ~Lib_2_local 55667785*
- [init -> test-ldso] ~Lib_1_local_2 1020303d*
- [init -> test-ldso] ~Lib_1_local_1 5060707d*
- [init -> test-ldso] ~Lib_1_local_3 12345675*
- [init -> test-ldso] ~Local_2 1020303d*
- [init -> test-ldso] ~Local_1 5060707d*
- [init -> test-ldso] attr_destructor_2 4030200d*
- [init -> test-ldso] attr_destructor_1 8070604c*
- [init -> test-ldso] ~Global_2 1020301*
- [init -> test-ldso] ~Global_1 5060705*
- [init -> test-ldso] ~Lib_1_global_2 1020301*
- [init -> test-ldso] ~Lib_1_global_1 5060705*
- [init -> test-ldso] ~Lib_2_global 11223340*
+ [init -> test-ldso] ~Lib_2_local 0x55667785*
+ [init -> test-ldso] ~Lib_1_local_2 0x1020303d*
+ [init -> test-ldso] ~Lib_1_local_1 0x5060707d*
+ [init -> test-ldso] ~Lib_1_local_3 0x12345675*
+ [init -> test-ldso] ~Local_2 0x1020303d*
+ [init -> test-ldso] ~Local_1 0x5060707d*
+ [init -> test-ldso] attr_destructor_2 0x4030200d*
+ [init -> test-ldso] attr_destructor_1 0x8070604c*
+ [init -> test-ldso] ~Global_2 0x1020301*
+ [init -> test-ldso] ~Global_1 0x5060705*
+ [init -> test-ldso] ~Lib_1_global_2 0x1020301*
+ [init -> test-ldso] ~Lib_1_global_1 0x5060705*
+ [init -> test-ldso] ~Lib_2_global 0x11223340*
[init] child "test-ldso" exited with exit value 123
diff --git a/repos/libports/src/app/acpica/os.cc b/repos/libports/src/app/acpica/os.cc
index 29fc72f74a..e58690173d 100644
--- a/repos/libports/src/app/acpica/os.cc
+++ b/repos/libports/src/app/acpica/os.cc
@@ -67,13 +67,13 @@ struct Acpica::Statechange
_system_state.update();
- if (!_system_state.is_valid()) return;
+ if (!_system_state.valid()) return;
Genode::Xml_node system(_system_state.local_addr(),
_system_state.size());
- Genode::String<32> state;
- system.attribute("state").value<32>(&state);
+ typedef Genode::String<32> State;
+ State const state = system.attribute_value("state", State());
if (_enable_poweroff && state == "poweroff") {
ACPI_STATUS res0 = AcpiEnterSleepStatePrep(5);
diff --git a/repos/libports/src/app/acpica/printf.cc b/repos/libports/src/app/acpica/printf.cc
index 818b51278e..86269eadbe 100644
--- a/repos/libports/src/app/acpica/printf.cc
+++ b/repos/libports/src/app/acpica/printf.cc
@@ -5,7 +5,7 @@
* under the terms of the GNU Affero General Public License version 3.
*/
-#include
+#include
extern "C"
void AcpiOsPrintf (const char *fmt, ...)
diff --git a/repos/libports/src/app/fetchurl/component.cc b/repos/libports/src/app/fetchurl/component.cc
index a5f8c8786e..0a4ba37206 100644
--- a/repos/libports/src/app/fetchurl/component.cc
+++ b/repos/libports/src/app/fetchurl/component.cc
@@ -147,19 +147,16 @@ struct Fetchurl::Main
catch (...) { }
auto const parse_fn = [&] (Genode::Xml_node node) {
- Url url;
- Path path;
- Url proxy;
- long retry;
- try {
- node.attribute("url").value(&url);
- node.attribute("path").value(path.base(), path.capacity());
+ if (!node.has_attribute("url") || !node.has_attribute("path")) {
+ Genode::error("error reading 'fetch' XML node");
+ return;
}
- catch (...) { Genode::error("error reading 'fetch' XML node"); return; }
- proxy = node.attribute_value("proxy", Url());
- retry = node.attribute_value("retry", 0L);
+ Url const url = node.attribute_value("url", Url());
+ Path const path = node.attribute_value("path", String<256>());
+ Url const proxy = node.attribute_value("proxy", Url());
+ long const retry = node.attribute_value("retry", 0L);
auto *f = new (_heap) Fetch(*this, url, path, proxy, retry);
_fetches.insert(f);
diff --git a/repos/libports/src/app/qt5/qt_launchpad/main.cpp b/repos/libports/src/app/qt5/qt_launchpad/main.cpp
index f038ec3467..23b5e415f9 100644
--- a/repos/libports/src/app/qt5/qt_launchpad/main.cpp
+++ b/repos/libports/src/app/qt5/qt_launchpad/main.cpp
@@ -31,27 +31,34 @@ struct Qt_launchpad_namespace::Local_env : Genode::Env
Local_env(Env &genode_env) : genode_env(genode_env) { }
- Parent &parent() { return genode_env.parent(); }
- Ram_session &ram() { return genode_env.ram(); }
- Cpu_session &cpu() { return genode_env.cpu(); }
- Region_map &rm() { return genode_env.rm(); }
- Pd_session &pd() { return genode_env.pd(); }
- Entrypoint &ep() { return local_ep; }
- Ram_session_capability ram_session_cap() { return genode_env.ram_session_cap(); }
- Cpu_session_capability cpu_session_cap() { return genode_env.cpu_session_cap(); }
- Pd_session_capability pd_session_cap() { return genode_env.pd_session_cap(); }
- Id_space &id_space() { return genode_env.id_space(); }
+ Parent &parent() override { return genode_env.parent(); }
+ Cpu_session &cpu() override { return genode_env.cpu(); }
+ Region_map &rm() override { return genode_env.rm(); }
+ Pd_session &pd() override { return genode_env.pd(); }
+ Entrypoint &ep() override { return local_ep; }
+ Cpu_session_capability cpu_session_cap() override { return genode_env.cpu_session_cap(); }
+ Pd_session_capability pd_session_cap() override { return genode_env.pd_session_cap(); }
+ Id_space &id_space() override { return genode_env.id_space(); }
+
+ /*
+ * \deprecated
+ *
+ * Emulation of deprecated part of the 'Env' interface. To be
+ * removed once they are removed from 'Genode::Env'.
+ */
+ Pd_session &ram() override { return pd(); }
+ Pd_session_capability ram_session_cap() override { return pd_session_cap(); }
Session_capability session(Parent::Service_name const &service_name,
Parent::Client::Id id,
Parent::Session_args const &session_args,
- Affinity const &affinity)
+ Affinity const &affinity) override
{ return genode_env.session(service_name, id, session_args, affinity); }
- void upgrade(Parent::Client::Id id, Parent::Upgrade_args const &args)
+ void upgrade(Parent::Client::Id id, Parent::Upgrade_args const &args) override
{ return genode_env.upgrade(id, args); }
- void close(Parent::Client::Id id) { return genode_env.close(id); }
+ void close(Parent::Client::Id id) override { return genode_env.close(id); }
void exec_static_constructors() override { }
diff --git a/repos/libports/src/drivers/framebuffer/vesa/framebuffer.cc b/repos/libports/src/drivers/framebuffer/vesa/framebuffer.cc
index c907944ece..08e7633347 100644
--- a/repos/libports/src/drivers/framebuffer/vesa/framebuffer.cc
+++ b/repos/libports/src/drivers/framebuffer/vesa/framebuffer.cc
@@ -14,6 +14,7 @@
/* Genode includes */
#include
+#include
#include
#include
diff --git a/repos/libports/src/drivers/framebuffer/vesa/ifx86emu.cc b/repos/libports/src/drivers/framebuffer/vesa/ifx86emu.cc
index 256d396374..33affabd02 100644
--- a/repos/libports/src/drivers/framebuffer/vesa/ifx86emu.cc
+++ b/repos/libports/src/drivers/framebuffer/vesa/ifx86emu.cc
@@ -16,13 +16,13 @@
#include
#include
#include
+#include
+#include
#include
#include
#include
#include
-#include /* XXX for emulating X86emu::printk() */
-
/* local includes */
#include "ifx86emu.h"
#include "framebuffer.h"
@@ -502,7 +502,9 @@ void X86emu::printk(const char *format, ...)
va_list list;
va_start(list, format);
- Genode::vprintf(format, list);
+ char buf[128];
+ String_console sc(buf, sizeof(buf));
+ sc.vprintf(format, list);
va_end(list);
}
diff --git a/repos/libports/src/lib/acpica/pci.cc b/repos/libports/src/lib/acpica/pci.cc
index 40a557023b..442a552786 100644
--- a/repos/libports/src/lib/acpica/pci.cc
+++ b/repos/libports/src/lib/acpica/pci.cc
@@ -178,7 +178,7 @@ ACPI_STATUS AcpiOsReadPciConfiguration (ACPI_PCI_ID *pcidev, UINT32 reg,
break;
default:
Genode::error(__func__, " : unsupported access size ", width);
- Acpica::platform().release_device(client);
+ Acpica::platform().release_device(client.rpc_cap());
return AE_ERROR;
};
@@ -186,13 +186,13 @@ ACPI_STATUS AcpiOsReadPciConfiguration (ACPI_PCI_ID *pcidev, UINT32 reg,
dump_read(__func__, pcidev, reg, *value, width);
- Acpica::platform().release_device(client);
+ Acpica::platform().release_device(client.rpc_cap());
return AE_OK;
}
cap = Acpica::platform().next_device(cap);
- Acpica::platform().release_device(client);
+ Acpica::platform().release_device(client.rpc_cap());
}
dump_error(__func__, pcidev, reg, width);
@@ -239,7 +239,7 @@ ACPI_STATUS AcpiOsWritePciConfiguration (ACPI_PCI_ID *pcidev, UINT32 reg,
break;
default:
Genode::error(__func__, " : unsupported access size ", width);
- Acpica::platform().release_device(client);
+ Acpica::platform().release_device(client.rpc_cap());
return AE_ERROR;
};
@@ -247,13 +247,13 @@ ACPI_STATUS AcpiOsWritePciConfiguration (ACPI_PCI_ID *pcidev, UINT32 reg,
dump_write(__func__, pcidev, reg, value, width);
- Acpica::platform().release_device(client);
+ Acpica::platform().release_device(client.rpc_cap());
return AE_OK;
}
cap = Acpica::platform().next_device(cap);
- Acpica::platform().release_device(client);
+ Acpica::platform().release_device(client.rpc_cap());
}
dump_error(__func__, pcidev, reg, width);
diff --git a/repos/libports/src/lib/gcov/libc/libc.cc b/repos/libports/src/lib/gcov/libc/libc.cc
index 145f0fe725..4fae454d36 100644
--- a/repos/libports/src/lib/gcov/libc/libc.cc
+++ b/repos/libports/src/lib/gcov/libc/libc.cc
@@ -16,8 +16,8 @@
#include
#include
#include
-#include
#include
+#include
#include
#include
#include
@@ -143,19 +143,17 @@ extern "C" FILE *fopen(const char *path, const char *mode)
File_system::WRITE_ONLY, true) };
File_system::seek_off_t seek_offset = 0;
-
+
libgcov_node.for_each_sub_node("annotate",
[&] (Genode::Xml_node annotate_node) {
- Absolute_path source_path;
-
- annotate_node.attribute("source").value(source_path.base(),
- source_path.capacity());
+ typedef Genode::String Source;
+ Source const source = annotate_node.attribute_value("source", Source());
seek_offset += File_system::write(gcov_env->fs,
annotate_file_handle,
- source_path.base(),
- Genode::strlen(source_path.base()),
+ source.string(),
+ Genode::strlen(source.string()),
seek_offset);
seek_offset += File_system::write(gcov_env->fs,
@@ -183,8 +181,7 @@ extern "C" int fprintf(FILE *stream, const char *format, ...)
va_list list;
va_start(list, format);
-
- Genode::vprintf(format, list);
+ vfprintf(stream, format, list);
va_end(list);
return 0;
@@ -232,7 +229,7 @@ extern "C" long ftell(FILE *stream)
extern "C" size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
{
if (stream == stderr) {
- Genode::printf((const char*)ptr);
+ Genode::log(Genode::Cstring((const char*)ptr, size*nmemb));
return 0;
}
@@ -276,11 +273,17 @@ extern "C" size_t strlen(const char *s)
}
-extern "C" int vfprintf(FILE *stream, const char *format, va_list ap)
+extern "C" int vfprintf(FILE *stream, const char *format, va_list list)
{
if (stream != stderr)
return 0;
- Genode::vprintf(format, ap);
- return 0;
+ using namespace Genode;
+
+ char buf[128] { };
+ String_console sc { buf, sizeof(buf) };
+ sc.vprintf(format, list);
+ log(Cstring(buf));
+
+ return sc.len();
}
diff --git a/repos/libports/src/lib/libc/exit.cc b/repos/libports/src/lib/libc/exit.cc
index ebb32aa785..926de9c5ae 100644
--- a/repos/libports/src/lib/libc/exit.cc
+++ b/repos/libports/src/lib/libc/exit.cc
@@ -13,7 +13,6 @@
#include
#include
-#include
extern void genode_exit(int status) __attribute__((noreturn));
diff --git a/repos/libports/src/lib/libc/libc_init.h b/repos/libports/src/lib/libc/libc_init.h
index 2eb90f862f..ea6c304cd6 100644
--- a/repos/libports/src/lib/libc/libc_init.h
+++ b/repos/libports/src/lib/libc/libc_init.h
@@ -42,8 +42,14 @@ namespace Libc {
/**
* Malloc allocator
- */
+ */
void init_malloc(Genode::Allocator &heap);
+
+ /**
+ * Allow thread.cc to access the 'Genode::Env' (needed for the
+ * implementation of condition variables with timeout)
+ */
+ void init_pthread_support(Genode::Env &env);
}
#endif /* _LIBC_INIT_H_ */
diff --git a/repos/libports/src/lib/libc/libc_mem_alloc.cc b/repos/libports/src/lib/libc/libc_mem_alloc.cc
index 03b9e44c19..7cb9e73791 100644
--- a/repos/libports/src/lib/libc/libc_mem_alloc.cc
+++ b/repos/libports/src/lib/libc/libc_mem_alloc.cc
@@ -42,7 +42,7 @@ Libc::Mem_alloc_impl::Dataspace_pool::~Dataspace_pool()
delete ds;
_region_map->detach(local_addr);
- _ram_session->free(ds_cap);
+ _ram->free(ds_cap);
}
}
@@ -54,7 +54,7 @@ int Libc::Mem_alloc_impl::Dataspace_pool::expand(size_t size, Range_allocator *a
/* make new ram dataspace available at our local address space */
try {
- new_ds_cap = _ram_session->alloc(size);
+ new_ds_cap = _ram->alloc(size);
enum { MAX_SIZE = 0, NO_OFFSET = 0, ANY_LOCAL_ADDR = false };
local_addr = _region_map->attach(new_ds_cap, MAX_SIZE, NO_OFFSET,
@@ -63,7 +63,7 @@ int Libc::Mem_alloc_impl::Dataspace_pool::expand(size_t size, Range_allocator *a
catch (Out_of_ram) { return -2; }
catch (Out_of_caps) { return -4; }
catch (Region_map::Region_conflict) {
- _ram_session->free(new_ds_cap);
+ _ram->free(new_ds_cap);
return -3;
}
@@ -147,7 +147,7 @@ static Libc::Mem_alloc *_libc_mem_alloc_rw = nullptr;
static Libc::Mem_alloc *_libc_mem_alloc_rwx = nullptr;
-static void _init_mem_alloc(Genode::Region_map &rm, Genode::Ram_session &ram)
+static void _init_mem_alloc(Genode::Region_map &rm, Genode::Ram_allocator &ram)
{
enum { MEMORY_EXECUTABLE = true };
diff --git a/repos/libports/src/lib/libc/libc_mem_alloc.h b/repos/libports/src/lib/libc/libc_mem_alloc.h
index 4e4ee80e23..981ccaf866 100644
--- a/repos/libports/src/lib/libc/libc_mem_alloc.h
+++ b/repos/libports/src/lib/libc/libc_mem_alloc.h
@@ -8,11 +8,10 @@
#define _LIBC_MEM_ALLOC_H_
/* Genode includes */
-#include
+#include
#include
#include
#include
-#include
#include
namespace Libc {
@@ -43,7 +42,7 @@ namespace Libc {
public:
Genode::Ram_dataspace_capability cap;
- void *local_addr;
+ void *local_addr;
Dataspace(Genode::Ram_dataspace_capability c, void *a)
: cap(c), local_addr(a) {}
@@ -58,18 +57,18 @@ namespace Libc {
{
private:
- Genode::Ram_session *_ram_session; /* ram session for backing store */
- Genode::Region_map *_region_map; /* region map of address space */
- bool const _executable; /* whether to allocate executable dataspaces */
+ Genode::Ram_allocator *_ram; /* ram session for backing store */
+ Genode::Region_map *_region_map; /* region map of address space */
+ bool const _executable; /* whether to allocate executable dataspaces */
public:
/**
* Constructor
*/
- Dataspace_pool(Genode::Ram_session *ram,
+ Dataspace_pool(Genode::Ram_allocator *ram,
Genode::Region_map *rm, bool executable) :
- _ram_session(ram), _region_map(rm),
+ _ram(ram), _region_map(rm),
_executable(executable)
{ }
@@ -91,8 +90,8 @@ namespace Libc {
*/
int expand(Genode::size_t size, Genode::Range_allocator *alloc);
- void reassign_resources(Genode::Ram_session *ram, Genode::Region_map *rm) {
- _ram_session = ram, _region_map = rm; }
+ void reassign_resources(Genode::Ram_allocator *ram, Genode::Region_map *rm) {
+ _ram = ram, _region_map = rm; }
};
Genode::Lock mutable _lock;
@@ -113,7 +112,7 @@ namespace Libc {
public:
Mem_alloc_impl(Genode::Region_map &rm,
- Genode::Ram_session &ram,
+ Genode::Ram_allocator &ram,
bool executable = false)
:
_ds_pool(&ram, &rm, executable),
diff --git a/repos/libports/src/lib/libc/libc_pdbg.cc b/repos/libports/src/lib/libc/libc_pdbg.cc
deleted file mode 100644
index 76b80c75b0..0000000000
--- a/repos/libports/src/lib/libc/libc_pdbg.cc
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * \brief C implementation of 'Genode::printf()'
- * \author Christian Prochaska
- * \date 2013-07-29
- */
-
-/*
- * Copyright (C) 2013-2017 Genode Labs GmbH
- *
- * This file is part of the Genode OS framework, which is distributed
- * under the terms of the GNU Affero General Public License version 3.
- */
-
-#include
-
-extern "C" void genode_printf(const char *format, ...)
-{
- va_list list;
- va_start(list, format);
- Genode::vprintf(format, list);
- va_end(list);
-}
diff --git a/repos/libports/src/lib/libc/libc_pdbg.h b/repos/libports/src/lib/libc/libc_pdbg.h
deleted file mode 100644
index 0374dc82c4..0000000000
--- a/repos/libports/src/lib/libc/libc_pdbg.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * \brief 'PDBG()' implementation for use in '.c' files
- * \author Christian Prochaska
- * \date 2013-07-29
- */
-
-/*
- * Copyright (C) 2013-2017 Genode Labs GmbH
- *
- * This file is part of the Genode OS framework, which is distributed
- * under the terms of the GNU Affero General Public License version 3.
- */
-
-#ifndef _LIBC_PDBG_H_
-#define _LIBC_PDBG_H_
-
-extern void genode_printf(const char *format, ...) __attribute__((format(printf, 1, 2)));
-
-/**
- * Suppress debug messages in release version
- */
-#ifdef GENODE_RELEASE
-#define DO_PDBG 0
-#else
-#define DO_PDBG 1
-#endif /* GENODE_RELEASE */
-
-#define ESC_DBG "\033[33m"
-#define ESC_END "\033[0m"
-
-/**
- * Print debug message with function name
- */
-#define PDBG(fmt, ...) \
- if (DO_PDBG) {\
- genode_printf("%s: " ESC_DBG fmt ESC_END "\n", \
- __PRETTY_FUNCTION__, ##__VA_ARGS__ ); }
-
-#endif /* _LIBC_DEBUG_H_ */
diff --git a/repos/libports/src/lib/libc/patches/pthread_not_implemented.patch b/repos/libports/src/lib/libc/patches/pthread_not_implemented.patch
index 14e914dcf7..6aef198b3e 100644
--- a/repos/libports/src/lib/libc/patches/pthread_not_implemented.patch
+++ b/repos/libports/src/lib/libc/patches/pthread_not_implemented.patch
@@ -9,7 +9,7 @@ From: Christian Prochaska
#include "libc_private.h"
-+#include
++
+
/*
* Weak symbols: All libc internal usage of these functions should
@@ -18,14 +18,14 @@ From: Christian Prochaska
typedef ret (*FUNC_TYPE(name))(void); \
static ret FUNC_EXP(name)(void) \
{ \
-+ PDBG("%s called, not implemented", #name); \
++ puts(#name " called, not implemented"); \
FUNC_TYPE(name) func; \
func = (FUNC_TYPE(name))__thr_jtable[idx][0]; \
return (func()); \
} \
static ret FUNC_INT(name)(void) \
{ \
-+ PDBG("%s called, not implemented", #name); \
++ puts(#name " called, not implemented"); \
FUNC_TYPE(name) func; \
func = (FUNC_TYPE(name))__thr_jtable[idx][1]; \
return (func()); \
@@ -33,14 +33,14 @@ From: Christian Prochaska
typedef ret (*FUNC_TYPE(name))(p0_type); \
static ret FUNC_EXP(name)(p0_type p0) \
{ \
-+ PDBG("%s called, not implemented", #name); \
++ puts(#name " called, not implemented"); \
FUNC_TYPE(name) func; \
func = (FUNC_TYPE(name))__thr_jtable[idx][0]; \
return (func(p0)); \
} \
static ret FUNC_INT(name)(p0_type p0) \
{ \
-+ PDBG("%s called, not implemented", #name); \
++ puts(#name " called, not implemented"); \
FUNC_TYPE(name) func; \
func = (FUNC_TYPE(name))__thr_jtable[idx][1]; \
return (func(p0)); \
@@ -48,14 +48,14 @@ From: Christian Prochaska
typedef ret (*FUNC_TYPE(name))(p0_type, p1_type); \
static ret FUNC_EXP(name)(p0_type p0, p1_type p1) \
{ \
-+ PDBG("%s called, not implemented", #name); \
++ puts(#name " called, not implemented"); \
FUNC_TYPE(name) func; \
func = (FUNC_TYPE(name))__thr_jtable[idx][0]; \
return (func(p0, p1)); \
} \
static ret FUNC_INT(name)(p0_type p0, p1_type p1) \
{ \
-+ PDBG("%s called, not implemented", #name); \
++ puts(#name " called, not implemented"); \
FUNC_TYPE(name) func; \
func = (FUNC_TYPE(name))__thr_jtable[idx][1]; \
return (func(p0, p1)); \
@@ -63,14 +63,14 @@ From: Christian Prochaska
typedef ret (*FUNC_TYPE(name))(p0_type, p1_type, p2_type); \
static ret FUNC_EXP(name)(p0_type p0, p1_type p1, p2_type p2) \
{ \
-+ PDBG("%s called, not implemented", #name); \
++ puts(#name " called, not implemented"); \
FUNC_TYPE(name) func; \
func = (FUNC_TYPE(name))__thr_jtable[idx][0]; \
return (func(p0, p1, p2)); \
} \
static ret FUNC_INT(name)(p0_type p0, p1_type p1, p2_type p2) \
{ \
-+ PDBG("%s called, not implemented", #name); \
++ puts(#name " called, not implemented"); \
FUNC_TYPE(name) func; \
func = (FUNC_TYPE(name))__thr_jtable[idx][1]; \
return (func(p0, p1, p2)); \
diff --git a/repos/libports/src/lib/libc/sysctl.cc b/repos/libports/src/lib/libc/sysctl.cc
index a473186466..c03e6df9ea 100644
--- a/repos/libports/src/lib/libc/sysctl.cc
+++ b/repos/libports/src/lib/libc/sysctl.cc
@@ -52,7 +52,7 @@ extern "C" long sysconf(int name)
case _SC_PAGESIZE: return PAGESIZE;
case _SC_PHYS_PAGES:
- return _global_env->ram().ram_quota().value / PAGESIZE;
+ return _global_env->pd().ram_quota().value / PAGESIZE;
default:
Genode::warning(__func__, "(", name, ") not implemented");
return Libc::Errno(EINVAL);
@@ -131,10 +131,10 @@ extern "C" int __sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp,
case HW_USERMEM:
switch (*oldlenp) {
case 4:
- *(Genode::int32_t*)oldp = _global_env->ram().ram_quota().value;
+ *(Genode::int32_t*)oldp = _global_env->pd().ram_quota().value;
break;
case 8:
- *(Genode::int64_t*)oldp = _global_env->ram().ram_quota().value;
+ *(Genode::int64_t*)oldp = _global_env->pd().ram_quota().value;
break;
default:
return Libc::Errno(EINVAL);
diff --git a/repos/libports/src/lib/libc/task.cc b/repos/libports/src/lib/libc/task.cc
index 4e2012110b..f2ae19c89f 100644
--- a/repos/libports/src/lib/libc/task.cc
+++ b/repos/libports/src/lib/libc/task.cc
@@ -157,26 +157,12 @@ class Libc::Env_implementation : public Libc::Env
** Genode::Env interface **
***************************/
- Parent &parent() override {
- return _env.parent(); }
+ Parent &parent() override { return _env.parent(); }
+ Cpu_session &cpu() override { return _env.cpu(); }
+ Region_map &rm() override { return _env.rm(); }
+ Pd_session &pd() override { return _env.pd(); }
+ Entrypoint &ep() override { return _env.ep(); }
- Ram_session &ram() override {
- return _env.ram(); }
-
- Cpu_session &cpu() override {
- return _env.cpu(); }
-
- Region_map &rm() override {
- return _env.rm(); }
-
- Pd_session &pd() override {
- return _env.pd(); }
-
- Entrypoint &ep() override {
- return _env.ep(); }
-
- Ram_session_capability ram_session_cap() override {
- return _env.ram_session_cap(); }
Cpu_session_capability cpu_session_cap() override {
return _env.cpu_session_cap(); }
@@ -187,12 +173,11 @@ class Libc::Env_implementation : public Libc::Env
return _env.id_space(); }
Session_capability session(Parent::Service_name const &name,
- Parent::Client::Id id,
- Parent::Session_args const &args,
- Affinity const &aff) override {
+ Parent::Client::Id id,
+ Parent::Session_args const &args,
+ Affinity const &aff) override {
return _env.session(name, id, args, aff); }
-
void upgrade(Parent::Client::Id id,
Parent::Upgrade_args const &args) override {
return _env.upgrade(id, args); }
@@ -200,6 +185,15 @@ class Libc::Env_implementation : public Libc::Env
void close(Parent::Client::Id id) override {
return _env.close(id); }
+ /*
+ * \deprecated
+ *
+ * Emulation of deprecated part of the 'Env' interface. To be
+ * removed once they are removed from 'Genode::Env'.
+ */
+ Pd_session &ram() override { return pd(); }
+ Pd_session_capability ram_session_cap() override { return pd_session_cap(); }
+
/* already done by the libc */
void exec_static_constructors() override { }
@@ -978,6 +972,7 @@ void Component::construct(Genode::Env &env)
Libc::init_mem_alloc(env);
Libc::init_dl(env);
Libc::sysctl_init(env);
+ Libc::init_pthread_support(env);
kernel = unmanaged_singleton(env, heap);
diff --git a/repos/libports/src/lib/libc/thread.cc b/repos/libports/src/lib/libc/thread.cc
index 26ab173eac..0c7b742223 100644
--- a/repos/libports/src/lib/libc/thread.cc
+++ b/repos/libports/src/lib/libc/thread.cc
@@ -23,6 +23,7 @@
#include "thread.h"
#include "task.h"
#include "timed_semaphore.h"
+#include "libc_init.h"
using namespace Genode;
@@ -35,7 +36,7 @@ static Env *_env_ptr; /* solely needed to spawn the timeout thread for the
timed semaphore */
-namespace Libc { void init_pthread_support(Env &env) { _env_ptr = &env; } }
+void Libc::init_pthread_support(Genode::Env &env) { _env_ptr = &env; }
static Libc::Timeout_entrypoint &_global_timeout_ep()
diff --git a/repos/libports/src/lib/libc/vfs_plugin.cc b/repos/libports/src/lib/libc/vfs_plugin.cc
index 4f35e18631..fbbe99691a 100644
--- a/repos/libports/src/lib/libc/vfs_plugin.cc
+++ b/repos/libports/src/lib/libc/vfs_plugin.cc
@@ -110,19 +110,18 @@ namespace Libc {
{
private:
- char _buf[Vfs::MAX_PATH_LEN];
+ typedef String Value;
+ Value const _value;
public:
Config_attr(char const *attr_name, char const *default_value)
- {
- Genode::strncpy(_buf, default_value, sizeof(_buf));
- try {
- Libc::config().attribute(attr_name).value(_buf, sizeof(_buf));
- } catch (...) { }
- }
+ :
+ _value(Libc::config().attribute_value(attr_name,
+ Value(default_value)))
+ { }
- char const *string() const { return _buf; }
+ char const *string() const { return _value.string(); }
};
char const *config_rtc() __attribute__((weak));
diff --git a/repos/libports/src/lib/libc/vfs_plugin.h b/repos/libports/src/lib/libc/vfs_plugin.h
index 42f603bf46..848cffc005 100644
--- a/repos/libports/src/lib/libc/vfs_plugin.h
+++ b/repos/libports/src/lib/libc/vfs_plugin.h
@@ -46,38 +46,36 @@ class Libc::Vfs_plugin : public Libc::Plugin
void _open_stdio(Genode::Xml_node const &node, char const *attr,
int libc_fd, unsigned flags)
{
- try {
- Genode::String path;
- struct stat out_stat;
-
- node.attribute(attr).value(&path);
-
- if (stat(path.string(), &out_stat) != 0)
- return;
-
- Libc::File_descriptor *fd = open(path.string(), flags, libc_fd);
- if (fd->libc_fd != libc_fd) {
- Genode::error("could not allocate fd ",libc_fd," for ",path,", "
- "got fd ",fd->libc_fd);
- close(fd);
- return;
- }
-
- /*
- * We need to manually register the path. Normally this is done
- * by '_open'. But we call the local 'open' function directly
- * because we want to explicitly specify the libc fd ID.
- *
- * We have to allocate the path from the libc (done via 'strdup')
- * such that the path can be freed when an stdio fd is closed.
- */
- if (fd->fd_path) { Genode::warning("may leak former FD path memory"); }
- fd->fd_path = strdup(path.string());
-
- } catch (Xml_node::Nonexistent_attribute) {
- /* fill the stdio number with a EBADF */
+ if (!node.has_attribute(attr)) {
Libc::file_descriptor_allocator()->alloc(nullptr, nullptr, libc_fd);
+ return;
}
+
+ typedef Genode::String Path;
+ Path const path = node.attribute_value(attr, Path());
+
+ struct stat out_stat { };
+ if (stat(path.string(), &out_stat) != 0)
+ return;
+
+ Libc::File_descriptor *fd = open(path.string(), flags, libc_fd);
+ if (fd->libc_fd != libc_fd) {
+ Genode::error("could not allocate fd ",libc_fd," for ",path,", "
+ "got fd ",fd->libc_fd);
+ close(fd);
+ return;
+ }
+
+ /*
+ * We need to manually register the path. Normally this is done
+ * by '_open'. But we call the local 'open' function directly
+ * because we want to explicitly specify the libc fd ID.
+ *
+ * We have to allocate the path from the libc (done via 'strdup')
+ * such that the path can be freed when an stdio fd is closed.
+ */
+ if (fd->fd_path) { Genode::warning("may leak former FD path memory"); }
+ fd->fd_path = strdup(path.string());
}
/**
@@ -160,19 +158,18 @@ class Libc::Vfs_plugin : public Libc::Plugin
if (_root_dir.num_dirent("/"))
env.config([&] (Xml_node const &top) {
- try {
- Xml_node const node = top.sub_node("libc");
- try {
- Genode::String path;
- node.attribute("cwd").value(&path);
- chdir(path.string());
- } catch (Xml_node::Nonexistent_attribute) { }
+ top.with_sub_node("libc", [&] (Xml_node node) {
+
+ typedef Genode::String Path;
+
+ if (node.has_attribute("cwd"))
+ chdir(node.attribute_value("cwd", Path()).string());
_open_stdio(node, "stdin", 0, O_RDONLY);
_open_stdio(node, "stdout", 1, O_WRONLY);
_open_stdio(node, "stderr", 2, O_WRONLY);
- } catch (Xml_node::Nonexistent_sub_node) { }
+ });
});
}
diff --git a/repos/libports/src/lib/lwip/platform/printf.cc b/repos/libports/src/lib/lwip/platform/printf.cc
index ff59dc733b..da5026ada4 100644
--- a/repos/libports/src/lib/lwip/platform/printf.cc
+++ b/repos/libports/src/lib/lwip/platform/printf.cc
@@ -12,8 +12,7 @@
*/
/* Genode includes */
-#include
-#include
+#include
#include
#include
@@ -28,7 +27,9 @@ extern "C" {
va_list list;
va_start(list, format);
- Genode::vprintf(format, list);
+ char buf[128] { };
+ Genode::String_console(buf, sizeof(buf)).vprintf(format, list);
+ Genode::log(Genode::Cstring(buf));
va_end(list);
}
diff --git a/repos/libports/src/lib/posix/construct.cc b/repos/libports/src/lib/posix/construct.cc
index a9f909d8f5..a0478409ed 100644
--- a/repos/libports/src/lib/posix/construct.cc
+++ b/repos/libports/src/lib/posix/construct.cc
@@ -61,35 +61,65 @@ static void construct_component(Libc::Env &env)
int arg_i = 0;
int env_i = 0;
node.for_each_sub_node([&] (Xml_node const &node) {
+
/* insert an argument */
- if (node.has_type("arg")) try {
+ if (node.has_type("arg")) {
+
Xml_attribute attr = node.attribute("value");
+ attr.with_raw_value([&] (char const *start, size_t length) {
- Genode::size_t const arg_len = attr.value_size()+1;
- char *arg = argv[arg_i] = (char*)malloc(arg_len);
+ size_t const size = length + 1; /* for null termination */
+
+ argv[arg_i] = (char *)malloc(size);
+
+ Genode::strncpy(argv[arg_i], start, size);
+ });
- attr.value(arg, arg_len);
++arg_i;
-
- } catch (Xml_node::Nonexistent_sub_node) { }
-
+ }
else
/* insert an environment variable */
if (node.has_type("env")) try {
- Xml_attribute key_attr = node.attribute("key");
- Xml_attribute val_attr = node.attribute("value");
- Genode::size_t const pair_len =
- key_attr.value_size() +
- val_attr.value_size() + 1;
- char *env = envp[env_i] = (char*)malloc(pair_len);
+ Xml_attribute const key = node.attribute("key");
+ Xml_attribute const value = node.attribute("value");
+
+ using namespace Genode;
+
+ /*
+ * An environment variable has the form =, followed
+ * by a terminating zero.
+ */
+ size_t const var_size = key .value_size() + 1
+ + value.value_size() + 1;
+
+ envp[env_i] = (char*)malloc(var_size);
+
+ size_t pos = 0;
+
+ /* append characters to env variable with zero termination */
+ auto append = [&] (char const *s, size_t len) {
+
+ if (pos + len >= var_size) {
+ /* this should never happen */
+ warning("truncated environment variable: ", node);
+ return;
+ }
+
+ /* Genode's strncpy always zero-terminates */
+ Genode::strncpy(envp[env_i] + pos, s, len + 1);
+ pos += len;
+ };
+
+ key.with_raw_value([&] (char const *start, size_t length) {
+ append(start, length); });
+
+ append("=", 1);
+
+ value.with_raw_value([&] (char const *start, size_t length) {
+ append(start, length); });
- Genode::size_t off = 0;
- key_attr.value(&env[off], key_attr.value_size()+1);
- off = key_attr.value_size();
- env[off++] = '=';
- val_attr.value(&env[off], val_attr.value_size()+1);
++env_i;
} catch (Xml_node::Nonexistent_sub_node) { }
diff --git a/repos/libports/src/server/acpi_input/main.cc b/repos/libports/src/server/acpi_input/main.cc
index e9aeedcb25..a03a49e886 100644
--- a/repos/libports/src/server/acpi_input/main.cc
+++ b/repos/libports/src/server/acpi_input/main.cc
@@ -166,10 +166,10 @@ struct Transform::Main {
Genode::String<16> key_type("PRESS_RELEASE");
Keys::Type press_release = Keys::Type::PRESS_RELEASE;
- map_node.attribute("acpi").value(&acpi_type);
- map_node.attribute("to_key").value(&to_key);
+ map_node.attribute("acpi").value(acpi_type);
+ map_node.attribute("to_key").value(to_key);
try {
- map_node.attribute("as").value(&key_type);
+ map_node.attribute("as").value(key_type);
if (key_type == "PRESS")
press_release = Keys::Type::PRESS;
else if (key_type == "RELEASE")
@@ -179,7 +179,7 @@ struct Transform::Main {
} catch (Xml_node::Nonexistent_attribute) { }
if (acpi_type == "lid" || acpi_type == "ac") {
- map_node.attribute("value").value(&acpi_value_string);
+ map_node.attribute("value").value(acpi_value_string);
if (acpi_type == "lid") {
if (acpi_value_string == "OPEN")
@@ -197,7 +197,7 @@ struct Transform::Main {
} else
throw 3;
} else
- map_node.attribute("value").value(&acpi_value);
+ map_node.attribute("value").value(acpi_value);
Input::Keycode key_code = Input::Keycode::KEY_UNKNOWN;
@@ -236,12 +236,18 @@ struct Transform::Main {
else
throw 5;
} catch (...) {
- String<64> invalid_node(Genode::Cstring(map_node.addr(),
- map_node.size()));
- Genode::error("map item : '", invalid_node.string(), "'");
- /* we want a well formated configuration ! - die */
- class Invalid_config {} exception;
- throw exception;
+
+ using namespace Genode;
+
+ map_node.with_raw_node([&] (char const *start, size_t length) {
+
+ String<64> invalid_node(Cstring(start, length));
+ error("map item : '", invalid_node, "'");
+
+ /* abort on malformed configuration */
+ class Invalid_config { };
+ throw Invalid_config();
+ });
}
});
@@ -265,7 +271,7 @@ struct Transform::Main {
{
_acpi_ec.update();
- if (!_acpi_ec.is_valid()) return;
+ if (!_acpi_ec.valid()) return;
Xml_node ec_event(_acpi_ec.local_addr(), _acpi_ec.size());
@@ -275,8 +281,8 @@ struct Transform::Main {
long acpi_value = 0;
unsigned long acpi_count = 0;
- data_node.attribute("value").value(&acpi_value);
- data_node.attribute("count").value(&acpi_count);
+ data_node.attribute("value").value(acpi_value);
+ data_node.attribute("count").value(acpi_count);
Keys * key = Keys::find_by_ec(acpi_value);
if (!key)
@@ -309,7 +315,7 @@ struct Transform::Main {
{
_acpi_fixed.update();
- if (!_acpi_fixed.is_valid()) return;
+ if (!_acpi_fixed.valid()) return;
Xml_node fixed_event(_acpi_fixed.local_addr(), _acpi_fixed.size());
@@ -318,8 +324,8 @@ struct Transform::Main {
bool pressed = false;
unsigned long acpi_count = 0;
- pw_node.attribute("value").value(&pressed);
- pw_node.attribute("count").value(&acpi_count);
+ pw_node.attribute("value").value(pressed);
+ pw_node.attribute("count").value(acpi_count);
Keys * key = Keys::find_by_fixed(ACPI_POWER_BUTTON);
if (!key)
@@ -337,7 +343,7 @@ struct Transform::Main {
{
_acpi_battery.update();
- if (!_acpi_battery.is_valid()) return;
+ if (!_acpi_battery.valid()) return;
/* make use of it if we need to ... */
Xml_node battery_node(_acpi_battery.local_addr(),
@@ -350,7 +356,7 @@ struct Transform::Main {
{
_acpi_ac.update();
- if (!_acpi_ac.is_valid()) return;
+ if (!_acpi_ac.valid()) return;
Xml_node ac_node(_acpi_ac.local_addr(), _acpi_ac.size());
@@ -361,7 +367,7 @@ struct Transform::Main {
{
_acpi_lid.update();
- if (!_acpi_lid.is_valid()) return;
+ if (!_acpi_lid.valid()) return;
Xml_node lid_node(_acpi_lid.local_addr(), _acpi_lid.size());
@@ -376,8 +382,8 @@ struct Transform::Main {
unsigned acpi_value = 0;
unsigned long acpi_count = 0;
- node.attribute("value").value(&acpi_value);
- node.attribute("count").value(&acpi_count);
+ node.attribute("value").value(acpi_value);
+ node.attribute("count").value(acpi_count);
enum { STATE_C = 0, STATE_O = 1 };
diff --git a/repos/libports/src/server/fatfs_fs/main.cc b/repos/libports/src/server/fatfs_fs/main.cc
index fa404d3459..74e61c5a77 100644
--- a/repos/libports/src/server/fatfs_fs/main.cc
+++ b/repos/libports/src/server/fatfs_fs/main.cc
@@ -832,9 +832,8 @@ class Fatfs_fs::Root : public Root_component
Directory *session_root_dir = 0;
bool writeable = false;
- enum { ROOT_MAX_LEN = 256 };
- char root[ROOT_MAX_LEN];
- root[0] = 0;
+ typedef String<256> Root_path;
+ Root_path root;
Session_label const label = label_from_args(args);
try {
@@ -845,8 +844,8 @@ class Fatfs_fs::Root : public Root_component
* the session.
*/
try {
- policy.attribute("root").value(root, sizeof(root));
- if (is_root(root)) {
+ policy.attribute("root").value(root);
+ if (is_root(root.string())) {
session_root_dir = &_root_dir;
} else {
/*
@@ -854,14 +853,14 @@ class Fatfs_fs::Root : public Root_component
* leading path delimiter. For performing the
* lookup, we skip the first character.
*/
- if (root[0] != '/')
+ if (root.string()[0] != '/')
throw Lookup_failed();
/* Check if the root path exists */
using namespace Fatfs;
- FRESULT res = f_chdir(root);
+ FRESULT res = f_chdir(root.string());
switch(res) {
case FR_OK:
@@ -892,7 +891,7 @@ class Fatfs_fs::Root : public Root_component
throw Service_denied();
}
- session_root_dir = new (&_md_alloc) Directory(root);
+ session_root_dir = new (&_md_alloc) Directory(root.string());
}
}
catch (Xml_node::Nonexistent_attribute) {
@@ -900,7 +899,7 @@ class Fatfs_fs::Root : public Root_component
throw Service_denied();
}
catch (Lookup_failed) {
- error("session root directory \"", Cstring(root), "\" does not exist");
+ error("session root directory \"", root, "\" does not exist");
throw Service_denied();
}
diff --git a/repos/libports/src/test/ldso/lib_1.cc b/repos/libports/src/test/ldso/lib_1.cc
index f708acaca8..d6bb68de1d 100644
--- a/repos/libports/src/test/ldso/lib_1.cc
+++ b/repos/libports/src/test/ldso/lib_1.cc
@@ -13,7 +13,7 @@
*/
/* Genode includes */
-#include
+#include
#include
/* local includes */
@@ -29,18 +29,18 @@ using namespace Genode;
struct Lib_1_global_1
{
int x { 0x05060708 };
- Lib_1_global_1() { printf("%s %x\n", __func__, --x); }
- void lib_1_global_1() { printf("%s %x\n", __func__, --x); }
- ~Lib_1_global_1() { printf("%s %x\n", __func__, --x); x=0; }
+ Lib_1_global_1() { log(__func__, " ", Hex(--x)); }
+ void lib_1_global_1() { log(__func__, " ", Hex(--x)); }
+ ~Lib_1_global_1() { log(__func__, " ", Hex(--x)); x=0; }
}
lib_1_global_1;
static struct Lib_1_global_2
{
int x { 0x01020304 };
- Lib_1_global_2() { printf("%s %x\n", __func__, --x); }
- void lib_1_global_2() { printf("%s %x\n", __func__, --x); }
- ~Lib_1_global_2() { printf("%s %x\n", __func__, --x); x=0; }
+ Lib_1_global_2() { log(__func__, " ", Hex(--x)); }
+ void lib_1_global_2() { log(__func__, " ", Hex(--x)); }
+ ~Lib_1_global_2() { log(__func__, " ", Hex(--x)); x=0; }
}
lib_1_global_2;
@@ -52,22 +52,22 @@ lib_1_global_2;
struct Lib_1_local_1
{
int x { 0x50607080 };
- Lib_1_local_1() { printf("%s %x\n", __func__, --x); }
- void lib_1_local_1() { printf("%s %x\n", __func__, --x); }
- ~Lib_1_local_1() { printf("%s %x\n", __func__, --x); x=0; }
+ Lib_1_local_1() { log(__func__, " ", Hex(--x)); }
+ void lib_1_local_1() { log(__func__, " ", Hex(--x)); }
+ ~Lib_1_local_1() { log(__func__, " ", Hex(--x)); x=0; }
};
struct Lib_1_local_2
{
int x { 0x10203040 };
- Lib_1_local_2() { printf("%s %x\n", __func__, --x); }
- void lib_1_local_2() { printf("%s %x\n", __func__, --x); }
- ~Lib_1_local_2() { printf("%s %x\n", __func__, --x); x=0; }
+ Lib_1_local_2() { log(__func__, " ", Hex(--x)); }
+ void lib_1_local_2() { log(__func__, " ", Hex(--x)); }
+ ~Lib_1_local_2() { log(__func__, " ", Hex(--x)); x=0; }
};
-Lib_1_local_3::Lib_1_local_3() { printf("%s %x\n", __func__, --x); }
-void Lib_1_local_3::lib_1_local_3() { printf("%s %x\n", __func__, --x); }
-Lib_1_local_3::~Lib_1_local_3() { printf("%s %x\n", __func__, --x); x=0; }
+Lib_1_local_3::Lib_1_local_3() { log(__func__, " ", Hex(--x)); }
+void Lib_1_local_3::lib_1_local_3() { log(__func__, " ", Hex(--x)); }
+Lib_1_local_3::~Lib_1_local_3() { log(__func__, " ", Hex(--x)); x=0; }
Lib_1_local_1 * lib_1_local_1()
{
@@ -105,11 +105,11 @@ static void lib_1_attr_constructor_1()__attribute__((constructor));
void lib_1_attr_destructor_1() __attribute__((destructor));
static void lib_1_attr_destructor_2() __attribute__((destructor));
-static void lib_1_attr_constructor_1() { printf("%s %x\n", __func__, --lib_1_pod_1); }
- void lib_1_attr_constructor_2() { printf("%s %x\n", __func__, --lib_1_pod_2); }
+static void lib_1_attr_constructor_1() { log(__func__, " ", Hex(--lib_1_pod_1)); }
+ void lib_1_attr_constructor_2() { log(__func__, " ", Hex(--lib_1_pod_2)); }
- void lib_1_attr_destructor_1() { printf("%s %x\n", __func__, --lib_1_pod_1); lib_1_pod_1=0; }
-static void lib_1_attr_destructor_2() { printf("%s %x\n", __func__, --lib_1_pod_2); lib_1_pod_2=0; }
+ void lib_1_attr_destructor_1() { log(__func__, " ", Hex(--lib_1_pod_1)); lib_1_pod_1=0; }
+static void lib_1_attr_destructor_2() { log(__func__, " ", Hex(--lib_1_pod_2)); lib_1_pod_2=0; }
@@ -121,31 +121,35 @@ void lib_1_good() { }
void lib_1_test()
{
- printf("global objects and local static objects of shared lib\n");
- printf("-----------------------------------------------------\n");
+ log("global objects and local static objects of shared lib");
+ log("-----------------------------------------------------");
lib_1_global_1.lib_1_global_1();
lib_1_global_2.lib_1_global_2();
lib_1_local_1()->lib_1_local_1();
lib_1_local_2()->lib_1_local_2();
- printf("lib_1_pod_1 %x\n", --lib_1_pod_1);
- printf("lib_1_pod_2 %x\n", --lib_1_pod_2);
- printf("\n");
+ log("lib_1_pod_1 ", Hex(--lib_1_pod_1));
+ log("lib_1_pod_2 ", Hex(--lib_1_pod_2));
+ log("");
- printf("Access shared lib from another shared lib\n");
- printf("-----------------------------------------\n");
+ log("Access shared lib from another shared lib");
+ log("-----------------------------------------");
lib_2_global.lib_2_global();
lib_2_local()->lib_2_local();
- printf("lib_2_pod_1 %x\n", --lib_2_pod_1);
- printf("\n");
+ log("lib_2_pod_1 ", Hex(--lib_2_pod_1));
+ log("");
- printf("Catch exceptions in shared lib\n");
- printf("------------------------------\n");
- printf("exception in lib: ");
- try { exception(); }
- catch (...) { printf("caught\n"); }
+ log("Catch exceptions in shared lib");
+ log("------------------------------");
+ try {
+ exception();
+ error("undelivered exception in lib");
+ }
+ catch (...) { log("exception in lib: caught"); }
- printf("exception in another shared lib: ");
- try { lib_2_exception(); }
- catch(...) { printf("caught\n"); }
- printf("\n");
+ try {
+ lib_2_exception();
+ error("undelivered exception in another shared lib");
+ }
+ catch(...) { log("exception in another shared lib: caught"); }
+ log("");
}
diff --git a/repos/libports/src/test/ldso/lib_2.cc b/repos/libports/src/test/ldso/lib_2.cc
index 4c6f96cd91..02082bba91 100644
--- a/repos/libports/src/test/ldso/lib_2.cc
+++ b/repos/libports/src/test/ldso/lib_2.cc
@@ -11,22 +11,22 @@
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU Affero General Public License version 3.
*/
-#include
+#include
#include "test-ldso.h"
using namespace Genode;
void lib_2_exception() { throw 668; }
-Lib_2_global::Lib_2_global() { printf("%s %x\n", __func__, --x); }
-void Lib_2_global::lib_2_global() { printf("%s %x\n", __func__, --x); }
-Lib_2_global::~Lib_2_global() { printf("%s %x\n", __func__, --x); x=0; }
+Lib_2_global::Lib_2_global() { log(__func__, " ", Hex(--x)); }
+void Lib_2_global::lib_2_global() { log(__func__, " ", Hex(--x)); }
+Lib_2_global::~Lib_2_global() { log(__func__, " ", Hex(--x)); x=0; }
Lib_2_global lib_2_global;
-Lib_2_local::Lib_2_local() { printf("%s %x\n", __func__, --x); }
-void Lib_2_local::lib_2_local() { printf("%s %x\n", __func__, --x); }
-Lib_2_local::~Lib_2_local() { printf("%s %x\n", __func__, --x); x=0; }
+Lib_2_local::Lib_2_local() { log(__func__, " ", Hex(--x)); }
+void Lib_2_local::lib_2_local() { log(__func__, " ", Hex(--x)); }
+Lib_2_local::~Lib_2_local() { log(__func__, " ", Hex(--x)); x=0; }
Lib_2_local * lib_2_local()
{
diff --git a/repos/libports/src/test/ldso/lib_dl.cc b/repos/libports/src/test/ldso/lib_dl.cc
index b6fbd0ab0a..b0f30a0da7 100644
--- a/repos/libports/src/test/ldso/lib_dl.cc
+++ b/repos/libports/src/test/ldso/lib_dl.cc
@@ -13,7 +13,7 @@
*/
/* Genode includes */
-#include
+#include
/* test-local includes */
#include "test-ldso.h"
@@ -24,7 +24,7 @@ struct Global_object
{
Global_object()
{
- Genode::printf("Global object constructed\n");
+ Genode::log("Global object constructed");
}
};
@@ -40,7 +40,7 @@ Global_object global_object;
*/
extern "C" void lib_dl_symbol()
{
- Genode::printf("called (from '%s')\n", __func__);
- Genode::printf("Call 'lib_1_good': ");
+ Genode::log("called (from '", __func__, "')");
+ Genode::log("Call 'lib_1_good': ");
lib_1_good();
}
diff --git a/repos/libports/src/test/ldso/main.cc b/repos/libports/src/test/ldso/main.cc
index ae7b6df168..7bd61a44e3 100644
--- a/repos/libports/src/test/ldso/main.cc
+++ b/repos/libports/src/test/ldso/main.cc
@@ -11,7 +11,7 @@
* under the terms of the GNU Affero General Public License version 3.
*/
-#include
+#include
#include
#include
#include
@@ -37,18 +37,18 @@ namespace Libc {
struct Global_1
{
int x { 0x05060708 };
- Global_1() { printf("%s %x\n", __func__, --x); }
- void global_1() { printf("%s %x\n", __func__, --x); }
- ~Global_1() { printf("%s %x\n", __func__, --x); x=0; }
+ Global_1() { log(__func__, " ", Hex(--x)); }
+ void global_1() { log(__func__, " ", Hex(--x)); }
+ ~Global_1() { log(__func__, " ", Hex(--x)); x=0; }
}
global_1;
static struct Global_2
{
int x { 0x01020304 };
- Global_2() { printf("%s %x\n", __func__, --x); }
- void global_2() { printf("%s %x\n", __func__, --x); }
- ~Global_2() { printf("%s %x\n", __func__, --x); x=0; }
+ Global_2() { log(__func__, " ", Hex(--x)); }
+ void global_2() { log(__func__, " ", Hex(--x)); }
+ ~Global_2() { log(__func__, " ", Hex(--x)); x=0; }
}
global_2;
@@ -60,17 +60,17 @@ global_2;
struct Local_1
{
int x { 0x50607080 };
- Local_1() { printf("%s %x\n", __func__, --x); }
- void local_1() { printf("%s %x\n", __func__, --x); }
- ~Local_1() { printf("%s %x\n", __func__, --x); x=0; }
+ Local_1() { log(__func__, " ", Hex(--x)); }
+ void local_1() { log(__func__, " ", Hex(--x)); }
+ ~Local_1() { log(__func__, " ", Hex(--x)); x=0; }
};
struct Local_2
{
int x { 0x10203040 };
- Local_2() { printf("%s %x\n", __func__, --x); }
- void local_2() { printf("%s %x\n", __func__, --x); }
- ~Local_2() { printf("%s %x\n", __func__, --x); x=0; }
+ Local_2() { log(__func__, " ", Hex(--x)); }
+ void local_2() { log(__func__, " ", Hex(--x)); }
+ ~Local_2() { log(__func__, " ", Hex(--x)); x=0; }
};
Local_1 * local_1()
@@ -99,11 +99,11 @@ static void attr_constructor_1()__attribute__((constructor));
void attr_destructor_1() __attribute__((destructor));
static void attr_destructor_2() __attribute__((destructor));
-static void attr_constructor_1() { printf("%s %x\n", __func__, --pod_1); }
- void attr_constructor_2() { printf("%s %x\n", __func__, --pod_2); }
+static void attr_constructor_1() { log(__func__, " ", Hex(--pod_1)); }
+ void attr_constructor_2() { log(__func__, " ", Hex(--pod_2)); }
- void attr_destructor_1() { printf("%s %x\n", __func__, --pod_1); pod_1=0; }
-static void attr_destructor_2() { printf("%s %x\n", __func__, --pod_2); pod_2=0; }
+ void attr_destructor_1() { log(__func__, " ", Hex(--pod_1)); pod_1=0; }
+static void attr_destructor_2() { log(__func__, " ", Hex(--pod_2)); pod_2=0; }
/********************************************
@@ -125,14 +125,18 @@ static void test_stack_align(char const *fmt, ...)
va_list list;
va_start(list, fmt);
- vprintf(fmt, list);
+ char buf[128] { };
+ String_console(buf, sizeof(buf)).vprintf(fmt, list);
+ log(Cstring(buf));
va_end(list);
}
-struct Test_stack_align_thread : Thread_deprecated<0x2000>
+struct Test_stack_align_thread : Thread
{
- Test_stack_align_thread() : Thread_deprecated<0x2000>("test_stack_align") { }
+ Test_stack_align_thread(Env &env)
+ : Thread(env, "test_stack_align", 0x2000) { }
+
void entry() { test_stack_align("%f\n%g\n", 3.142, 2.718); }
};
@@ -143,12 +147,12 @@ struct Test_stack_align_thread : Thread_deprecated<0x2000>
struct Object_base
{
- virtual void func() { printf("'Object_base' called: failed\n"); }
+ virtual void func() { log("'Object_base' called: failed"); }
};
struct Object : Object_base
{
- void func() { printf("'Object' called: good\n"); }
+ void func() { log("'Object' called: good"); }
};
void test_dynamic_cast_call(Object_base *o)
@@ -190,77 +194,88 @@ void Libc::Component::construct(Libc::Env &env)
{
static Heap heap(env.ram(), env.rm());
- printf("\n");
- printf("Dynamic-linker test\n");
- printf("===================\n");
- printf("\n");
+ using Genode::log;
- printf("Global objects and local static objects of program\n");
- printf("--------------------------------------------------\n");
+ log("");
+ log("Dynamic-linker test");
+ log("===================");
+ log("");
+
+ log("Global objects and local static objects of program");
+ log("--------------------------------------------------");
global_1.global_1();
global_2.global_2();
local_1()->local_1();
local_2()->local_2();
- printf("pod_1 %x\n", --pod_1);
- printf("pod_2 %x\n", --pod_2);
- printf("\n");
+ log("pod_1 ", Hex(--pod_1));
+ log("pod_2 ", Hex(--pod_2));
+ log("");
- printf("Access shared lib from program\n");
- printf("------------------------------\n");
+ log("Access shared lib from program");
+ log("------------------------------");
lib_2_global.lib_2_global();
lib_1_local_3()->lib_1_local_3();
- printf("lib_1_pod_1 %x\n", --pod_1);
+ log("lib_1_pod_1 ", Hex(--pod_1));
int fd = STDERR_FILENO + 1;
- char buf[2];
- printf("Libc::read:\n");
+ char buf[2] { };
+ log("Libc::read:");
Libc::read(fd, buf, 2);
int i = Libc::abs(-10);
- printf("Libc::abs(-10): %d\n", i);
- printf("\n");
+ log("Libc::abs(-10): ", i);
+ log("");
- printf("Catch exceptions in program\n");
- printf("---------------------------\n");
- printf("exception in remote procedure call:\n");
- try { Rom_connection rom(env, "unknown_file"); }
- catch (Rom_connection::Rom_connection_failed) { printf("caught\n"); }
+ log("Catch exceptions in program");
+ log("---------------------------");
+ try {
+ Rom_connection rom(env, "unknown_rom");
+ error("undelivered exception in remote procedure call");
+ }
+ catch (Rom_connection::Rom_connection_failed) {
+ log("exception in remote procedure call: caught");
+ }
- printf("exception in program: ");
- try { exception(); }
- catch (int) { printf("caught\n"); }
+ try {
+ exception();
+ error("undelivered exception in program");
+ }
+ catch (int) { log("exception in program: caught"); }
- printf("exception in shared lib: ");
- try { lib_1_exception(); }
- catch (Region_map::Region_conflict) { printf("caught\n"); }
+ try {
+ lib_1_exception();
+ error("undelivered exception in shared lib");
+ }
+ catch (Region_map::Region_conflict) { log("exception in shared lib: caught"); }
- printf("exception in dynamic linker: ");
- try { __ldso_raise_exception(); }
- catch (Genode::Exception) { printf("caught\n"); }
- printf("\n");
+ try {
+ __ldso_raise_exception();
+ log("undelivered exception in dynamic linker");
+ }
+ catch (Genode::Exception) { log("exception in dynamic linker: caught"); }
+ log("");
lib_1_test();
- printf("Test stack alignment\n");
- printf("--------------------\n");
+ log("Test stack alignment");
+ log("--------------------");
test_stack_align("%f\n%g\n", 3.142, 2.718);
- Test_stack_align_thread t;
+ Test_stack_align_thread t { env };
t.start();
t.join();
- printf("\n");
- printf("Dynamic cast\n");
- printf("------------\n");
+ log("Dynamic cast");
+ log("------------");
test_dynamic_cast(heap);
- printf("\n");
+ log("");
- printf("Shared-object API\n");
- printf("-----------------\n");
+ log("Shared-object API");
+ log("-----------------");
test_shared_object_api(env, heap);
- printf("\n");
+ log("");
- printf("Destruction\n");
- printf("-----------\n");
+ log("Destruction");
+ log("-----------");
Libc::exit(123);
}
diff --git a/repos/libports/src/test/libc_vfs/main.cc b/repos/libports/src/test/libc_vfs/main.cc
index 346c979a8f..ae3514859a 100644
--- a/repos/libports/src/test/libc_vfs/main.cc
+++ b/repos/libports/src/test/libc_vfs/main.cc
@@ -50,15 +50,15 @@ static void test_write_read(Genode::Xml_node node)
try {
Genode::Xml_node config = node.sub_node("write-read");
- try { config.attribute("rounds").value(&rounds); } catch (...) { }
+ rounds = config.attribute_value("rounds", rounds);
- Genode::Number_of_bytes n;
+ Genode::Number_of_bytes n { };
try {
- config.attribute("size").value(&n);
+ config.attribute("size").value(n);
size = n;
} catch (...) { }
try {
- config.attribute("buffer_size").value(&n);
+ config.attribute("buffer_size").value(n);
buffer_size = n;
} catch (...) { }
} catch (...) { }
@@ -111,7 +111,7 @@ static void test(Genode::Xml_node node)
unsigned int iterations = 1;
try {
- node.sub_node("iterations").attribute("value").value(&iterations);
+ node.sub_node("iterations").attribute("value").value(iterations);
} catch(...) { }
for (unsigned int i = 0; i < iterations; i++) {
diff --git a/repos/libports/src/test/libc_vfs/target.mk b/repos/libports/src/test/libc_vfs/target.mk
index 2e3d707aa1..51f9740b39 100644
--- a/repos/libports/src/test/libc_vfs/target.mk
+++ b/repos/libports/src/test/libc_vfs/target.mk
@@ -1,5 +1,3 @@
TARGET = test-libc_vfs
LIBS = libc base
SRC_CC = main.cc
-
-CC_CXX_WARN_STRICT =
diff --git a/repos/libports/src/test/lwip/udp/client/main.cc b/repos/libports/src/test/lwip/udp/client/main.cc
index 8a81d98204..68ab035a2f 100644
--- a/repos/libports/src/test/lwip/udp/client/main.cc
+++ b/repos/libports/src/test/lwip/udp/client/main.cc
@@ -43,35 +43,43 @@ static void test(Libc::Env &env)
continue;
}
/* read server IP address and port */
- Ipv4_addr_str serv_addr;
- unsigned port = 0;
Attached_rom_dataspace config(env, "config");
Xml_node config_node = config.xml();
- try { config_node.attribute("server_ip").value(&serv_addr); }
- catch (...) {
- error("cannot read attribute 'server_ip'");
+
+ auto check_attr = [&] (char const *attr)
+ {
+ if (config_node.has_attribute(attr))
+ return true;
+
+ error("cannot read attribute '", attr, "'");
+ return false;
+ };
+
+ if (!check_attr("server_ip") || !check_attr("server_port"))
break;
- }
- try { config_node.attribute("server_port").value(&port); }
- catch (...) {
- error("cannot read attribute 'server_port'");
- break;
- }
+
+ Ipv4_addr_str const server_addr =
+ config_node.attribute_value("server_ip", Ipv4_addr_str());
+
+ unsigned const port =
+ config_node.attribute_value("server_port", 0U);
+
/* create server socket address */
struct sockaddr_in addr;
socklen_t addr_sz = sizeof(addr);
addr.sin_port = htons(port);
addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = inet_addr(serv_addr.string());
+ addr.sin_addr.s_addr = inet_addr(server_addr.string());
/* send test message */
enum { BUF_SZ = 1024 };
- char buf[BUF_SZ];
- ::snprintf(buf, BUF_SZ, "UDP server at %s:%u", serv_addr.string(), port);
- if (sendto(s, buf, BUF_SZ, 0, (struct sockaddr*)&addr, addr_sz) != BUF_SZ) {
+ String const message("UDP server at ", server_addr, ":", port);
+ if (sendto(s, message.string(), BUF_SZ, 0, (struct sockaddr*)&addr, addr_sz) != BUF_SZ) {
continue;
}
+
/* receive and print what has been received */
+ char buf[BUF_SZ] { };
if (recvfrom(s, buf, BUF_SZ, 0, (struct sockaddr*)&addr, &addr_sz) != BUF_SZ) {
continue;
}
diff --git a/repos/libports/src/test/lwip/udp/server/main.cc b/repos/libports/src/test/lwip/udp/server/main.cc
index 124c5ad0a6..87e5e16d91 100644
--- a/repos/libports/src/test/lwip/udp/server/main.cc
+++ b/repos/libports/src/test/lwip/udp/server/main.cc
@@ -43,7 +43,7 @@ static void test(Libc::Env & env)
/* read server port */
unsigned port = 0;
env.config([&] (Xml_node config_node) {
- try { config_node.attribute("port").value(&port); }
+ try { config_node.attribute("port").value(port); }
catch (...) {
throw Read_port_attr_failed();
}
diff --git a/repos/libports/src/test/moon/main.cc b/repos/libports/src/test/moon/main.cc
index 8c7b713452..348822037c 100644
--- a/repos/libports/src/test/moon/main.cc
+++ b/repos/libports/src/test/moon/main.cc
@@ -27,8 +27,8 @@ namespace Moon {
struct Main;
struct Env
{
- Timer::Session &timer;
- Genode::Ram_session &ram;
+ Timer::Session &timer;
+ Genode::Pd_session &pd;
};
Env *env;
}
@@ -63,7 +63,7 @@ static int l_quota(lua_State *lua)
return 0;
}
- lua_pushnumber(lua, Moon::env->ram.ram_quota().value);
+ lua_pushnumber(lua, Moon::env->pd.ram_quota().value);
return 1;
}
@@ -126,7 +126,7 @@ struct Moon::Main
Timer::Connection _timer { _env };
- Moon::Env _moon_env { _timer, _env.ram() };
+ Moon::Env _moon_env { _timer, _env.pd() };
Main(Libc::Env &env) : _env(env)
{