You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by hi...@apache.org on 2010/06/07 19:14:05 UTC
svn commit: r952336 -
/harmony/enhanced/java/trunk/classlib/modules/portlib/src/main/native/port/unix/hysock.c
Author: hindessm
Date: Mon Jun 7 17:14:05 2010
New Revision: 952336
URL: http://svn.apache.org/viewvc?rev=952336&view=rev
Log:
Fix FreeBSD socket problem - it requires the sin_len field to be correct.
"ant -Dexclude.module=awt,swing test" now passes 99.27% of 17597 tests.
This indirectly fixes "[#HARMONY-6458] [classlib] [portlib] unix/hysock.c
hysock_bind has redundant code".
Modified:
harmony/enhanced/java/trunk/classlib/modules/portlib/src/main/native/port/unix/hysock.c
Modified: harmony/enhanced/java/trunk/classlib/modules/portlib/src/main/native/port/unix/hysock.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/classlib/modules/portlib/src/main/native/port/unix/hysock.c?rev=952336&r1=952335&r2=952336&view=diff
==============================================================================
--- harmony/enhanced/java/trunk/classlib/modules/portlib/src/main/native/port/unix/hysock.c (original)
+++ harmony/enhanced/java/trunk/classlib/modules/portlib/src/main/native/port/unix/hysock.c Mon Jun 7 17:14:05 2010
@@ -602,12 +602,16 @@ hysock_bind (struct HyPortLibrary * port
{
length = ((OSSOCKADDR_IN6 *) & addr->addr)->sin6_len;
}
+#if defined(FREEBSD)
+ else {
+ length = ((OSSOCKADDR *) & addr->addr)->sin_len;
+ }
+#endif
#endif
#endif
if (bind
- (SOCKET_CAST (sock), (struct sockaddr *) &addr->addr,
- sizeof (addr->addr)) < 0)
+ (SOCKET_CAST (sock), (struct sockaddr *) &addr->addr, length) < 0)
{
rc = errno;
HYSOCKDEBUG ("<bind failed, err=%d>\n", rc);
@@ -678,10 +682,15 @@ hysock_connect (struct HyPortLibrary * p
hysockaddr_t addr)
{
I_32 rc = 0;
+ I_32 length =
+#if !defined(FREEBSD)
+ sizeof (addr->addr);
+#else
+ ((OSSOCKADDR *) & addr->addr)->sin_len;
+#endif
if (connect
- (SOCKET_CAST (sock), (struct sockaddr *) &addr->addr,
- sizeof (addr->addr)) < 0)
+ (SOCKET_CAST (sock), (struct sockaddr *) &addr->addr, length) < 0)
{
rc = errno;
HYSOCKDEBUG ("<connect failed, err=%d>\n", rc);
@@ -3465,6 +3474,9 @@ hysock_sockaddr_init (struct HyPortLibra
sockaddr->sin_family = family;
sockaddr->sin_addr.s_addr = nipAddr;
sockaddr->sin_port = nPort;
+#if defined(FREEBSD)
+ sockaddr->sin_len = sizeof(OSSOCKADDR);
+#endif
return 0;
}
@@ -3530,6 +3542,9 @@ hysock_sockaddr_init6 (struct HyPortLibr
sockaddr_6->sin6_family = OS_AF_INET6;
sockaddr_6->sin6_scope_id = scope_id;
sockaddr_6->sin6_flowinfo = htonl (flowinfo);
+#if defined(FREEBSD)
+ sockaddr_6->sin6_len = sizeof(OSSOCKADDR_IN6);
+#endif
}
else
{
@@ -3540,6 +3555,10 @@ hysock_sockaddr_init6 (struct HyPortLibr
memcpy (&sockaddr->sin_addr.s_addr, addr, addrlength);
sockaddr->sin_port = nPort;
sockaddr->sin_family = OS_AF_INET4;
+#if defined(FREEBSD)
+ sockaddr->sin_len = sizeof(OSSOCKADDR);
+#endif
+
#if defined(IPv6_FUNCTION_SUPPORT)
}
#endif
@@ -3555,7 +3574,7 @@ hysock_sockaddr_init6 (struct HyPortLibr
sockaddr_6->sin6_scope_id = scope_id;
sockaddr_6->sin6_flowinfo = htonl (flowinfo);
#if defined(SIN6_LEN)
- sockaddr_6->sin6_len = sizeof (struct sockaddr_in6);
+ sockaddr_6->sin6_len = sizeof(OSSOCKADDR_IN6);
if (((OSSOCKADDR_IN6 *) & handle->addr)->sin6_len != 0)
{
sockaddr_6->sin6_len =
@@ -3571,6 +3590,9 @@ hysock_sockaddr_init6 (struct HyPortLibr
memcpy (&sockaddr->sin_addr.s_addr, addr, HYSOCK_INADDR_LEN);
sockaddr->sin_port = nPort;
sockaddr->sin_family = map_addr_family_Hy_to_OS (family);
+#if defined(FREEBSD)
+ sockaddr->sin_len = sizeof(OSSOCKADDR);
+#endif
}
return 0;