On 11:18 Thu 03 Mar     , Damjan Jovanovic wrote:
> Hi
> 
> Classpath 0.98 doesn't even compile nowdays, giving various pointer
> aliasing errors on GCC 4.4.3 and later. 

It will with --disable-werror.  There's not really a way we can change
the existing release.  I'm aiming for a new release soon but myself
and Pekka Enberg seem to be the only ones committing to Classpath at
present.  I guess the rest shackled themselves to Oracle's OpenJDK.

> One of the affected files,
> native/jni/native-lib/cpnet.c, has already been patched in CVS (so why
> hasn't it been released yet?), and I am attaching a patch for the
> other.
> 

Thanks.  I'll give it a test.

I note you haven't contributed before, but I think this is trivial enough
to just apply without copyright assignment.  I'm puzzled why I haven't
hit this failure myself with GCC 4.5.2.

> Regards
> Damjan Jovanovic

> diff -ur classpath-0.98/native/jni/java-nio/gnu_java_nio_VMChannel.c 
> classpath-0.98-patched/native/jni/java-nio/gnu_java_nio_VMChannel.c
> --- classpath-0.98/native/jni/java-nio/gnu_java_nio_VMChannel.c       
> 2007-12-28 19:49:56.000000000 +0200
> +++ classpath-0.98-patched/native/jni/java-nio/gnu_java_nio_VMChannel.c       
> 2011-03-03 11:06:15.000000000 +0200
> @@ -761,9 +761,11 @@
>    struct sockaddr_in6 sock_storage;
>    struct sockaddr_in6 *sock6;
>    socklen_t slen = sizeof (struct sockaddr_in6);
> +#define SIN_FAMILY sin6_family
>  #else
>    struct sockaddr_in sock_storage;
>    socklen_t slen = sizeof (struct sockaddr_in);
> +#define SIN_FAMILY sin_family
>  #endif /* HAVE_INET6 */
>    struct sockaddr *sockaddr = (struct sockaddr *) &sock_storage;
>    struct sockaddr_in *sock4;
> @@ -801,7 +803,7 @@
>        return 0;
>      }
>  
> -  if (sockaddr->sa_family == AF_INET)
> +  if (sock_storage.SIN_FAMILY == AF_INET)
>      {
>        sock4 = (struct sockaddr_in *) sockaddr;
>        memcpy (addrPortPtr, &(sock4->sin_addr.s_addr), 4);
> @@ -809,7 +811,7 @@
>        result = 4;
>      }
>  #ifdef HAVE_INET6
> -  else if (sockaddr->sa_family == AF_INET6)
> +  else if (sock_storage.SIN_FAMILY == AF_INET6)
>      {
>        sock6 = (struct sockaddr_in6 *) sockaddr;
>        memcpy (addrPortPtr, &(sock6->sin6_addr.s6_addr), 16);
> @@ -829,6 +831,7 @@
>  
>    buf.count += ret;
>    JCL_release_buffer (env, &buf, dst, 0);
> +#undef SIN_FAMILY
>    return result;
>  #else
>    (void) fd;
> @@ -1362,9 +1365,11 @@
>    struct sockaddr_in6 *addr6;
>    struct sockaddr_in6 sock_storage;
>    socklen_t socklen = sizeof (struct sockaddr_in6);
> +#define SIN_FAMILY sin6_family
>  #else
>    struct sockaddr_in sock_storage;
>    socklen_t socklen = sizeof (struct sockaddr_in);
> +#define SIN_FAMILY sin_family
>  #endif /* HAVE_INET6 */
>  
>    struct sockaddr *sockaddr = (struct sockaddr *) &sock_storage;
> @@ -1379,7 +1384,7 @@
>        return 0;
>      }
>  
> -  if (sockaddr->sa_family == AF_INET)
> +  if (sock_storage.SIN_FAMILY == AF_INET)
>      {
>        addr4 = (struct sockaddr_in *) sockaddr;
>        memcpy (nameptr, &(addr4->sin_addr.s_addr), 4);
> @@ -1389,7 +1394,7 @@
>  
>  #ifdef HAVE_INET6
>    /* IPv6 */
> -  if (sockaddr->sa_family == AF_INET6)
> +  if (sock_storage.SIN_FAMILY == AF_INET6)
>      {
>        addr6 = (struct sockaddr_in6 *) sockaddr;
>        memcpy (nameptr, &(addr6->sin6_addr.s6_addr), 16);
> @@ -1404,6 +1409,7 @@
>    (void) name;
>    JCL_ThrowException (env, IO_EXCEPTION, "getsockname not supported");
>    return -1;
> +#undef SIN_FAMILY
>  #endif /* HAVE_GETSOCKNAME */
>  }
>  
> @@ -1422,9 +1428,11 @@
>    struct sockaddr_in6 *addr6;
>    struct sockaddr_in6 sock_storage;
>    socklen_t socklen = sizeof (struct sockaddr_in6);
> +#define SIN_FAMILY sin6_family
>  #else
>    struct sockaddr_in sock_storage;
>    socklen_t socklen = sizeof (struct sockaddr_in);
> +#define SIN_FAMILY sin_family
>  #endif /* HAVE_INET6 */
>  
>    struct sockaddr *sockaddr = (struct sockaddr *) &sock_storage;
> @@ -1440,7 +1448,7 @@
>        return 0;
>      }
>  
> -  if (sockaddr->sa_family == AF_INET)
> +  if (sock_storage.SIN_FAMILY == AF_INET)
>      {
>        addr4 = (struct sockaddr_in *) sockaddr;
>        memcpy (nameptr, &(addr4->sin_addr.s_addr), 4);
> @@ -1448,7 +1456,7 @@
>        return 4;
>      }
>  #ifdef HAVE_INET6
> -  else if (sockaddr->sa_family == AF_INET6)
> +  else if (sock_storage.SIN_FAMILY == AF_INET6)
>      {
>        addr6 = (struct sockaddr_in6 *) sockaddr;
>        memcpy (nameptr, &(addr6->sin6_addr.s6_addr), 16);


-- 
Andrew :)

Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)

Support Free Java!
Contribute to GNU Classpath and IcedTea
http://www.gnu.org/software/classpath
http://icedtea.classpath.org
PGP Key: F5862A37 (https://keys.indymedia.org/)
Fingerprint = EA30 D855 D50F 90CD F54D  0698 0713 C3ED F586 2A37

Reply via email to