summaryrefslogtreecommitdiff
path: root/java/openjdk6/files/icedtea/security/20130416/8000724.patch
diff options
context:
space:
mode:
Diffstat (limited to 'java/openjdk6/files/icedtea/security/20130416/8000724.patch')
-rw-r--r--java/openjdk6/files/icedtea/security/20130416/8000724.patch1368
1 files changed, 0 insertions, 1368 deletions
diff --git a/java/openjdk6/files/icedtea/security/20130416/8000724.patch b/java/openjdk6/files/icedtea/security/20130416/8000724.patch
deleted file mode 100644
index c288d52a497c..000000000000
--- a/java/openjdk6/files/icedtea/security/20130416/8000724.patch
+++ /dev/null
@@ -1,1368 +0,0 @@
-# HG changeset patch
-# User andrew
-# Date 1365736051 -3600
-# Node ID a5bbb8808ac9a6a8e20c5f267044bb0cef0bbdc1
-# Parent a98937f9777091ef36ec58b79962336d2b1ae538
-8000724: Improve networking serialization
-Summary: delegate InetAddress fields to a holder object
-Reviewed-by: alanb, chegar
-
-diff --git a/src/share/classes/java/net/AbstractPlainDatagramSocketImpl.java b/src/share/classes/java/net/AbstractPlainDatagramSocketImpl.java
---- jdk/src/share/classes/java/net/AbstractPlainDatagramSocketImpl.java
-+++ jdk/src/share/classes/java/net/AbstractPlainDatagramSocketImpl.java
-@@ -114,7 +114,7 @@
- * not connected already.
- */
- protected void disconnect() {
-- disconnect0(connectedAddress.family);
-+ disconnect0(connectedAddress.holder().getFamily());
- connected = false;
- connectedAddress = null;
- connectedPort = -1;
-diff --git a/src/share/classes/java/net/Inet4Address.java b/src/share/classes/java/net/Inet4Address.java
---- jdk/src/share/classes/java/net/Inet4Address.java
-+++ jdk/src/share/classes/java/net/Inet4Address.java
-@@ -102,27 +102,28 @@
-
- Inet4Address() {
- super();
-- hostName = null;
-- address = 0;
-- family = IPv4;
-+ holder().hostName = null;
-+ holder().address = 0;
-+ holder().family = IPv4;
- }
-
- Inet4Address(String hostName, byte addr[]) {
-- this.hostName = hostName;
-- this.family = IPv4;
-+ holder().hostName = hostName;
-+ holder().family = IPv4;
- if (addr != null) {
- if (addr.length == INADDRSZ) {
-- address = addr[3] & 0xFF;
-+ int address = addr[3] & 0xFF;
- address |= ((addr[2] << 8) & 0xFF00);
- address |= ((addr[1] << 16) & 0xFF0000);
- address |= ((addr[0] << 24) & 0xFF000000);
-+ holder().address = address;
- }
- }
- }
- Inet4Address(String hostName, int address) {
-- this.hostName = hostName;
-- this.family = IPv4;
-- this.address = address;
-+ holder().hostName = hostName;
-+ holder().family = IPv4;
-+ holder().address = address;
- }
-
- /**
-@@ -136,8 +137,8 @@
- private Object writeReplace() throws ObjectStreamException {
- // will replace the to be serialized 'this' object
- InetAddress inet = new InetAddress();
-- inet.hostName = this.hostName;
-- inet.address = this.address;
-+ inet.holder().hostName = holder().getHostName();
-+ inet.holder().address = holder().getAddress();
-
- /**
- * Prior to 1.4 an InetAddress was created with a family
-@@ -145,7 +146,7 @@
- * For compatibility reasons we must therefore write the
- * the InetAddress with this family.
- */
-- inet.family = 2;
-+ inet.holder().family = 2;
-
- return inet;
- }
-@@ -159,7 +160,7 @@
- * @since JDK1.1
- */
- public boolean isMulticastAddress() {
-- return ((address & 0xf0000000) == 0xe0000000);
-+ return ((holder().getAddress() & 0xf0000000) == 0xe0000000);
- }
-
- /**
-@@ -169,7 +170,7 @@
- * @since 1.4
- */
- public boolean isAnyLocalAddress() {
-- return address == 0;
-+ return holder().getAddress() == 0;
- }
-
- /**
-@@ -198,6 +199,7 @@
- // defined in "Documenting Special Use IPv4 Address Blocks
- // that have been Registered with IANA" by Bill Manning
- // draft-manning-dsua-06.txt
-+ int address = holder().getAddress();
- return (((address >>> 24) & 0xFF) == 169)
- && (((address >>> 16) & 0xFF) == 254);
- }
-@@ -214,6 +216,7 @@
- // 10/8 prefix
- // 172.16/12 prefix
- // 192.168/16 prefix
-+ int address = holder().getAddress();
- return (((address >>> 24) & 0xFF) == 10)
- || ((((address >>> 24) & 0xFF) == 172)
- && (((address >>> 16) & 0xF0) == 16))
-@@ -260,6 +263,7 @@
- */
- public boolean isMCLinkLocal() {
- // 224.0.0/24 prefix and ttl == 1
-+ int address = holder().getAddress();
- return (((address >>> 24) & 0xFF) == 224)
- && (((address >>> 16) & 0xFF) == 0)
- && (((address >>> 8) & 0xFF) == 0);
-@@ -275,6 +279,7 @@
- */
- public boolean isMCSiteLocal() {
- // 239.255/16 prefix or ttl < 32
-+ int address = holder().getAddress();
- return (((address >>> 24) & 0xFF) == 239)
- && (((address >>> 16) & 0xFF) == 255);
- }
-@@ -290,6 +295,7 @@
- */
- public boolean isMCOrgLocal() {
- // 239.192 - 239.195
-+ int address = holder().getAddress();
- return (((address >>> 24) & 0xFF) == 239)
- && (((address >>> 16) & 0xFF) >= 192)
- && (((address >>> 16) & 0xFF) <= 195);
-@@ -303,6 +309,7 @@
- * @return the raw IP address of this object.
- */
- public byte[] getAddress() {
-+ int address = holder().getAddress();
- byte[] addr = new byte[INADDRSZ];
-
- addr[0] = (byte) ((address >>> 24) & 0xFF);
-@@ -328,7 +335,7 @@
- * @return a hash code value for this IP address.
- */
- public int hashCode() {
-- return address;
-+ return holder().getAddress();
- }
-
- /**
-@@ -349,7 +356,7 @@
- */
- public boolean equals(Object obj) {
- return (obj != null) && (obj instanceof Inet4Address) &&
-- (((InetAddress)obj).address == address);
-+ (((InetAddress)obj).holder().getAddress() == holder().getAddress());
- }
-
- // Utilities
-diff --git a/src/share/classes/java/net/Inet4AddressImpl.java b/src/share/classes/java/net/Inet4AddressImpl.java
---- jdk/src/share/classes/java/net/Inet4AddressImpl.java
-+++ jdk/src/share/classes/java/net/Inet4AddressImpl.java
-@@ -40,7 +40,7 @@
- public synchronized InetAddress anyLocalAddress() {
- if (anyLocalAddress == null) {
- anyLocalAddress = new Inet4Address(); // {0x00,0x00,0x00,0x00}
-- anyLocalAddress.hostName = "0.0.0.0";
-+ anyLocalAddress.holder().hostName = "0.0.0.0";
- }
- return anyLocalAddress;
- }
-diff --git a/src/share/classes/java/net/Inet6Address.java b/src/share/classes/java/net/Inet6Address.java
---- jdk/src/share/classes/java/net/Inet6Address.java
-+++ jdk/src/share/classes/java/net/Inet6Address.java
-@@ -216,18 +216,18 @@
-
- Inet6Address() {
- super();
-- hostName = null;
-+ holder().hostName = null;
- ipaddress = new byte[INADDRSZ];
-- family = IPv6;
-+ holder().family = IPv6;
- }
-
- /* checking of value for scope_id should be done by caller
- * scope_id must be >= 0, or -1 to indicate not being set
- */
- Inet6Address(String hostName, byte addr[], int scope_id) {
-- this.hostName = hostName;
-+ holder().hostName = hostName;
- if (addr.length == INADDRSZ) { // normal IPv6 address
-- family = IPv6;
-+ holder().family = IPv6;
- ipaddress = addr.clone();
- }
- if (scope_id >= 0) {
-@@ -328,9 +328,9 @@
- }
-
- private void initif(String hostName, byte addr[],NetworkInterface nif) throws UnknownHostException {
-- this.hostName = hostName;
-+ holder().hostName = hostName;
- if (addr.length == INADDRSZ) { // normal IPv6 address
-- family = IPv6;
-+ holder().family = IPv6;
- ipaddress = addr.clone();
- }
- if (nif != null) {
-@@ -415,6 +415,11 @@
- throws IOException, ClassNotFoundException {
- scope_ifname = null;
- scope_ifname_set = false;
-+
-+ if (getClass().getClassLoader() != null) {
-+ throw new SecurityException ("invalid address type");
-+ }
-+
- s.defaultReadObject();
-
- if (ifname != null && !"".equals (ifname)) {
-@@ -446,7 +451,7 @@
- ipaddress.length);
- }
-
-- if (family != IPv6) {
-+ if (holder().getFamily() != IPv6) {
- throw new InvalidObjectException("invalid address family type");
- }
- }
-diff --git a/src/share/classes/java/net/Inet6AddressImpl.java b/src/share/classes/java/net/Inet6AddressImpl.java
---- jdk/src/share/classes/java/net/Inet6AddressImpl.java
-+++ jdk/src/share/classes/java/net/Inet6AddressImpl.java
-@@ -81,7 +81,7 @@
- if (anyLocalAddress == null) {
- if (InetAddress.preferIPv6Address) {
- anyLocalAddress = new Inet6Address();
-- anyLocalAddress.hostName = "::";
-+ anyLocalAddress.holder().hostName = "::";
- } else {
- anyLocalAddress = (new Inet4AddressImpl()).anyLocalAddress();
- }
-diff --git a/src/share/classes/java/net/InetAddress.java b/src/share/classes/java/net/InetAddress.java
---- jdk/src/share/classes/java/net/InetAddress.java
-+++ jdk/src/share/classes/java/net/InetAddress.java
-@@ -34,8 +34,12 @@
- import java.util.ArrayList;
- import java.security.AccessController;
- import java.io.ObjectStreamException;
-+import java.io.ObjectStreamField;
- import java.io.IOException;
- import java.io.ObjectInputStream;
-+import java.io.ObjectInputStream.GetField;
-+import java.io.ObjectOutputStream;
-+import java.io.ObjectOutputStream.PutField;
- import sun.security.action.*;
- import sun.net.InetAddressCachePolicy;
- import sun.net.util.IPAddressUtil;
-@@ -196,25 +200,47 @@
- /* Specify address family preference */
- static transient boolean preferIPv6Address = false;
-
-- /**
-- * @serial
-- */
-- String hostName;
-+ static class InetAddressHolder {
-
-- /**
-- * Holds a 32-bit IPv4 address.
-- *
-- * @serial
-- */
-- int address;
-+ InetAddressHolder() {}
-
-- /**
-- * Specifies the address family type, for instance, '1' for IPv4
-- * addresses, and '2' for IPv6 addresses.
-- *
-- * @serial
-- */
-- int family;
-+ InetAddressHolder(String hostName, int address, int family) {
-+ this.hostName = hostName;
-+ this.address = address;
-+ this.family = family;
-+ }
-+
-+ String hostName;
-+
-+ String getHostName() {
-+ return hostName;
-+ }
-+
-+ /**
-+ * Holds a 32-bit IPv4 address.
-+ */
-+ int address;
-+
-+ int getAddress() {
-+ return address;
-+ }
-+
-+ /**
-+ * Specifies the address family type, for instance, '1' for IPv4
-+ * addresses, and '2' for IPv6 addresses.
-+ */
-+ int family;
-+
-+ int getFamily() {
-+ return family;
-+ }
-+ }
-+
-+ final transient InetAddressHolder holder;
-+
-+ InetAddressHolder holder() {
-+ return holder;
-+ }
-
- /* Used to store the name service provider */
- private static List<NameService> nameServices = null;
-@@ -242,6 +268,7 @@
- * put in the address cache, since it is not created by name.
- */
- InetAddress() {
-+ holder = new InetAddressHolder();
- }
-
- /**
-@@ -254,7 +281,7 @@
- */
- private Object readResolve() throws ObjectStreamException {
- // will replace the deserialized 'this' object
-- return new Inet4Address(this.hostName, this.address);
-+ return new Inet4Address(holder().getHostName(), holder().getAddress());
- }
-
- /**
-@@ -491,10 +518,10 @@
- * @see SecurityManager#checkConnect
- */
- String getHostName(boolean check) {
-- if (hostName == null) {
-- hostName = InetAddress.getHostFromNameService(this, check);
-+ if (holder().getHostName() == null) {
-+ holder().hostName = InetAddress.getHostFromNameService(this, check);
- }
-- return hostName;
-+ return holder().getHostName();
- }
-
- /**
-@@ -657,6 +684,7 @@
- * @return a string representation of this IP address.
- */
- public String toString() {
-+ String hostName = holder().getHostName();
- return ((hostName != null) ? hostName : "")
- + "/" + getHostAddress();
- }
-@@ -1500,14 +1528,58 @@
- }
- }
-
-+ private static final long FIELDS_OFFSET;
-+ private static final sun.misc.Unsafe UNSAFE;
-+
-+ static {
-+ try {
-+ sun.misc.Unsafe unsafe = sun.misc.Unsafe.getUnsafe();
-+ FIELDS_OFFSET = unsafe.objectFieldOffset(
-+ InetAddress.class.getDeclaredField("holder")
-+ );
-+ UNSAFE = unsafe;
-+ } catch (NoSuchFieldException e) {
-+ throw new Error(e);
-+ }
-+ }
-+
- private void readObject (ObjectInputStream s) throws
- IOException, ClassNotFoundException {
-- s.defaultReadObject ();
- if (getClass().getClassLoader() != null) {
-- hostName = null;
-- address = 0;
- throw new SecurityException ("invalid address type");
- }
-+ GetField gf = s.readFields();
-+ String host = (String)gf.get("hostName", null);
-+ int address= gf.get("address", 0);
-+ int family= gf.get("family", 0);
-+ InetAddressHolder h = new InetAddressHolder(host, address, family);
-+ UNSAFE.putObject(this, FIELDS_OFFSET, h);
-+ }
-+
-+ /* needed because the serializable fields no longer exist */
-+
-+ /**
-+ * @serialField hostName String
-+ * @serialField address int
-+ * @serialField family int
-+ */
-+ private static final ObjectStreamField[] serialPersistentFields = {
-+ new ObjectStreamField("hostName", String.class),
-+ new ObjectStreamField("address", int.class),
-+ new ObjectStreamField("family", int.class),
-+ };
-+
-+ private void writeObject (ObjectOutputStream s) throws
-+ IOException {
-+ if (getClass().getClassLoader() != null) {
-+ throw new SecurityException ("invalid address type");
-+ }
-+ PutField pf = s.putFields();
-+ pf.put("hostName", holder().hostName);
-+ pf.put("address", holder().address);
-+ pf.put("family", holder().family);
-+ s.writeFields();
-+ s.flush();
- }
- }
-
-diff --git a/src/share/classes/java/net/InetSocketAddress.java b/src/share/classes/java/net/InetSocketAddress.java
---- jdk/src/share/classes/java/net/InetSocketAddress.java
-+++ jdk/src/share/classes/java/net/InetSocketAddress.java
-@@ -87,8 +87,8 @@
- if (hostname != null)
- return hostname;
- if (addr != null) {
-- if (addr.hostName != null)
-- return addr.hostName;
-+ if (addr.holder().getHostName() != null)
-+ return addr.holder().getHostName();
- else
- return addr.getHostAddress();
- }
-diff --git a/src/share/native/java/net/InetAddress.c b/src/share/native/java/net/InetAddress.c
---- jdk/src/share/native/java/net/InetAddress.c
-+++ jdk/src/share/native/java/net/InetAddress.c
-@@ -33,8 +33,11 @@
- */
-
- jclass ia_class;
--jfieldID ia_addressID;
--jfieldID ia_familyID;
-+jclass iac_class;
-+jfieldID ia_holderID;
-+jfieldID iac_addressID;
-+jfieldID iac_familyID;
-+jfieldID iac_hostNameID;
- jfieldID ia_preferIPv6AddressID;
-
- /*
-@@ -48,10 +51,18 @@
- CHECK_NULL(c);
- ia_class = (*env)->NewGlobalRef(env, c);
- CHECK_NULL(ia_class);
-- ia_addressID = (*env)->GetFieldID(env, ia_class, "address", "I");
-- CHECK_NULL(ia_addressID);
-- ia_familyID = (*env)->GetFieldID(env, ia_class, "family", "I");
-- CHECK_NULL(ia_familyID);
-+ c = (*env)->FindClass(env,"java/net/InetAddress$InetAddressHolder");
-+ CHECK_NULL(c);
-+ iac_class = (*env)->NewGlobalRef(env, c);
-+ ia_holderID = (*env)->GetFieldID(env, ia_class, "holder", "Ljava/net/InetAddress$InetAddressHolder;");
-+ CHECK_NULL(ia_holderID);
- ia_preferIPv6AddressID = (*env)->GetStaticFieldID(env, ia_class, "preferIPv6Address", "Z");
- CHECK_NULL(ia_preferIPv6AddressID);
-+
-+ iac_addressID = (*env)->GetFieldID(env, iac_class, "address", "I");
-+ CHECK_NULL(iac_addressID);
-+ iac_familyID = (*env)->GetFieldID(env, iac_class, "family", "I");
-+ CHECK_NULL(iac_familyID);
-+ iac_hostNameID = (*env)->GetFieldID(env, iac_class, "hostName", "Ljava/lang/String;");
-+ CHECK_NULL(iac_hostNameID);
- }
-diff --git a/src/share/native/java/net/net_util.c b/src/share/native/java/net/net_util.c
---- jdk/src/share/native/java/net/net_util.c
-+++ jdk/src/share/native/java/net/net_util.c
-@@ -84,6 +84,58 @@
- }
- }
-
-+/* The address, and family fields used to be in InetAddress
-+ * but are now in an implementation object. So, there is an extra
-+ * level of indirection to access them now.
-+ */
-+
-+extern jclass iac_class;
-+extern jfieldID ia_holderID;
-+extern jfieldID iac_addressID;
-+extern jfieldID iac_familyID;
-+
-+void setInetAddress_addr(JNIEnv *env, jobject iaObj, int address) {
-+ jobject holder;
-+ init(env);
-+ holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
-+ (*env)->SetIntField(env, holder, iac_addressID, address);
-+}
-+
-+void setInetAddress_family(JNIEnv *env, jobject iaObj, int family) {
-+ jobject holder;
-+ init(env);
-+ holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
-+ (*env)->SetIntField(env, holder, iac_familyID, family);
-+}
-+
-+void setInetAddress_hostName(JNIEnv *env, jobject iaObj, jobject host) {
-+ jobject holder;
-+ init(env);
-+ holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
-+ (*env)->SetObjectField(env, holder, iac_hostNameID, host);
-+}
-+
-+int getInetAddress_addr(JNIEnv *env, jobject iaObj) {
-+ jobject holder;
-+ init(env);
-+ holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
-+ return (*env)->GetIntField(env, holder, iac_addressID);
-+}
-+
-+int getInetAddress_family(JNIEnv *env, jobject iaObj) {
-+ jobject holder;
-+ init(env);
-+ holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
-+ return (*env)->GetIntField(env, holder, iac_familyID);
-+}
-+
-+jobject getInetAddress_hostName(JNIEnv *env, jobject iaObj) {
-+ jobject holder;
-+ init(env);
-+ holder = (*env)->GetObjectField(env, iaObj, ia_holderID);
-+ return (*env)->GetObjectField(env, holder, iac_hostNameID);
-+}
-+
- jobject
- NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port) {
- jobject iaObj;
-@@ -110,8 +162,8 @@
- iaObj = (*env)->NewObject(env, inet4Cls, ia4_ctrID);
- CHECK_NULL_RETURN(iaObj, NULL);
- address = NET_IPv4MappedToIPv4(caddr);
-- (*env)->SetIntField(env, iaObj, ia_addressID, address);
-- (*env)->SetIntField(env, iaObj, ia_familyID, IPv4);
-+ setInetAddress_addr(env, iaObj, address);
-+ setInetAddress_family(env, iaObj, IPv4);
- } else {
- static jclass inet6Cls = 0;
- if (inet6Cls == 0) {
-@@ -130,7 +182,7 @@
-
- (*env)->SetObjectField(env, iaObj, ia6_ipaddressID, ipaddress);
-
-- (*env)->SetIntField(env, iaObj, ia_familyID, IPv6);
-+ setInetAddress_family(env, iaObj, IPv6);
- (*env)->SetIntField(env, iaObj, ia6_scopeidID, getScopeID(him));
- }
- *port = ntohs(him6->sin6_port);
-@@ -149,9 +201,8 @@
- }
- iaObj = (*env)->NewObject(env, inet4Cls, ia4_ctrID);
- CHECK_NULL_RETURN(iaObj, NULL);
-- (*env)->SetIntField(env, iaObj, ia_familyID, IPv4);
-- (*env)->SetIntField(env, iaObj, ia_addressID,
-- ntohl(him4->sin_addr.s_addr));
-+ setInetAddress_family(env, iaObj, IPv4);
-+ setInetAddress_addr(env, iaObj, ntohl(him4->sin_addr.s_addr));
- *port = ntohs(him4->sin_port);
- }
- return iaObj;
-@@ -160,8 +211,7 @@
- jint
- NET_SockaddrEqualsInetAddress(JNIEnv *env, struct sockaddr *him, jobject iaObj)
- {
-- jint family = (*env)->GetIntField(env, iaObj, ia_familyID) == IPv4?
-- AF_INET : AF_INET6;
-+ jint family = getInetAddress_family(env, iaObj) == IPv4?AF_INET : AF_INET6;
-
- #ifdef AF_INET6
- if (him->sa_family == AF_INET6) {
-@@ -178,7 +228,7 @@
- return JNI_FALSE;
- }
- addrNew = NET_IPv4MappedToIPv4(caddrNew);
-- addrCur = (*env)->GetIntField(env, iaObj, ia_addressID);
-+ addrCur = getInetAddress_addr(env, iaObj);
- if (addrNew == addrCur) {
- return JNI_TRUE;
- } else {
-@@ -210,7 +260,7 @@
- return JNI_FALSE;
- }
- addrNew = ntohl(him4->sin_addr.s_addr);
-- addrCur = (*env)->GetIntField(env, iaObj, ia_addressID);
-+ addrCur = getInetAddress_addr(env, iaObj);
- if (addrNew == addrCur) {
- return JNI_TRUE;
- } else {
-diff --git a/src/share/native/java/net/net_util.h b/src/share/native/java/net/net_util.h
---- jdk/src/share/native/java/net/net_util.h
-+++ jdk/src/share/native/java/net/net_util.h
-@@ -53,10 +53,18 @@
- * i.e. psi_timeoutID is PlainSocketImpl's timeout field's ID.
- */
- extern jclass ia_class;
--extern jfieldID ia_addressID;
--extern jfieldID ia_familyID;
-+extern jfieldID iac_addressID;
-+extern jfieldID iac_familyID;
-+extern jfieldID iac_hostNameID;
- extern jfieldID ia_preferIPv6AddressID;
-
-+extern void setInetAddress_addr(JNIEnv *env, jobject iaObj, int address);
-+extern void setInetAddress_family(JNIEnv *env, jobject iaObj, int family);
-+extern void setInetAddress_hostName(JNIEnv *env, jobject iaObj, jobject h);
-+extern int getInetAddress_addr(JNIEnv *env, jobject iaObj);
-+extern int getInetAddress_family(JNIEnv *env, jobject iaObj);
-+extern jobject getInetAddress_hostName(JNIEnv *env, jobject iaObj);
-+
- extern jclass ia4_class;
- extern jmethodID ia4_ctrID;
-
-diff --git a/src/solaris/native/java/net/Inet4AddressImpl.c b/src/solaris/native/java/net/Inet4AddressImpl.c
---- jdk/src/solaris/native/java/net/Inet4AddressImpl.c
-+++ jdk/src/solaris/native/java/net/Inet4AddressImpl.c
-@@ -118,9 +118,6 @@
- static jclass ni_iacls;
- static jclass ni_ia4cls;
- static jmethodID ni_ia4ctrID;
--static jfieldID ni_iaaddressID;
--static jfieldID ni_iahostID;
--static jfieldID ni_iafamilyID;
- static int initialized = 0;
-
- /*
-@@ -153,9 +150,6 @@
- ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address");
- ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls);
- ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V");
-- ni_iaaddressID = (*env)->GetFieldID(env, ni_iacls, "address", "I");
-- ni_iafamilyID = (*env)->GetFieldID(env, ni_iacls, "family", "I");
-- ni_iahostID = (*env)->GetFieldID(env, ni_iacls, "hostName", "Ljava/lang/String;");
- initialized = 1;
- }
-
-@@ -229,9 +223,8 @@
- ret = NULL;
- goto cleanupAndReturn;
- }
-- (*env)->SetIntField(env, iaObj, ni_iaaddressID,
-- ntohl((*addrp)->s_addr));
-- (*env)->SetObjectField(env, iaObj, ni_iahostID, name);
-+ setInetAddress_addr(env, iaObj, ntohl((*addrp)->s_addr));
-+ setInetAddress_hostName(env, iaObj, name);
- (*env)->SetObjectArrayElement(env, ret, i, iaObj);
- addrp++;
- i++;
-diff --git a/src/solaris/native/java/net/Inet6AddressImpl.c b/src/solaris/native/java/net/Inet6AddressImpl.c
---- jdk/src/solaris/native/java/net/Inet6AddressImpl.c
-+++ jdk/src/solaris/native/java/net/Inet6AddressImpl.c
-@@ -120,9 +120,6 @@
- static jclass ni_ia6cls;
- static jmethodID ni_ia4ctrID;
- static jmethodID ni_ia6ctrID;
--static jfieldID ni_iaaddressID;
--static jfieldID ni_iahostID;
--static jfieldID ni_iafamilyID;
- static jfieldID ni_ia6ipaddressID;
- static int initialized = 0;
-
-@@ -161,9 +158,6 @@
- ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls);
- ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V");
- ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V");
-- ni_iaaddressID = (*env)->GetFieldID(env, ni_iacls, "address", "I");
-- ni_iafamilyID = (*env)->GetFieldID(env, ni_iacls, "family", "I");
-- ni_iahostID = (*env)->GetFieldID(env, ni_iacls, "hostName", "Ljava/lang/String;");
- ni_ia6ipaddressID = (*env)->GetFieldID(env, ni_ia6cls, "ipaddress", "[B");
- initialized = 1;
- }
-@@ -322,9 +316,8 @@
- ret = NULL;
- goto cleanupAndReturn;
- }
-- (*env)->SetIntField(env, iaObj, ni_iaaddressID,
-- ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr));
-- (*env)->SetObjectField(env, iaObj, ni_iahostID, name);
-+ setInetAddress_addr(env, iaObj, ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr));
-+ setInetAddress_hostName(env, iaObj, name);
- (*env)->SetObjectArrayElement(env, ret, inetIndex, iaObj);
- inetIndex++;
- } else if (iterator->ai_family == AF_INET6) {
-@@ -355,7 +348,7 @@
- (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE);
- }
- (*env)->SetObjectField(env, iaObj, ni_ia6ipaddressID, ipaddress);
-- (*env)->SetObjectField(env, iaObj, ni_iahostID, name);
-+ setInetAddress_hostName(env, iaObj, name);
- (*env)->SetObjectArrayElement(env, ret, inet6Index, iaObj);
- inet6Index++;
- }
-diff --git a/src/solaris/native/java/net/NetworkInterface.c b/src/solaris/native/java/net/NetworkInterface.c
---- jdk/src/solaris/native/java/net/NetworkInterface.c
-+++ jdk/src/solaris/native/java/net/NetworkInterface.c
-@@ -101,8 +101,6 @@
- static jmethodID ni_ia4ctrID;
- static jmethodID ni_ia6ctrID;
- static jmethodID ni_ibctrID;
--static jfieldID ni_iaaddressID;
--static jfieldID ni_iafamilyID;
- static jfieldID ni_ia6ipaddressID;
- static jfieldID ni_ibaddressID;
- static jfieldID ni_ib4broadcastID;
-@@ -153,8 +151,6 @@
- ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V");
- ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V");
- ni_ibctrID = (*env)->GetMethodID(env, ni_ibcls, "<init>", "()V");
-- ni_iaaddressID = (*env)->GetFieldID(env, ni_iacls, "address", "I");
-- ni_iafamilyID = (*env)->GetFieldID(env, ni_iacls, "family", "I");
- ni_ia6ipaddressID = (*env)->GetFieldID(env, ni_ia6cls, "ipaddress", "[B");
- ni_ibaddressID = (*env)->GetFieldID(env, ni_ibcls, "address", "Ljava/net/InetAddress;");
- ni_ib4broadcastID = (*env)->GetFieldID(env, ni_ibcls, "broadcast", "Ljava/net/Inet4Address;");
-@@ -253,8 +249,7 @@
- (JNIEnv *env, jclass cls, jobject iaObj) {
-
- netif *ifs, *curr;
-- int family = (*env)->GetIntField(env, iaObj, ni_iafamilyID) == IPv4?
-- AF_INET : AF_INET6;
-+ int family = (getInetAddress_family(env, iaObj) == IPv4) ? AF_INET : AF_INET6;
- jobject obj = NULL;
- jboolean match = JNI_FALSE;
-
-@@ -275,7 +270,7 @@
- if (family == addrP->family) {
- if (family == AF_INET) {
- int address1 = htonl(((struct sockaddr_in*)addrP->addr)->sin_addr.s_addr);
-- int address2 = (*env)->GetIntField(env, iaObj, ni_iaaddressID);
-+ int address2 = getInetAddress_addr(env, iaObj);
-
- if (address1 == address2) {
- match = JNI_TRUE;
-@@ -450,8 +445,7 @@
- if (addrP->family == AF_INET) {
- iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID);
- if (iaObj) {
-- (*env)->SetIntField(env, iaObj, ni_iaaddressID,
-- htonl(((struct sockaddr_in*)addrP->addr)->sin_addr.s_addr));
-+ setInetAddress_addr(env, iaObj, htonl(((struct sockaddr_in*)addrP->addr)->sin_addr.s_addr));
- }
- ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID);
- if (ibObj) {
-@@ -460,8 +454,7 @@
- jobject ia2Obj = NULL;
- ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID);
- if (ia2Obj) {
-- (*env)->SetIntField(env, ia2Obj, ni_iaaddressID,
-- htonl(((struct sockaddr_in*)addrP->brdcast)->sin_addr.s_addr));
-+ setInetAddress_addr(env, ia2Obj, htonl(((struct sockaddr_in*)addrP->brdcast)->sin_addr.s_addr));
- (*env)->SetObjectField(env, ibObj, ni_ib4broadcastID, ia2Obj);
- (*env)->SetShortField(env, ibObj, ni_ib4maskID, addrP->mask);
- }
-diff --git a/src/solaris/native/java/net/PlainDatagramSocketImpl.c b/src/solaris/native/java/net/PlainDatagramSocketImpl.c
---- jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c
-+++ jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c
-@@ -610,11 +610,10 @@
- }
-
- iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&remote_addr, &port);
-- family = (*env)->GetIntField(env, iaObj, ia_familyID) == IPv4?
-- AF_INET : AF_INET6;
-+ family = getInetAddress_family(env, iaObj) == IPv4? AF_INET : AF_INET6;
- if (family == AF_INET) { /* this api can't handle IPV6 addresses */
-- int address = (*env)->GetIntField(env, iaObj, ia_addressID);
-- (*env)->SetIntField(env, addressObj, ia_addressID, address);
-+ int address = getInetAddress_addr(env, iaObj);
-+ setInetAddress_addr(env, addressObj, address);
- }
- return port;
- }
-@@ -1142,7 +1141,6 @@
- */
- static void mcast_set_if_by_if_v4(JNIEnv *env, jobject this, int fd, jobject value) {
- static jfieldID ni_addrsID;
-- static jfieldID ia_addressID;
- struct in_addr in;
- jobjectArray addrArray;
- jsize len;
-@@ -1155,10 +1153,6 @@
- ni_addrsID = (*env)->GetFieldID(env, c, "addrs",
- "[Ljava/net/InetAddress;");
- CHECK_NULL(ni_addrsID);
-- c = (*env)->FindClass(env,"java/net/InetAddress");
-- CHECK_NULL(c);
-- ia_addressID = (*env)->GetFieldID(env, c, "address", "I");
-- CHECK_NULL(ia_addressID);
- }
-
- addrArray = (*env)->GetObjectField(env, value, ni_addrsID);
-@@ -1179,8 +1173,8 @@
- */
- for (i = 0; i < len; i++) {
- addr = (*env)->GetObjectArrayElement(env, addrArray, i);
-- if ((*env)->GetIntField(env, addr, ia_familyID) == IPv4) {
-- in.s_addr = htonl((*env)->GetIntField(env, addr, ia_addressID));
-+ if (getInetAddress_family(env, addr) == IPv4) {
-+ in.s_addr = htonl(getInetAddress_addr(env, addr));
- break;
- }
- }
-@@ -1238,17 +1232,9 @@
- * Throw exception if failed.
- */
- static void mcast_set_if_by_addr_v4(JNIEnv *env, jobject this, int fd, jobject value) {
-- static jfieldID ia_addressID;
- struct in_addr in;
-
-- if (ia_addressID == NULL) {
-- jclass c = (*env)->FindClass(env,"java/net/InetAddress");
-- CHECK_NULL(c);
-- ia_addressID = (*env)->GetFieldID(env, c, "address", "I");
-- CHECK_NULL(ia_addressID);
-- }
--
-- in.s_addr = htonl( (*env)->GetIntField(env, value, ia_addressID) );
-+ in.s_addr = htonl( getInetAddress_addr(env, value) );
-
- if (JVM_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_IF,
- (const char*)&in, sizeof(in)) < 0) {
-@@ -1583,7 +1569,6 @@
- if (isIPV4) {
- static jclass inet4_class;
- static jmethodID inet4_ctrID;
-- static jfieldID inet4_addrID;
-
- static jclass ni_class;
- static jmethodID ni_ctrID;
-@@ -1621,8 +1606,6 @@
- CHECK_NULL_RETURN(c, NULL);
- inet4_ctrID = (*env)->GetMethodID(env, c, "<init>", "()V");
- CHECK_NULL_RETURN(inet4_ctrID, NULL);
-- inet4_addrID = (*env)->GetFieldID(env, c, "address", "I");
-- CHECK_NULL_RETURN(inet4_addrID, NULL);
- inet4_class = (*env)->NewGlobalRef(env, c);
- CHECK_NULL_RETURN(inet4_class, NULL);
- }
-@@ -1630,10 +1613,10 @@
- CHECK_NULL_RETURN(addr, NULL);
-
- #ifdef __linux__
-- (*env)->SetIntField(env, addr, inet4_addrID,
-- (isOldKernel ? ntohl(mreqn.imr_address.s_addr) : ntohl(in.s_addr)) );
-+ setInetAddress_addr(env, addr, (isOldKernel ?
-+ ntohl(mreqn.imr_address.s_addr) : ntohl(in.s_addr)));
- #else
-- (*env)->SetIntField(env, addr, inet4_addrID, ntohl(in.s_addr));
-+ setInetAddress_addr(env, addr, ntohl(in.s_addr));
- #endif
-
- /*
-@@ -2112,7 +2095,7 @@
- ipv6_join_leave = ipv6_available();
-
- #ifdef __linux__
-- if ((*env)->GetIntField(env, iaObj, ia_familyID) == IPv4) {
-+ if (getInetAddress_family(env, iaObj) == IPv4) {
- ipv6_join_leave = JNI_FALSE;
- }
- #endif
-@@ -2159,7 +2142,7 @@
- CHECK_NULL(ni_indexID);
- }
-
-- mname.imr_multiaddr.s_addr = htonl((*env)->GetIntField(env, iaObj, ia_addressID));
-+ mname.imr_multiaddr.s_addr = htonl(getInetAddress_addr(env, iaObj));
- mname.imr_address.s_addr = 0;
- mname.imr_ifindex = (*env)->GetIntField(env, niObj, ni_indexID);
- mname_len = sizeof(struct ip_mreqn);
-@@ -2177,11 +2160,11 @@
- }
- addr = (*env)->GetObjectArrayElement(env, addrArray, 0);
-
-- mname.imr_multiaddr.s_addr = htonl((*env)->GetIntField(env, iaObj, ia_addressID));
-+ mname.imr_multiaddr.s_addr = htonl(getInetAddress_addr(env, iaObj));
- #ifdef __linux__
-- mname.imr_address.s_addr = htonl((*env)->GetIntField(env, addr, ia_addressID));
-+ mname.imr_address.s_addr = htonl(getInetAddress_addr(env, addr));
- #else
-- mname.imr_interface.s_addr = htonl((*env)->GetIntField(env, addr, ia_addressID));
-+ mname.imr_interface.s_addr = htonl(getInetAddress_addr(env, addr));
- #endif
- mname_len = sizeof(struct ip_mreq);
- }
-@@ -2220,7 +2203,7 @@
- }
- }
-
-- mname.imr_multiaddr.s_addr = htonl((*env)->GetIntField(env, iaObj, ia_addressID));
-+ mname.imr_multiaddr.s_addr = htonl(getInetAddress_addr(env, iaObj));
- mname.imr_address.s_addr = 0 ;
- mname.imr_ifindex = index;
- mname_len = sizeof(struct ip_mreqn);
-@@ -2250,7 +2233,7 @@
- #else
- mname.imr_interface.s_addr = in.s_addr;
- #endif
-- mname.imr_multiaddr.s_addr = htonl((*env)->GetIntField(env, iaObj, ia_addressID));
-+ mname.imr_multiaddr.s_addr = htonl(getInetAddress_addr(env, iaObj));
- mname_len = sizeof(struct ip_mreq);
- }
- }
-@@ -2315,10 +2298,10 @@
- jbyte caddr[16];
- jint family;
- jint address;
-- family = (*env)->GetIntField(env, iaObj, ia_familyID) == IPv4? AF_INET : AF_INET6;
-+ family = getInetAddress_family(env, iaObj) == IPv4? AF_INET : AF_INET6;
- if (family == AF_INET) { /* will convert to IPv4-mapped address */
- memset((char *) caddr, 0, 16);
-- address = (*env)->GetIntField(env, iaObj, ia_addressID);
-+ address = getInetAddress_addr(env, iaObj);
-
- caddr[10] = 0xff;
- caddr[11] = 0xff;
-diff --git a/src/solaris/native/java/net/net_util_md.c b/src/solaris/native/java/net/net_util_md.c
---- jdk/src/solaris/native/java/net/net_util_md.c
-+++ jdk/src/solaris/native/java/net/net_util_md.c
-@@ -675,7 +675,7 @@
- NET_InetAddressToSockaddr(JNIEnv *env, jobject iaObj, int port, struct sockaddr *him,
- int *len, jboolean v4MappedAddress) {
- jint family;
-- family = (*env)->GetIntField(env, iaObj, ia_familyID);
-+ family = getInetAddress_family(env, iaObj);
- #ifdef AF_INET6
- /* needs work. 1. family 2. clean up him6 etc deallocate memory */
- if (ipv6_available() && !(family == IPv4 && v4MappedAddress == JNI_FALSE)) {
-@@ -687,7 +687,7 @@
-
- if (family == IPv4) { /* will convert to IPv4-mapped address */
- memset((char *) caddr, 0, 16);
-- address = (*env)->GetIntField(env, iaObj, ia_addressID);
-+ address = getInetAddress_addr(env, iaObj);
- if (address == INADDR_ANY) {
- /* we would always prefer IPv6 wildcard address
- caddr[10] = 0xff;
-@@ -794,7 +794,7 @@
- return -1;
- }
- memset((char *) him4, 0, sizeof(struct sockaddr_in));
-- address = (*env)->GetIntField(env, iaObj, ia_addressID);
-+ address = getInetAddress_addr(env, iaObj);
- him4->sin_port = htons((short) port);
- him4->sin_addr.s_addr = (uint32_t) htonl(address);
- him4->sin_family = AF_INET;
-diff --git a/src/windows/native/java/net/Inet4AddressImpl.c b/src/windows/native/java/net/Inet4AddressImpl.c
---- jdk/src/windows/native/java/net/Inet4AddressImpl.c
-+++ jdk/src/windows/native/java/net/Inet4AddressImpl.c
-@@ -113,9 +113,6 @@
- static jclass ni_iacls;
- static jclass ni_ia4cls;
- static jmethodID ni_ia4ctrID;
--static jfieldID ni_iaaddressID;
--static jfieldID ni_iahostID;
--static jfieldID ni_iafamilyID;
- static int initialized = 0;
-
- /*
-@@ -150,9 +147,6 @@
- ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address");
- ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls);
- ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V");
-- ni_iaaddressID = (*env)->GetFieldID(env, ni_iacls, "address", "I");
-- ni_iafamilyID = (*env)->GetFieldID(env, ni_iacls, "family", "I");
-- ni_iahostID = (*env)->GetFieldID(env, ni_iacls, "hostName", "Ljava/lang/String;");
- initialized = 1;
- }
-
-@@ -209,8 +203,7 @@
- ret = NULL;
- goto cleanupAndReturn;
- }
-- (*env)->SetIntField(env, iaObj, ni_iaaddressID,
-- ntohl(address));
-+ setInetAddress_addr(env, iaObj, ntohl(address));
- (*env)->SetObjectArrayElement(env, ret, 0, iaObj);
- JNU_ReleaseStringPlatformChars(env, host, hostname);
- return ret;
-@@ -247,9 +240,8 @@
- ret = NULL;
- goto cleanupAndReturn;
- }
-- (*env)->SetIntField(env, iaObj, ni_iaaddressID,
-- ntohl((*addrp)->s_addr));
-- (*env)->SetObjectField(env, iaObj, ni_iahostID, name);
-+ setInetAddress_addr(env, iaObj, ntohl((*addrp)->s_addr));
-+ setInetAddress_hostName(env, iaObj, name);
- (*env)->SetObjectArrayElement(env, ret, i, iaObj);
- addrp++;
- i++;
-diff --git a/src/windows/native/java/net/Inet6AddressImpl.c b/src/windows/native/java/net/Inet6AddressImpl.c
---- jdk/src/windows/native/java/net/Inet6AddressImpl.c
-+++ jdk/src/windows/native/java/net/Inet6AddressImpl.c
-@@ -76,9 +76,6 @@
- static jclass ni_ia6cls;
- static jmethodID ni_ia4ctrID;
- static jmethodID ni_ia6ctrID;
--static jfieldID ni_iaaddressID;
--static jfieldID ni_iahostID;
--static jfieldID ni_iafamilyID;
- static jfieldID ni_ia6ipaddressID;
- static int initialized = 0;
-
-@@ -103,9 +100,6 @@
- ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls);
- ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V");
- ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V");
-- ni_iaaddressID = (*env)->GetFieldID(env, ni_iacls, "address", "I");
-- ni_iafamilyID = (*env)->GetFieldID(env, ni_iacls, "family", "I");
-- ni_iahostID = (*env)->GetFieldID(env, ni_iacls, "hostName", "Ljava/lang/String;");
- ni_ia6ipaddressID = (*env)->GetFieldID(env, ni_ia6cls, "ipaddress", "[B");
- initialized = 1;
- }
-@@ -250,9 +244,8 @@
- ret = NULL;
- goto cleanupAndReturn;
- }
-- (*env)->SetIntField(env, iaObj, ni_iaaddressID,
-- ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr));
-- (*env)->SetObjectField(env, iaObj, ni_iahostID, name);
-+ setInetAddress_addr(env, iaObj, ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr));
-+ setInetAddress_hostName(env, iaObj, name);
- (*env)->SetObjectArrayElement(env, ret, inetIndex, iaObj);
- inetIndex ++;
- } else if (iterator->ai_family == AF_INET6) {
-@@ -276,7 +269,7 @@
- (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE);
- }
- (*env)->SetObjectField(env, iaObj, ni_ia6ipaddressID, ipaddress);
-- (*env)->SetObjectField(env, iaObj, ni_iahostID, name);
-+ setInetAddress_hostName(env, iaObj, name);
- (*env)->SetObjectArrayElement(env, ret, inet6Index, iaObj);
- inet6Index ++;
- }
-diff --git a/src/windows/native/java/net/NetworkInterface.c b/src/windows/native/java/net/NetworkInterface.c
---- jdk/src/windows/native/java/net/NetworkInterface.c
-+++ jdk/src/windows/native/java/net/NetworkInterface.c
-@@ -97,7 +97,6 @@
- jfieldID ni_displayNameID; /* NetworkInterface.displayName */
- jfieldID ni_childsID; /* NetworkInterface.childs */
- jclass ni_iacls; /* InetAddress */
--jfieldID ni_iaAddr; /* InetAddress.address */
-
- jclass ni_ia4cls; /* Inet4Address */
- jmethodID ni_ia4Ctor; /* Inet4Address() */
-@@ -558,7 +557,6 @@
-
- ni_iacls = (*env)->FindClass(env, "Ljava/net/InetAddress;");
- ni_iacls = (*env)->NewGlobalRef(env, ni_iacls);
-- ni_iaAddr = (*env)->GetFieldID(env, ni_iacls, "address", "I");
-
- ni_ia4cls = (*env)->FindClass(env, "Ljava/net/Inet4Address;");
- ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls);
-@@ -645,7 +643,7 @@
- }
- /* default ctor will set family to AF_INET */
-
-- (*env)->SetIntField(env, iaObj, ni_iaAddr, ntohl(addrs->addr.him4.sin_addr.s_addr));
-+ setInetAddress_addr(env, iaObj, ntohl(addrs->addr.him4.sin_addr.s_addr));
- if (addrs->mask != -1) {
- ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID);
- if (ibObj == NULL) {
-@@ -658,8 +656,7 @@
- free_netaddr(netaddrP);
- return NULL;
- }
-- (*env)->SetIntField(env, ia2Obj, ni_iaAddr,
-- ntohl(addrs->brdcast.him4.sin_addr.s_addr));
-+ setInetAddress_addr(env, ia2Obj, ntohl(addrs->brdcast.him4.sin_addr.s_addr));
- (*env)->SetObjectField(env, ibObj, ni_ibbroadcastID, ia2Obj);
- (*env)->SetShortField(env, ibObj, ni_ibmaskID, addrs->mask);
- (*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj);
-@@ -811,7 +808,7 @@
- (JNIEnv *env, jclass cls, jobject iaObj)
- {
- netif *ifList, *curr;
-- jint addr = (*env)->GetIntField(env, iaObj, ni_iaAddr);
-+ jint addr = getInetAddress_addr(env, iaObj);
- jobject netifObj = NULL;
-
- if (os_supports_ipv6 && ipv6_available()) {
-diff --git a/src/windows/native/java/net/NetworkInterface.h b/src/windows/native/java/net/NetworkInterface.h
---- jdk/src/windows/native/java/net/NetworkInterface.h
-+++ jdk/src/windows/native/java/net/NetworkInterface.h
-@@ -70,7 +70,6 @@
- extern jfieldID ni_childsID; /* NetworkInterface.childs */
-
- extern jclass ni_iacls; /* InetAddress */
--extern jfieldID ni_iaAddr; /* InetAddress.address */
-
- extern jclass ni_ia4cls; /* Inet4Address */
- extern jmethodID ni_ia4Ctor; /* Inet4Address() */
-diff --git a/src/windows/native/java/net/NetworkInterface_winXP.c b/src/windows/native/java/net/NetworkInterface_winXP.c
---- jdk/src/windows/native/java/net/NetworkInterface_winXP.c
-+++ jdk/src/windows/native/java/net/NetworkInterface_winXP.c
-@@ -33,6 +33,7 @@
- #include "jni_util.h"
-
- #include "NetworkInterface.h"
-+#include "net_util.h"
-
- /*
- * Windows implementation of the java.net.NetworkInterface native methods.
-@@ -468,7 +469,7 @@
- }
- /* default ctor will set family to AF_INET */
-
-- (*env)->SetIntField(env, iaObj, ni_iaAddr, ntohl(addrs->addr.him4.sin_addr.s_addr));
-+ setInetAddress_addr(env, iaObj, ntohl(addrs->addr.him4.sin_addr.s_addr));
-
- ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID);
- if (ibObj == NULL) {
-@@ -481,8 +482,7 @@
- free_netaddr(netaddrP);
- return NULL;
- }
-- (*env)->SetIntField(env, ia2Obj, ni_iaAddr,
-- ntohl(addrs->brdcast.him4.sin_addr.s_addr));
-+ setInetAddress_addr(env, ia2Obj, ntohl(addrs->brdcast.him4.sin_addr.s_addr));
- (*env)->SetObjectField(env, ibObj, ni_ibbroadcastID, ia2Obj);
- (*env)->SetShortField(env, ibObj, ni_ibmaskID, addrs->mask);
- (*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj);
-diff --git a/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c b/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c
---- jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c
-+++ jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c
-@@ -432,7 +432,7 @@
- int lcladdrlen;
- int address;
-
-- family = (*env)->GetIntField(env, addressObj, ia_familyID);
-+ family = getInetAddress_family(env, addressObj);
- if (family == IPv6 && !ipv6_supported) {
- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
- "Protocol family not supported");
-@@ -452,7 +452,7 @@
- JNU_ThrowNullPointerException(env, "argument address");
- return;
- } else {
-- address = (*env)->GetIntField(env, addressObj, ia_addressID);
-+ address = getInetAddress_addr(env, addressObj);
- }
-
- if (NET_InetAddressToSockaddr(env, addressObj, port, (struct sockaddr *)&lcladdr, &lcladdrlen, JNI_FALSE) != 0) {
-@@ -552,9 +552,9 @@
- return;
- }
-
-- addr = (*env)->GetIntField(env, address, ia_addressID);
-+ addr = getInetAddress_addr(env, address);
-
-- family = (*env)->GetIntField(env, address, ia_familyID);
-+ family = getInetAddress_family(env, address);
- if (family == IPv6 && !ipv6_supported) {
- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
- "Protocol family not supported");
-@@ -671,7 +671,7 @@
- return;
- }
-
-- family = (*env)->GetIntField(env, iaObj, ia_familyID);
-+ family = getInetAddress_family(env, iaObj);
- if (family == IPv4) {
- fdObj = (*env)->GetObjectField(env, this, pdsi_fdID);
- } else {
-@@ -715,7 +715,7 @@
- if (!w2k_or_later) { /* avoid this check on Win 2K or better. Does not work with IPv6.
- * Check is not necessary on these OSes */
- if (connected) {
-- address = (*env)->GetIntField(env, iaObj, ia_addressID);
-+ address = getInetAddress_addr(env, iaObj);
- } else {
- address = ntohl(rmtaddr.him4.sin_addr.s_addr);
- }
-@@ -824,7 +824,7 @@
- if (IS_NULL(addressObj)) {
- JNU_ThrowNullPointerException(env, "Null address in peek()");
- } else {
-- address = (*env)->GetIntField(env, addressObj, ia_addressID);
-+ address = getInetAddress_addr(env, addressObj);
- /* We only handle IPv4 for now. Will support IPv6 once its in the os */
- family = AF_INET;
- }
-@@ -906,9 +906,8 @@
- JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", 0);
- return 0;
- }
-- (*env)->SetIntField(env, addressObj, ia_addressID,
-- ntohl(remote_addr.sin_addr.s_addr));
-- (*env)->SetIntField(env, addressObj, ia_familyID, IPv4);
-+ setInetAddress_addr(env, addressObj, ntohl(remote_addr.sin_addr.s_addr));
-+ setInetAddress_family(env, addressObj, IPv4);
-
- /* return port */
- return ntohs(remote_addr.sin_port);
-@@ -1578,7 +1577,6 @@
- {
- jobjectArray addrArray;
- static jfieldID ni_addrsID=0;
-- static jfieldID ia_familyID=0;
- jsize len;
- jobject addr;
- int i;
-@@ -1589,10 +1587,6 @@
- ni_addrsID = (*env)->GetFieldID(env, c, "addrs",
- "[Ljava/net/InetAddress;");
- CHECK_NULL_RETURN (ni_addrsID, -1);
-- c = (*env)->FindClass(env,"java/net/InetAddress");
-- CHECK_NULL_RETURN (c, -1);
-- ia_familyID = (*env)->GetFieldID(env, c, "family", "I");
-- CHECK_NULL_RETURN (ia_familyID, -1);
- }
-
- addrArray = (*env)->GetObjectField(env, nif, ni_addrsID);
-@@ -1610,7 +1604,7 @@
- for (i=0; i<len; i++) {
- int fam;
- addr = (*env)->GetObjectArrayElement(env, addrArray, i);
-- fam = (*env)->GetIntField(env, addr, ia_familyID);
-+ fam = getInetAddress_family(env, addr);
- if (fam == family) {
- *iaddr = addr;
- return 0;
-@@ -1622,20 +1616,13 @@
- static int getInet4AddrFromIf (JNIEnv *env, jobject nif, struct in_addr *iaddr)
- {
- jobject addr;
-- static jfieldID ia_addressID;
-
- int ret = getInetAddrFromIf (env, IPv4, nif, &addr);
- if (ret == -1) {
- return -1;
- }
-
-- if (ia_addressID == 0) {
-- jclass c = (*env)->FindClass(env,"java/net/InetAddress");
-- CHECK_NULL_RETURN (c, -1);
-- ia_addressID = (*env)->GetFieldID(env, c, "address", "I");
-- CHECK_NULL_RETURN (ia_addressID, -1);
-- }
-- iaddr->s_addr = htonl((*env)->GetIntField(env, addr, ia_addressID));
-+ iaddr->s_addr = htonl(getInetAddress_addr(env, addr));
- return 0;
- }
-
-@@ -1710,17 +1697,9 @@
- }
- opt = java_net_SocketOptions_IP_MULTICAST_IF2;
- } else {
-- static jfieldID ia_addressID;
- struct in_addr in;
-
-- if (ia_addressID == NULL) {
-- jclass c = (*env)->FindClass(env,"java/net/InetAddress");
-- CHECK_NULL(c);
-- ia_addressID = (*env)->GetFieldID(env, c, "address", "I");
-- CHECK_NULL(ia_addressID);
-- }
--
-- in.s_addr = htonl((*env)->GetIntField(env, value, ia_addressID));
-+ in.s_addr = htonl(getInetAddress_addr(env, value));
-
- if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
- (const char*)&in, sizeof(in)) < 0) {
-@@ -1949,7 +1928,6 @@
- if (isIPV4) {
- static jclass inet4_class;
- static jmethodID inet4_ctrID;
-- static jfieldID inet4_addrID;
-
- static jclass ni_class;
- static jmethodID ni_ctrID;
-@@ -1979,15 +1957,13 @@
- CHECK_NULL_RETURN(c, NULL);
- inet4_ctrID = (*env)->GetMethodID(env, c, "<init>", "()V");
- CHECK_NULL_RETURN(inet4_ctrID, NULL);
-- inet4_addrID = (*env)->GetFieldID(env, c, "address", "I");
-- CHECK_NULL_RETURN(inet4_addrID, NULL);
- inet4_class = (*env)->NewGlobalRef(env, c);
- CHECK_NULL_RETURN(inet4_class, NULL);
- }
- addr = (*env)->NewObject(env, inet4_class, inet4_ctrID, 0);
- CHECK_NULL_RETURN(addr, NULL);
-
-- (*env)->SetIntField(env, addr, inet4_addrID, ntohl(in.s_addr));
-+ setInetAddress_addr(env, addr, ntohl(in.s_addr));
-
- /*
- * For IP_MULTICAST_IF return InetAddress
-diff --git a/src/windows/native/java/net/TwoStacksPlainSocketImpl.c b/src/windows/native/java/net/TwoStacksPlainSocketImpl.c
---- jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c
-+++ jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c
-@@ -410,7 +410,7 @@
- fdObj = (*env)->GetObjectField(env, this, psi_fdID);
- fd1Obj = (*env)->GetObjectField(env, this, psi_fd1ID);
-
-- family = (*env)->GetIntField(env, iaObj, ia_familyID);
-+ family = getInetAddress_family(env, iaObj);
-
- if (family == IPv6 && !ipv6_supported) {
- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
-@@ -722,9 +722,8 @@
- return;
- }
-
-- (*env)->SetIntField(env, socketAddressObj, ia_addressID,
-- ntohl(him.him4.sin_addr.s_addr));
-- (*env)->SetIntField(env, socketAddressObj, ia_familyID, IPv4);
-+ setInetAddress_addr(env, socketAddressObj, ntohl(him.him4.sin_addr.s_addr));
-+ setInetAddress_family(env, socketAddressObj, IPv4);
- (*env)->SetObjectField(env, socket, psi_addressID, socketAddressObj);
- } else {
- jbyteArray addr;
-@@ -752,7 +751,7 @@
- }
- addr = (*env)->GetObjectField (env, socketAddressObj, ia6_ipaddressID);
- (*env)->SetByteArrayRegion (env, addr, 0, 16, (const char *)&him.him6.sin6_addr);
-- (*env)->SetIntField(env, socketAddressObj, ia_familyID, IPv6);
-+ setInetAddress_family(env, socketAddressObj, IPv6);
- (*env)->SetIntField(env, socketAddressObj, ia6_scopeidID, him.him6.sin6_scope_id);
- }
- /* fields common to AF_INET and AF_INET6 */
-diff --git a/src/windows/native/java/net/net_util_md.c b/src/windows/native/java/net/net_util_md.c
---- jdk/src/windows/native/java/net/net_util_md.c
-+++ jdk/src/windows/native/java/net/net_util_md.c
-@@ -832,7 +832,7 @@
- NET_InetAddressToSockaddr(JNIEnv *env, jobject iaObj, int port, struct sockaddr *him,
- int *len, jboolean v4MappedAddress) {
- jint family, iafam;
-- iafam = (*env)->GetIntField(env, iaObj, ia_familyID);
-+ iafam = getInetAddress_family(env, iaObj);
- family = (iafam == IPv4)? AF_INET : AF_INET6;
- if (ipv6_available() && !(family == AF_INET && v4MappedAddress == JNI_FALSE)) {
- struct SOCKADDR_IN6 *him6 = (struct SOCKADDR_IN6 *)him;
-@@ -843,7 +843,7 @@
-
- if (family == AF_INET) { /* will convert to IPv4-mapped address */
- memset((char *) caddr, 0, 16);
-- address = (*env)->GetIntField(env, iaObj, ia_addressID);
-+ address = getInetAddress_addr(env, iaObj);
- if (address == INADDR_ANY) {
- /* we would always prefer IPv6 wildcard address
- caddr[10] = 0xff;
-@@ -882,7 +882,7 @@
- return -1;
- }
- memset((char *) him4, 0, sizeof(struct sockaddr_in));
-- address = (int)(*env)->GetIntField(env, iaObj, ia_addressID);
-+ address = getInetAddress_addr(env, iaObj);
- him4->sin_port = htons((short) port);
- him4->sin_addr.s_addr = (u_long) htonl(address);
- him4->sin_family = AF_INET;