diff --git a/src/org/jruby/ext/posix/HeapStruct.java b/src/org/jruby/ext/posix/HeapStruct.java index 02530f2..5f51e0b 100644 --- a/src/org/jruby/ext/posix/HeapStruct.java +++ b/src/org/jruby/ext/posix/HeapStruct.java @@ -34,6 +34,7 @@ package org.jruby.ext.posix; import com.sun.jna.FromNativeContext; import com.sun.jna.Platform; import com.sun.jna.Pointer; +import java.lang.reflect.Constructor; import java.nio.ByteBuffer; import java.nio.ByteOrder; @@ -96,6 +97,19 @@ public class HeapStruct implements com.sun.jna.NativeMapped { this.offset = addField(size, align); } } + @SuppressWarnings("unchecked") + protected T[] array(T[] array) { + for (int i = 0; i < array.length; ++i) { + try { + Class arrayClass = array.getClass().getComponentType(); + Constructor ctor = arrayClass.getDeclaredConstructor(new Class[] { arrayClass.getEnclosingClass() }); + array[i] = (T) ctor.newInstance(new Object[] { HeapStruct.this }); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + return array; + } protected class Int8 extends Field { public Int8() { super(8); diff --git a/src/org/jruby/ext/posix/MacOSHeapFileStat.java b/src/org/jruby/ext/posix/MacOSHeapFileStat.java index ae72023..c2e8303 100644 --- a/src/org/jruby/ext/posix/MacOSHeapFileStat.java +++ b/src/org/jruby/ext/posix/MacOSHeapFileStat.java @@ -53,8 +53,7 @@ public class MacOSHeapFileStat extends BaseHeapFileStat { public final Int32 st_flags = new Int32(); public final Int32 st_gen = new Int32(); public final Int32 st_lspare = new Int32(); - public final Int64 st_qspare0 = new Int64(); - public final Int64 st_qspare1 = new Int64(); + public final Int64[] st_qspare = array(new Int64[2]); public MacOSHeapFileStat() { this(null);