From 8db9a9e2851d8d20fec7ef000e2bd6fdef37d613 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Tue, 12 Aug 2025 16:15:22 +0200 Subject: [PATCH] fix UiString.toString() --- ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java | 4 ++++ ui-java/src/main/java/de/unixwork/ui/UiString.java | 2 ++ 2 files changed, 6 insertions(+) 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); } -- 2.47.3