From: Olaf Wintermann Date: Tue, 9 Sep 2025 14:20:53 +0000 (+0200) Subject: add Toolkit getConfigPath and getConfigFilePath X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=f332d8a9e1642390b1eddaff1ae0105935c1ad9b;p=rssreader.git add Toolkit getConfigPath and getConfigFilePath --- diff --git a/ui-java/src/main/java/de/unixwork/ui/Toolkit.java b/ui-java/src/main/java/de/unixwork/ui/Toolkit.java index 8a8dbc5..abf7868 100644 --- a/ui-java/src/main/java/de/unixwork/ui/Toolkit.java +++ b/ui-java/src/main/java/de/unixwork/ui/Toolkit.java @@ -620,4 +620,35 @@ public class Toolkit { throw new RuntimeException(e); } } + + public static String getConfigPath() { + ToolkitFuncs ui = ToolkitFuncs.getInstance(); + try { + MemorySegment cstr = (MemorySegment)ui.getappdir.invoke(); + if(cstr == MemorySegment.NULL) { + return null; + } + long len = (long)ui.strlen.invoke(cstr); + cstr = cstr.reinterpret(len+1); + return cstr.getString(0); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + + public static String getConfigFilePath(String fileName) { + ToolkitFuncs ui = ToolkitFuncs.getInstance(); + try(Arena arena = Arena.ofConfined()) { + MemorySegment fileNameCstr = arena.allocateFrom(fileName); + MemorySegment cstr = (MemorySegment)ui.configfile.invoke(fileNameCstr); + if(cstr == MemorySegment.NULL) { + return null; + } + long len = (long)ui.strlen.invoke(cstr); + cstr = cstr.reinterpret(len+1); + return cstr.getString(0); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } } 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 19a4bcb..4eabb3b 100644 --- a/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java +++ b/ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java @@ -78,6 +78,9 @@ public class ToolkitFuncs { public MethodHandle ui_malloc; public MethodHandle ui_free; + public MethodHandle getappdir; + public MethodHandle configfile; + // some libc stuff public MethodHandle malloc; public MethodHandle free; @@ -170,6 +173,9 @@ public class ToolkitFuncs { MemorySegment ui_malloc_addr = lib.find("ui_malloc").orElseThrow(); MemorySegment ui_free_addr = lib.find("ui_free").orElseThrow(); + MemorySegment getappdir_addr = lib.find("getappdir").orElseThrow(); + MemorySegment configfile_addr = lib.find("configfile").orElseThrow(); + MemorySegment malloc_addr = lib.find("malloc").orElseThrow(); MemorySegment free_addr = lib.find("free").orElseThrow(); MemorySegment strlen_addr = lib.find("strlen").orElseThrow(); @@ -244,6 +250,9 @@ public class ToolkitFuncs { call_mainthread = linker.downcallHandle(call_mainthread_addr, sigv_mm); + getappdir = linker.downcallHandle(getappdir_addr, sigm); + configfile = linker.downcallHandle(configfile_addr, sigm_m); + ui_malloc = linker.downcallHandle(ui_malloc_addr, sigm_ml); ui_free = linker.downcallHandle(ui_free_addr, sigv_mm);