summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Schuster <theBohemian@gmx.net>2006-10-24 23:19:47 +0000
committerRobert Schuster <theBohemian@gmx.net>2006-10-24 23:19:47 +0000
commitdecadab307d6855e39a5ffa27967fa9568954b91 (patch)
tree606c093d4c0fc1a1dc5a6144c5b94d6877d50ad3
parent54df2ab823c74e470e2ece7c33d8a8f9f7ba6176 (diff)
downloadclasspath-decadab307d6855e39a5ffa27967fa9568954b91.tar.gz
2006-10-25 Robert Schuster <robertschuster@fsfe.org>
Fixes PR29576 * java/net/NetworkInterface.java: (createAnyInterface): New method. (equals): Added if-statement to handle case where netif.name is null. * vm/reference/java/net/VMNetworkInterface.java: (hashCode): Rewritten. (VMNetworkInterface): New constructor.
-rw-r--r--ChangeLog10
-rw-r--r--java/net/NetworkInterface.java20
-rw-r--r--vm/reference/java/net/VMNetworkInterface.java17
3 files changed, 46 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 2d0384b19..49719338d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2006-10-25 Robert Schuster <robertschuster@fsfe.org>
+
+ Fixes PR29576
+ * java/net/NetworkInterface.java:
+ (createAnyInterface): New method.
+ (equals): Added if-statement to handle case where netif.name is null.
+ * vm/reference/java/net/VMNetworkInterface.java:
+ (hashCode): Rewritten.
+ (VMNetworkInterface): New constructor.
+
2006-10-24 Thomas Fitzsimmons <fitzsim@redhat.com>
* tools/Makefile.am: Add ASM_JAR define to each tool's CFLAGS.
diff --git a/java/net/NetworkInterface.java b/java/net/NetworkInterface.java
index 1d5c409ed..1b52cf3cb 100644
--- a/java/net/NetworkInterface.java
+++ b/java/net/NetworkInterface.java
@@ -67,6 +67,16 @@ public final class NetworkInterface
this.netif = netif;
}
+ /** Creates an NetworkInterface instance which
+ * represents any interface in the system. Its only
+ * address is <code>0.0.0.0/0.0.0.0</code>. This
+ * method is needed by {@link MulticastSocket#getNetworkInterface}
+ */
+ static NetworkInterface createAnyInterface()
+ {
+ return new NetworkInterface(new VMNetworkInterface());
+ }
+
/**
* Returns the name of the network interface
*
@@ -206,6 +216,9 @@ public final class NetworkInterface
return false;
NetworkInterface tmp = (NetworkInterface) obj;
+
+ if (netif.name == null)
+ return tmp.netif.name == null;
return (netif.name.equals(tmp.netif.name)
&& (netif.addresses.equals(tmp.netif.addresses)));
@@ -219,7 +232,12 @@ public final class NetworkInterface
public int hashCode()
{
// FIXME: hash correctly
- return netif.name.hashCode() + netif.addresses.hashCode();
+ int hc = netif.addresses.hashCode();
+
+ if (netif.name != null)
+ hc += netif.name.hashCode();
+
+ return hc;
}
/**
diff --git a/vm/reference/java/net/VMNetworkInterface.java b/vm/reference/java/net/VMNetworkInterface.java
index 7a29f4ee3..7f1e3ad98 100644
--- a/vm/reference/java/net/VMNetworkInterface.java
+++ b/vm/reference/java/net/VMNetworkInterface.java
@@ -66,6 +66,23 @@ final class VMNetworkInterface
addresses = new HashSet();
}
+ /**
+ * Creates a dummy instance which represents any network
+ * interface.
+ */
+ public VMNetworkInterface()
+ {
+ addresses = new HashSet();
+ try
+ {
+ addresses.add(InetAddress.getByName("0.0.0.0"));
+ }
+ catch (UnknownHostException _)
+ {
+ // Cannot happen.
+ }
+ }
+
static
{
if (Configuration.INIT_LOAD_LIBRARY)