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