This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: 3.0.1 PATCH: Fix java/net compilation failures on Tru64 UNIX


Tom Tromey writes:

> Rainer> Ok for branch and mainline?
> 
> Yes, thanks.

based on a problem I discovered during a bootstrap on mips-sgi-irix6.5
(which completely lacks socklen_t) and feedback from Antonio who tried a
bootstrap on Tru64 UNIX V5.0, I'd like to checkin a slightly modified
version, which fixes two additional problems.  Ok?

	Rainer

-----------------------------------------------------------------------------
Rainer Orth, Faculty of Technology, Bielefeld University

Email: ro@TechFak.Uni-Bielefeld.DE


Fri Jul 27 16:33:45 2001  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	* include/posix.h (_POSIX_PII_SOCKET): Define.
	* configure.in (HAVE_SOCKLEN_T): Define.
	* java/net/natPlainSocketImpl.cc [!HAVE_SOCKLEN_T]: Move socklen_t
	definition up. 
	(_JV_accept): New function, avoids Tru64 UNIX accept macro.
	(java::net::PlainSocketImpl::accept): Use it.
	Fixes PRs libgcj/3694, libgcj/3696.
	
	* configure.in (HAVE_STRUCT_IPV6_MREQ): New test.
	* acconfig.h (HAVE_STRUCT_IPV6_MREQ): Provide template.
	* configure, include/config.h.in: Regenerate.
	* java/net/natPlainDatagramSocketImpl.cc (union McastReq): Use it.
	(mcastGrp): Likewise.
	(java::net::PlainDatagramSocketImpl::setOption): Guard against
	missing IPV6_MULTICAST_IF.
	Fixes PR libgcj/3694.
	
Index: libjava/acconfig.h
===================================================================
RCS file: /cvs/gcc/gcc/libjava/acconfig.h,v
retrieving revision 1.19
diff -u -p -r1.19 acconfig.h
--- acconfig.h	2000/04/02 15:34:17	1.19
+++ acconfig.h	2001/07/30 16:38:55
@@ -65,6 +65,9 @@
 /* Define if struct ip_mreq is defined in netinet/in.h.  */
 #undef HAVE_STRUCT_IP_MREQ
 
+/* Define if struct ipv6_mreq is defined in netinet/in.h.  */
+#undef HAVE_STRUCT_IPV6_MREQ
+
 /* Define it socklen_t typedef is in sys/socket.h.  */
 #undef HAVE_SOCKLEN_T
 
Index: libjava/configure.in
===================================================================
RCS file: /cvs/gcc/gcc/libjava/configure.in,v
retrieving revision 1.73.2.14
diff -u -p -r1.73.2.14 configure.in
--- configure.in	2001/07/18 16:56:40	1.73.2.14
+++ configure.in	2001/07/30 16:38:58
@@ -700,6 +700,12 @@ AC_TRY_COMPILE([#include <netinet/in.h>]
    AC_MSG_RESULT(yes)],
   [AC_MSG_RESULT(no)])
 
+AC_MSG_CHECKING([whether struct ipv6_mreq is in netinet/in.h])
+AC_TRY_COMPILE([#include <netinet/in.h>], [struct ipv6_mreq mreq6;],
+  [AC_DEFINE(HAVE_STRUCT_IPV6_MREQ)
+   AC_MSG_RESULT(yes)],
+  [AC_MSG_RESULT(no)])
+
 AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
 AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
   [AC_DEFINE(HAVE_INET6)
@@ -707,7 +713,8 @@ AC_TRY_COMPILE([#include <netinet/in.h>]
   [AC_MSG_RESULT(no)])
 
 AC_MSG_CHECKING([for socklen_t in sys/socket.h])
-AC_TRY_COMPILE([#include <sys/types.h>
+AC_TRY_COMPILE([#define _POSIX_PII_SOCKET
+#include <sys/types.h>
 #include <sys/socket.h>], [socklen_t x = 5;],
   [AC_DEFINE(HAVE_SOCKLEN_T)
    AC_MSG_RESULT(yes)],
Index: libjava/include/posix.h
===================================================================
RCS file: /cvs/gcc/gcc/libjava/include/posix.h,v
retrieving revision 1.1
diff -u -p -r1.1 posix.h
--- posix.h	2000/08/02 21:54:04	1.1
+++ posix.h	2001/07/30 16:38:59
@@ -8,6 +8,11 @@ This software is copyrighted work licens
 Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
 details.  */
 
+/* Required on Tru64 UNIX V4/V5 so <sys/socket.h> defines prototypes of
+   socket functions with socklen_t instead of size_t.  This must be defined
+   early so <standards.h> defines the correct version of __PIIX.  */
+#define _POSIX_PII_SOCKET
+
 #include <time.h>
 #include <sys/types.h>
 
Index: libjava/java/net/natPlainDatagramSocketImpl.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/net/natPlainDatagramSocketImpl.cc,v
retrieving revision 1.26.4.2
diff -u -p -r1.26.4.2 natPlainDatagramSocketImpl.cc
--- natPlainDatagramSocketImpl.cc	2001/07/18 20:38:15	1.26.4.2
+++ natPlainDatagramSocketImpl.cc	2001/07/30 16:39:05
@@ -158,7 +158,7 @@ union McastReq
 #if HAVE_STRUCT_IP_MREQ
   struct ip_mreq mreq;
 #endif
-#ifdef HAVE_INET6
+#if HAVE_STRUCT_IPV6_MREQ
   struct ipv6_mreq mreq6;
 #endif
 };
@@ -423,7 +423,7 @@ java::net::PlainDatagramSocketImpl::mcas
       ptr = (const char *) &u.mreq;
     }
 #endif
-#ifdef HAVE_INET6
+#if HAVE_STRUCT_IPV6_MREQ
   else if (len == 16)
     {
       level = IPPROTO_IPV6;
@@ -531,7 +531,8 @@ java::net::PlainDatagramSocketImpl::setO
 	    len = sizeof (struct in_addr);
 	    ptr = (const char *) &u.addr;
 	  }
-#ifdef HAVE_INET6
+// Tru64 UNIX V5.0 has struct sockaddr_in6, but no IPV6_MULTICAST_IF
+#if defined (HAVE_INET6) && defined (IPV6_MULTICAST_IF)
 	else if (len == 16)
 	  {
 	    level = IPPROTO_IPV6;
Index: libjava/java/net/natPlainSocketImpl.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/net/natPlainSocketImpl.cc,v
retrieving revision 1.23.4.1
diff -u -p -r1.23.4.1 natPlainSocketImpl.cc
--- natPlainSocketImpl.cc	2001/05/24 03:07:51	1.23.4.1
+++ natPlainSocketImpl.cc	2001/07/30 16:39:05
@@ -33,6 +33,10 @@ details.  */
 #include <bstring.h>
 #endif
 
+#ifndef HAVE_SOCKLEN_T
+typedef int socklen_t;
+#endif
+
 // Avoid macro definitions of bind, connect from system headers, e.g. on
 // Solaris 7 with _XOPEN_SOURCE.  FIXME
 static inline int
@@ -55,6 +59,17 @@ _Jv_connect (int fd, struct sockaddr *ad
 #undef connect
 #endif
 
+// Same problem with accept on Tru64 UNIX with _POSIX_PII_SOCKET
+static inline int
+_Jv_accept (int fd, struct sockaddr *addr, socklen_t *addrlen)
+{
+  return ::accept (fd, addr, addrlen);
+}
+
+#ifdef accept
+#undef accept
+#endif
+
 #include <gcj/cni.h>
 #include <gcj/javaprims.h>
 #include <java/io/IOException.h>
@@ -126,10 +141,6 @@ java::net::PlainSocketImpl::getOption (j
 
 #else /* DISABLE_JAVA_NET */
 
-#ifndef HAVE_SOCKLEN_T
-typedef int socklen_t;
-#endif
-
 union SockAddr
 {
   struct sockaddr_in address;
@@ -283,7 +294,7 @@ java::net::PlainSocketImpl::accept (java
 	         JvNewStringUTF("Accept timed out"));
     }
 
-  new_socket = ::accept (fnum, (sockaddr*) &u, &addrlen);
+  new_socket = _Jv_accept (fnum, (sockaddr*) &u, &addrlen);
   if (new_socket < 0)
     goto error;
   jbyteArray raddr;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]