OSDN Git Service

* gcc-interface/decl.c (make_type_from_size) <INTEGER_TYPE>: Just copy
[pf3gnuchains/gcc-fork.git] / gcc / ada / gsocket.h
index c500019..ca016c9 100644 (file)
  *                                                                          *
  *                         GNAT COMPILER COMPONENTS                         *
  *                                                                          *
- *                               S O C K E T                                *
+ *                              G S O C K E T                               *
  *                                                                          *
  *                              C Header File                               *
  *                                                                          *
- *            Copyright (C) 2004, Free Software Foundation, Inc.            *
+ *         Copyright (C) 2004-2010, Free Software Foundation, Inc.          *
  *                                                                          *
  * GNAT is free software;  you can  redistribute it  and/or modify it under *
  * terms of the  GNU General Public License as published  by the Free Soft- *
- * ware  Foundation;  either version 2,  or (at your option) any later ver- *
+ * ware  Foundation;  either version 3,  or (at your option) any later ver- *
  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
- * for  more details.  You should have  received  a copy of the GNU General *
- * Public License  distributed with GNAT;  see file COPYING.  If not, write *
- * to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, *
- * MA 02111-1307, USA.                                                      *
+ * or FITNESS FOR A PARTICULAR PURPOSE.                                     *
  *                                                                          *
- * As a  special  exception,  if you  link  this file  with other  files to *
- * produce an executable,  this file does not by itself cause the resulting *
- * executable to be covered by the GNU General Public License. This except- *
- * ion does not  however invalidate  any other reasons  why the  executable *
- * file might be covered by the  GNU Public License.                        *
+ * As a special exception under Section 7 of GPL version 3, you are granted *
+ * additional permissions described in the GCC Runtime Library Exception,   *
+ * version 3.1, as published by the Free Software Foundation.               *
+ *                                                                          *
+ * You should have received a copy of the GNU General Public License and    *
+ * a copy of the GCC Runtime Library Exception along with this program;     *
+ * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    *
+ * <http://www.gnu.org/licenses/>.                                          *
  *                                                                          *
  * GNAT was originally developed  by the GNAT team at  New York University. *
  * Extensive contributions were provided by Ada Core Technologies Inc.      *
  *                                                                          *
  ****************************************************************************/
 
-#ifdef __vxworks
-#include "vxWorks.h"
+#if defined(__nucleus__) || defined(VTHREADS)
+
+#warning Sockets not supported on these platforms
+#undef HAVE_SOCKETS
+
+#else
+
+#define HAVE_SOCKETS
+
+#ifndef _XOPEN_SOURCE_EXTENDED
+#define _XOPEN_SOURCE_EXTENDED 1
+/* For HP-UX */
+#endif
+
+#ifndef BSD_COMP
+#define BSD_COMP 1
+/* For Solaris */
 #endif
 
-#ifdef IN_RTS
-#include "tconfig.h"
-#include "tsystem.h"
+#ifndef _ALL_SOURCE
+#define _ALL_SOURCE 1
+/* For AIX */
+#endif
+
+#ifndef _OSF_SOURCE
+#define _OSF_SOURCE 1
+/* For Tru64 */
+#endif
+
+#include <limits.h>
+#include <errno.h>
 
-#if defined (WINNT)
+#if defined(__vxworks)
+#include <vxWorks.h>
+#include <ioLib.h>
+#include <hostLib.h>
+#define SHUT_RD                0
+#define SHUT_WR                1
+#define SHUT_RDWR      2
+
+#elif defined (WINNT)
 #define FD_SETSIZE 1024
 #include <windows.h>
 
 #ifdef __MINGW32__
-#include "mingw32.h"
-#if STD_MINGW
-#include <winsock.h>
-#else
-#include <windows32/sockets.h>
+#include <winsock2.h>
+#include <ws2tcpip.h>
+
+#undef  EACCES
+#define EACCES          WSAEACCES
+#undef  EADDRINUSE
+#define EADDRINUSE      WSAEADDRINUSE
+#undef  EADDRNOTAVAIL
+#define EADDRNOTAVAIL   WSAEADDRNOTAVAIL
+#undef  EAFNOSUPPORT
+#define EAFNOSUPPORT    WSAEAFNOSUPPORT
+#undef  EALREADY
+#define EALREADY        WSAEALREADY
+#undef  EBADF
+#define EBADF           WSAEBADF
+#undef  ECONNABORTED
+#define ECONNABORTED    WSAECONNABORTED
+#undef  ECONNREFUSED
+#define ECONNREFUSED    WSAECONNREFUSED
+#undef  ECONNRESET
+#define ECONNRESET      WSAECONNRESET
+#undef  EDESTADDRREQ
+#define EDESTADDRREQ    WSAEDESTADDRREQ
+#undef  EFAULT
+#define EFAULT          WSAEFAULT
+#undef  EHOSTDOWN
+#define EHOSTDOWN       WSAEHOSTDOWN
+#undef  EHOSTUNREACH
+#define EHOSTUNREACH    WSAEHOSTUNREACH
+#undef  EINPROGRESS
+#define EINPROGRESS     WSAEINPROGRESS
+#undef  EINTR
+#define EINTR           WSAEINTR
+#undef  EINVAL
+#define EINVAL          WSAEINVAL
+#undef  EIO
+#define EIO             WSAEDISCON
+#undef  EISCONN
+#define EISCONN         WSAEISCONN
+#undef  ELOOP
+#define ELOOP           WSAELOOP
+#undef  EMFILE
+#define EMFILE          WSAEMFILE
+#undef  EMSGSIZE
+#define EMSGSIZE        WSAEMSGSIZE
+#undef  ENAMETOOLONG
+#define ENAMETOOLONG    WSAENAMETOOLONG
+#undef  ENETDOWN
+#define ENETDOWN        WSAENETDOWN
+#undef  ENETRESET
+#define ENETRESET       WSAENETRESET
+#undef  ENETUNREACH
+#define ENETUNREACH     WSAENETUNREACH
+#undef  ENOBUFS
+#define ENOBUFS         WSAENOBUFS
+#undef  ENOPROTOOPT
+#define ENOPROTOOPT     WSAENOPROTOOPT
+#undef  ENOTCONN
+#define ENOTCONN        WSAENOTCONN
+#undef  ENOTSOCK
+#define ENOTSOCK        WSAENOTSOCK
+#undef  EOPNOTSUPP
+#define EOPNOTSUPP      WSAEOPNOTSUPP
+#undef  EPFNOSUPPORT
+#define EPFNOSUPPORT    WSAEPFNOSUPPORT
+#undef  EPROTONOSUPPORT
+#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
+#undef  EPROTOTYPE
+#define EPROTOTYPE      WSAEPROTOTYPE
+#undef  ESHUTDOWN
+#define ESHUTDOWN       WSAESHUTDOWN
+#undef  ESOCKTNOSUPPORT
+#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
+#undef  ETIMEDOUT
+#define ETIMEDOUT       WSAETIMEDOUT
+#undef  ETOOMANYREFS
+#define ETOOMANYREFS    WSAETOOMANYREFS
+#undef  EWOULDBLOCK
+#define EWOULDBLOCK     WSAEWOULDBLOCK
+
+#define SHUT_RD                SD_RECEIVE
+#define SHUT_WR                SD_SEND
+#define SHUT_RDWR      SD_BOTH
+
 #endif
+
+#elif defined(VMS)
+#define FD_SETSIZE 4096
+#ifndef IN_RTS
+/* These DEC C headers are not available when building with GCC */
+#include <in.h>
+#include <tcp.h>
+#include <ioctl.h>
+#include <netdb.h>
 #endif
+
 #endif
 
-#if defined (VMS)
-#define FD_SETSIZE 4096
+#if defined (__vxworks) && ! defined (__RTP__)
+#include <sys/times.h>
+#else
 #include <sys/time.h>
 #endif
 
+/*
+ * RTEMS has these .h files but not until you have built and installed
+ * RTEMS. When building a C/C++ toolset, you also build the newlib C library.
+ * So the build procedure for an RTEMS GNAT toolset requires that
+ * you build a C/C++ toolset, then build and install RTEMS with 
+ * --enable-multilib, and finally build the Ada part of the toolset.
+ */
+#if !(defined (VMS) || defined (__MINGW32__))
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <sys/ioctl.h>
+#include <netdb.h>
+#endif
+
+/*
+ * Handling of gethostbyname, gethostbyaddr, getservbyname and getservbyport
+ * =========================================================================
+ *
+ * The default implementation of GNAT.Sockets.Thin requires that these
+ * operations be either thread safe, or that a reentrant version getXXXbyYYY_r
+ * be provided. In both cases, socket.c provides a __gnat_safe_getXXXbyYYY
+ * function with the same signature as getXXXbyYYY_r. If the operating
+ * system version of getXXXbyYYY is thread safe, the provided auxiliary
+ * buffer argument is unused and ignored.
+ *
+ * Target specific versions of GNAT.Sockets.Thin for platforms that can't
+ * fulfill these requirements must provide their own protection mechanism
+ * in Safe_GetXXXbyYYY, and if they require GNAT.Sockets to provide a buffer
+ * to this effect, then we need to set Need_Netdb_Buffer here (case of
+ * VxWorks and VMS).
+ */
+
+#if defined (_AIX) || defined (__FreeBSD__) || defined (__hpux__) || defined (__osf__) || defined (_WIN32) || defined (__APPLE__)
+# define HAVE_THREAD_SAFE_GETxxxBYyyy 1
+#elif defined (sgi) || defined (linux) || defined (__GLIBC__) || (defined (sun) && defined (__SVR4) && !defined (__vxworks)) || defined(__rtems__)
+# define HAVE_GETxxxBYyyy_R 1
+#endif
+
+#if defined (HAVE_GETxxxBYyyy_R) || !defined (HAVE_THREAD_SAFE_GETxxxBYyyy)
+# define Need_Netdb_Buffer 1
 #else
-#include "config.h"
-#include "system.h"
+# define Need_Netdb_Buffer 0
 #endif
 
-#if !(defined (VMS) || defined (__MINGW32__) || defined(__rtems__))
-# include <sys/socket.h>
+#if defined (__FreeBSD__) || defined (__vxworks) || defined(__rtems__)
+# define Has_Sockaddr_Len 1
+#else
+# define Has_Sockaddr_Len 0
 #endif
+
+#if !(defined (__vxworks) || defined (_WIN32) || defined (__hpux__) || defined (VMS))
+# define HAVE_INET_PTON
+#endif
+
+#endif /* defined(__nucleus__) */