diff options
author | Robert Schuster <theBohemian@gmx.net> | 2006-10-24 23:19:47 +0000 |
---|---|---|
committer | Robert Schuster <theBohemian@gmx.net> | 2006-10-24 23:19:47 +0000 |
commit | decadab307d6855e39a5ffa27967fa9568954b91 (patch) | |
tree | 606c093d4c0fc1a1dc5a6144c5b94d6877d50ad3 | |
parent | 54df2ab823c74e470e2ece7c33d8a8f9f7ba6176 (diff) | |
download | classpath-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-- | ChangeLog | 10 | ||||
-rw-r--r-- | java/net/NetworkInterface.java | 20 | ||||
-rw-r--r-- | vm/reference/java/net/VMNetworkInterface.java | 17 |
3 files changed, 46 insertions, 1 deletions
@@ -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) |