Giuseppe Scrivano
Mon, 15 Feb 2010 09:38:26 -0800
Hello, I tried to build the last revision from CVS and I got this error:
gnu_java_nio_VMChannel.c: In function ‘Java_gnu_java_nio_VMChannel_receive’:
gnu_java_nio_VMChannel.c:812: error: dereferencing pointer ‘sockaddr’
does break strict-aliasing rules
gnu_java_nio_VMChannel.c:804: error: dereferencing pointer ‘sockaddr’
does break strict-aliasing rules
This is the gcc version I am using:
$ gcc --version
gcc (Debian 4.4.2-9) 4.4.3 20100108 (prerelease)
I am not sure this is the proper way to fix it, it looks to me like a
hack but I don't know a better way to do it, any comment?
Cheers,
Giuseppe
+2010-02-14 Giuseppe Scrivano <gscriv...@gnu.org>
+
+ * native/jni/java-nio/gnu_java_nio_VMChannel.c
+ (Java_gnu_java_nio_VMChannel_getpeername): Change type of
+ `sock_storage' to char[].
+ (Java_gnu_java_nio_VMChannel_getsockname): Likewise.
+ (Java_gnu_java_nio_VMChannel_receive): Likewise.
+
2010-01-15 Rainer Orth <r...@cebitec.uni-bielefeld.de>
PR libgcj/38251
Index: native/jni/java-nio/gnu_java_nio_VMChannel.c
===================================================================
RCS file:
/sources/classpath/classpath/native/jni/java-nio/gnu_java_nio_VMChannel.c,v
retrieving revision 1.22
diff -u -r1.22 gnu_java_nio_VMChannel.c
--- native/jni/java-nio/gnu_java_nio_VMChannel.c 28 Dec 2007 17:49:56
-0000 1.22
+++ native/jni/java-nio/gnu_java_nio_VMChannel.c 14 Feb 2010 17:11:08
-0000
@@ -758,11 +758,11 @@
char *addrPortPtr = (*env)->GetDirectBufferAddress (env, addrPort);
struct JCL_buffer buf;
#ifdef HAVE_INET6
- struct sockaddr_in6 sock_storage;
struct sockaddr_in6 *sock6;
+ char sock_storage[sizeof (struct sockaddr_in6)];
socklen_t slen = sizeof (struct sockaddr_in6);
#else
- struct sockaddr_in sock_storage;
+ char sock_storage[sizeof (struct sockaddr_in)];
socklen_t slen = sizeof (struct sockaddr_in);
#endif /* HAVE_INET6 */
struct sockaddr *sockaddr = (struct sockaddr *) &sock_storage;
@@ -1360,10 +1360,10 @@
#ifdef HAVE_GETSOCKNAME
#ifdef HAVE_INET6
struct sockaddr_in6 *addr6;
- struct sockaddr_in6 sock_storage;
+ char sock_storage[sizeof (struct sockaddr_in6)];
socklen_t socklen = sizeof (struct sockaddr_in6);
#else
- struct sockaddr_in sock_storage;
+ char sock_storage[sizeof (struct sockaddr_in)];
socklen_t socklen = sizeof (struct sockaddr_in);
#endif /* HAVE_INET6 */
@@ -1420,10 +1420,11 @@
#ifdef HAVE_GETPEERNAME
#ifdef HAVE_INET6
struct sockaddr_in6 *addr6;
- struct sockaddr_in6 sock_storage;
+ /* struct sockaddr_in6 sock_storage;*/
+ char sock_storage[sizeof (struct sockaddr_in6)];
socklen_t socklen = sizeof (struct sockaddr_in6);
#else
- struct sockaddr_in sock_storage;
+ char sock_storage[sizeof (struct sockaddr_in)];
socklen_t socklen = sizeof (struct sockaddr_in);
#endif /* HAVE_INET6 */
_______________________________________________
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches