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