From: Olaf Wintermann Date: Tue, 12 Aug 2025 14:15:22 +0000 (+0200) Subject: fix UiString.toString() X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=8db9a9e2851d8d20fec7ef000e2bd6fdef37d613;p=rssreader.git fix UiString.toString() --- diff --git a/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java b/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java index b8e2a25..66a9875 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java @@ -68,11 +68,13 @@ public class ToolkitFuncs { // some libc stuff public MethodHandle malloc; public MethodHandle free; + public MethodHandle strlen; private ToolkitFuncs(Linker linker, SymbolLookup lib) { FunctionDescriptor sigm = FunctionDescriptor.of(ValueLayout.ADDRESS); FunctionDescriptor sigm_m = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS); FunctionDescriptor sigi_m = FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.ADDRESS); + FunctionDescriptor sigl_m = FunctionDescriptor.of(ValueLayout.JAVA_LONG, ValueLayout.ADDRESS); FunctionDescriptor sigm_mm = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS); FunctionDescriptor sigv_mm = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS, ValueLayout.ADDRESS); FunctionDescriptor sigm_ml = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.JAVA_LONG); @@ -141,6 +143,7 @@ public class ToolkitFuncs { MemorySegment malloc_addr = lib.find("malloc").orElseThrow(); MemorySegment free_addr = lib.find("free").orElseThrow(); + MemorySegment strlen_addr = lib.find("strlen").orElseThrow(); object_get_context = linker.downcallHandle(object_get_context_addr, sigm_m); @@ -204,6 +207,7 @@ public class ToolkitFuncs { malloc = linker.downcallHandle(malloc_addr, sigm_l); free = linker.downcallHandle(free_addr, sigv_m); + strlen = linker.downcallHandle(strlen_addr, sigl_m); } static ToolkitFuncs getInstance() { diff --git a/ui-java/src/main/java/de/unixwork/ui/UiString.java b/ui-java/src/main/java/de/unixwork/ui/UiString.java index 14228e1..f9ce005 100644 --- a/ui-java/src/main/java/de/unixwork/ui/UiString.java +++ b/ui-java/src/main/java/de/unixwork/ui/UiString.java @@ -25,6 +25,8 @@ public class UiString { ToolkitFuncs ui = ToolkitFuncs.getInstance(); try { MemorySegment cstr = (MemorySegment) ui.string_get.invoke(valuePtr); + long length = (long)ui.strlen.invoke(cstr); + cstr = cstr.reinterpret(length+1); if (cstr != null && cstr.address() != 0) { return cstr.getString(0); }