From: Olaf Wintermann Date: Sat, 28 Jun 2025 05:47:23 +0000 (+0200) Subject: fix MemorySegment access X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=e25ca54fa6c47ea835ce0d9e456c9829a6c648d3;p=rssreader.git fix MemorySegment access --- diff --git a/ui-java/src/main/java/de/unixwork/ui/CUtils.java b/ui-java/src/main/java/de/unixwork/ui/CUtils.java index 49e364d..0e74ac8 100644 --- a/ui-java/src/main/java/de/unixwork/ui/CUtils.java +++ b/ui-java/src/main/java/de/unixwork/ui/CUtils.java @@ -17,7 +17,7 @@ public class CUtils { byte[] utf8 = s.getBytes(StandardCharsets.UTF_8); try { long size = utf8.length + 1; - MemorySegment cstr = (MemorySegment) tk.malloc.invoke(size); + MemorySegment cstr = ((MemorySegment) tk.malloc.invoke(size)).reinterpret(size); ByteBuffer buf = cstr.asByteBuffer(); buf.put(utf8); buf.put((byte) 0); 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 60e3dea..fcc1d59 100644 --- a/ui-java/src/main/java/de/unixwork/ui/Toolkit.java +++ b/ui-java/src/main/java/de/unixwork/ui/Toolkit.java @@ -343,19 +343,38 @@ public class Toolkit { * list getvaluefunc wrapper */ public static MemorySegment getValue(MemorySegment list, MemorySegment elm, int row, int col, MemorySegment userdata, MemorySegment freeValue) { + if(userdata == MemorySegment.NULL) { + return MemorySegment.NULL; + } + userdata = userdata.reinterpret(16); // long[2] long ctxPtr = userdata.getAtIndex(ValueLayout.JAVA_LONG, 0); long converterIndex = userdata.getAtIndex(ValueLayout.JAVA_LONG, 1); - long listCtxPtr = list.getAtIndex(ValueLayout.JAVA_LONG, 0); - long listIndex = list.getAtIndex(ValueLayout.JAVA_LONG, 1); + ListFuncs listfuncs = ListFuncs.getInstance(); + + MemorySegment listdata = null; // long[2] + try { + listdata = ((MemorySegment)listfuncs.list_get_data.invoke(list)).reinterpret(16); + } catch (Throwable e) { + throw new RuntimeException(e); + } + long listCtxPtr = listdata.getAtIndex(ValueLayout.JAVA_LONG, 0); + long listIndex = listdata.getAtIndex(ValueLayout.JAVA_LONG, 1); Context listCtx = Toolkit.getInstance().getContext(listCtxPtr); UiList uilist = listCtx.getList((int)listIndex); + Object listElm = null; + try { + listElm = uilist.get((int) row); + } catch (Throwable e) { + return MemorySegment.NULL; + } + Context ctx = Toolkit.getInstance().getContext(ctxPtr); ListValueConverter conv = ctx.getValueConverter((int)converterIndex); - Object value = conv.getValue(null, col); + Object value = conv.getValue(listElm, col); if(value instanceof String) { - freeValue.setAtIndex(ValueLayout.JAVA_BOOLEAN, 0, true); + freeValue.reinterpret(1).setAtIndex(ValueLayout.JAVA_BOOLEAN, 0, true); return CUtils.cstring((String)value); }