Author: axeld Date: 2010-07-29 11:33:45 +0200 (Thu, 29 Jul 2010) New Revision: 37804 Changeset: http://dev.haiku-os.org/changeset/37804 Modified: haiku/trunk/src/add-ons/kernel/network/protocols/ipv4/ipv4_address.cpp haiku/trunk/src/add-ons/kernel/network/protocols/ipv6/ipv6_address.cpp haiku/trunk/src/add-ons/kernel/network/protocols/l2cap/l2cap_address.cpp haiku/trunk/src/add-ons/kernel/network/protocols/unix/UnixAddress.cpp Log: * Made sure is_empty_address() also detects AF_UNSPEC addresses as empty. * The is_empty_address() function of AF_UNIX did not deal correctly with empty addresses. Modified: haiku/trunk/src/add-ons/kernel/network/protocols/ipv4/ipv4_address.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/network/protocols/ipv4/ipv4_address.cpp 2010-07-29 09:28:54 UTC (rev 37803) +++ haiku/trunk/src/add-ons/kernel/network/protocols/ipv4/ipv4_address.cpp 2010-07-29 09:33:45 UTC (rev 37804) @@ -100,7 +100,8 @@ static bool ipv4_is_empty_address(const sockaddr *address, bool checkPort) { - if (address == NULL || address->sa_len == 0) + if (address == NULL || address->sa_len == 0 + || address->sa_family == AF_UNSPEC) return true; return ((sockaddr_in *)address)->sin_addr.s_addr == 0 Modified: haiku/trunk/src/add-ons/kernel/network/protocols/ipv6/ipv6_address.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/network/protocols/ipv6/ipv6_address.cpp 2010-07-29 09:28:54 UTC (rev 37803) +++ haiku/trunk/src/add-ons/kernel/network/protocols/ipv6/ipv6_address.cpp 2010-07-29 09:33:45 UTC (rev 37804) @@ -113,7 +113,8 @@ static bool ipv6_is_empty_address(const sockaddr *_address, bool checkPort) { - if (_address == NULL || _address->sa_len == 0) + if (_address == NULL || _address->sa_len == 0 + || _address->sa_family == AF_UNSPEC) return true; const sockaddr_in6 *address = (const sockaddr_in6 *)_address; Modified: haiku/trunk/src/add-ons/kernel/network/protocols/l2cap/l2cap_address.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/network/protocols/l2cap/l2cap_address.cpp 2010-07-29 09:28:54 UTC (rev 37803) +++ haiku/trunk/src/add-ons/kernel/network/protocols/l2cap/l2cap_address.cpp 2010-07-29 09:33:45 UTC (rev 37804) @@ -90,7 +90,8 @@ static bool l2cap_is_empty_address(const sockaddr *address, bool checkPort) { - if (address == NULL || address->sa_len == 0) + if (address == NULL || address->sa_len == 0 + || address->sa_family == AF_UNSPEC) return true; return ((bdaddrUtils::Compare( Modified: haiku/trunk/src/add-ons/kernel/network/protocols/unix/UnixAddress.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/network/protocols/unix/UnixAddress.cpp 2010-07-29 09:28:54 UTC (rev 37803) +++ haiku/trunk/src/add-ons/kernel/network/protocols/unix/UnixAddress.cpp 2010-07-29 09:33:45 UTC (rev 37804) @@ -108,10 +108,13 @@ static bool unix_is_empty_address(const sockaddr *address, bool checkPort) { - return address->sa_len >= kEmptyAddress.sun_len - && memcmp(address, &kEmptyAddress, kEmptyAddress.sun_len) == 0; + return address == NULL || address->sa_len == 0 + || address->sa_family == AF_UNSPEC) + || (address->sa_len >= kEmptyAddress.sun_len + && memcmp(address, &kEmptyAddress, kEmptyAddress.sun_len) == 0); } + static bool unix_is_same_family(const sockaddr *address) { @@ -121,6 +124,7 @@ return address->sa_family == AF_UNIX; } + static int32 unix_first_mask_bit(const sockaddr *mask) {