From d6be19db1d333a4b3fe19df84e811f2e52ae8faf Mon Sep 17 00:00:00 2001 From: Daniel Widdis Date: Sun, 6 Mar 2022 14:57:02 -0800 Subject: [PATCH] Fix array mappings --- .../sun/jna/platform/unix/solaris/Kstat2.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/contrib/platform/src/com/sun/jna/platform/unix/solaris/Kstat2.java b/contrib/platform/src/com/sun/jna/platform/unix/solaris/Kstat2.java index 6861fd4940..ae66d4c7b0 100644 --- a/contrib/platform/src/com/sun/jna/platform/unix/solaris/Kstat2.java +++ b/contrib/platform/src/com/sun/jna/platform/unix/solaris/Kstat2.java @@ -93,9 +93,8 @@ class Kstat2Handle extends PointerType { /** * Instantiates and opens a new Kstat2Handle with no filtering. All of the - * system's kstats will be available. Convenience method for - * {@link Kstat2#kstat2_open(PointerByReference, Kstat2MatcherList)} with a null - * matcher list. + * system's kstats will be available. Convenience method for {open()} with a + * null matcher list. */ public Kstat2Handle() { this(null); @@ -298,11 +297,21 @@ public Object getValue(String name) { case KSTAT2_NVVT_INT: return nv.data.integerVal; case KSTAT2_NVVT_INTS: - return nv.data.integers.addr.getLongArray(0, nv.data.integers.len); + Pointer[] intPtrArray = nv.data.integers.addr.getPointerArray(0, nv.data.integers.len); + long[] integerArr = new long[intPtrArray.length]; + for (int i = 0; i < integerArr.length; i++) { + integerArr[i] = intPtrArray[i].getLong(0); + } + return integerArr; case KSTAT2_NVVT_STR: - return nv.data.strings.addr.getString(0); + return nv.data.stringVal; case KSTAT2_NVVT_STRS: - return nv.data.strings.addr.getStringArray(0, nv.data.strings.len); + Pointer[] strPtrArray = nv.data.strings.addr.getPointerArray(0, nv.data.strings.len); + String[] stringArray = new String[strPtrArray.length]; + for (int i = 0; i < stringArray.length; i++) { + stringArray[i] = strPtrArray[i].getString(0); + } + return stringArray; default: return null; } @@ -327,6 +336,7 @@ public static class UNION extends Union { public Kstat2Map map; public long integerVal; public IntegersArr integers; + public String stringVal; public StringsArr strings; @FieldOrder({ "addr", "len" }) @@ -365,6 +375,8 @@ public void read() { data.setType(IntegersArr.class); break; case KSTAT2_NVVT_STR: + data.setType(String.class); + break; case KSTAT2_NVVT_STRS: data.setType(StringsArr.class); break; @@ -423,7 +435,7 @@ public void read() { /** * Allocates a new matcher list to allow matchers to be provided to the - * {@link Kstat2#kstat2_open(PointerByReference, Kstat2MatcherList)} function. + * {@link #kstat2_open()} function. * * @param matchers * Receives a pointer to the allocated matcher list. @@ -460,9 +472,6 @@ public void read() { * The string to match. * @param matchers * The list to which to append the matcher. - * @return Upon successful completion, returns a int value of - * {@link Kstat2#KSTAT2_S_OK}. If an error occurs a value other than - * KSTAT2_S_OK is returned. */ int kstat2_add_matcher(int type, String match, Kstat2MatcherList matchers);