diff --git a/contrib/platform/src/com/sun/jna/platform/win32/IPHlpAPI.java b/contrib/platform/src/com/sun/jna/platform/win32/IPHlpAPI.java index 4e4e4e7cff..e869bab66b 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/IPHlpAPI.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/IPHlpAPI.java @@ -174,12 +174,18 @@ class IP_ADDRESS_STRING extends Structure { */ @FieldOrder({ "Next", "IpAddress", "IpMask", "Context" }) class IP_ADDR_STRING extends Structure { - public IP_ADDR_STRING.ByReference Next; + public Pointer Next; // IP_ADDR_STRING public IP_ADDRESS_STRING IpAddress; public IP_ADDRESS_STRING IpMask; public int Context; - public static class ByReference extends IP_ADDR_STRING implements Structure.ByReference { + public IP_ADDR_STRING(Pointer p) { + super(p); + read(); + } + + public IP_ADDR_STRING() { + super(); } } @@ -195,7 +201,7 @@ public static class ByReference extends IP_ADDR_STRING implements Structure.ByRe class FIXED_INFO extends Structure { public byte[] HostName = new byte[MAX_HOSTNAME_LEN + 4]; public byte[] DomainName = new byte[MAX_DOMAIN_NAME_LEN + 4]; - public IP_ADDR_STRING.ByReference CurrentDnsServer; // IP_ADDR_STRING + public Pointer CurrentDnsServer; // IP_ADDR_STRING public IP_ADDR_STRING DnsServerList; public int NodeType; public byte[] ScopeId = new byte[MAX_SCOPE_ID_LEN + 4]; diff --git a/contrib/platform/test/com/sun/jna/platform/win32/IPHlpAPITest.java b/contrib/platform/test/com/sun/jna/platform/win32/IPHlpAPITest.java index e59ec5c104..afd6b48ef7 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/IPHlpAPITest.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/IPHlpAPITest.java @@ -37,6 +37,7 @@ import com.sun.jna.Memory; import com.sun.jna.platform.win32.IPHlpAPI.FIXED_INFO; +import com.sun.jna.platform.win32.IPHlpAPI.IP_ADDR_STRING; import com.sun.jna.platform.win32.IPHlpAPI.MIB_IFROW; import com.sun.jna.platform.win32.IPHlpAPI.MIB_IF_ROW2; import com.sun.jna.ptr.IntByReference; @@ -120,7 +121,7 @@ public void testGetNetworkParams() { assertEquals(WinError.ERROR_SUCCESS, IPHlpAPI.INSTANCE.GetNetworkParams(buffer, bufferSize)); // Check all DNS servers are valid IPs - IPHlpAPI.IP_ADDR_STRING dns = buffer.DnsServerList; + IP_ADDR_STRING dns = buffer.DnsServerList; while (dns != null) { // Start with 16-char byte array String addr = new String(dns.IpAddress.String); @@ -131,7 +132,7 @@ public void testGetNetworkParams() { } // addr is now a dotted-notation IP string. Test valid assertTrue(ValidIP.matcher(addr).matches()); - dns = dns.Next; + dns = dns.Next == null ? null : new IP_ADDR_STRING(dns.Next); } } }