(root)/
gcc-13.2.0/
gcc/
ada/
s-oscons-tmplt.c
       1  /*
       2  ------------------------------------------------------------------------------
       3  --                                                                          --
       4  --                         GNAT COMPILER COMPONENTS                         --
       5  --                                                                          --
       6  --                  S Y S T E M . O S _ C O N S T A N T S                   --
       7  --                                                                          --
       8  --                                 S p e c                                  --
       9  --                                                                          --
      10  --          Copyright (C) 2000-2023, Free Software Foundation, Inc.         --
      11  --                                                                          --
      12  -- GNAT is free software;  you can  redistribute it  and/or modify it under --
      13  -- terms of the  GNU General Public License as published  by the Free Soft- --
      14  -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
      15  -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
      16  -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
      17  -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
      18  --                                                                          --
      19  -- As a special exception under Section 7 of GPL version 3, you are granted --
      20  -- additional permissions described in the GCC Runtime Library Exception,   --
      21  -- version 3.1, as published by the Free Software Foundation.               --
      22  --                                                                          --
      23  -- You should have received a copy of the GNU General Public License and    --
      24  -- a copy of the GCC Runtime Library Exception along with this program;     --
      25  -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
      26  -- <http://www.gnu.org/licenses/>.                                          --
      27  --                                                                          --
      28  -- GNAT was originally developed  by the GNAT team at  New York University. --
      29  -- Extensive contributions were provided by Ada Core Technologies Inc.      --
      30  --                                                                          --
      31  ------------------------------------------------------------------------------
      32  
      33  pragma Style_Checks ("M32766");
      34  --  Allow long lines
      35  
      36  */
      37  
      38  /**
      39   **  This template file is used while building the GNAT runtime library to
      40   **  generate package System.OS_Constants (s-oscons.ads).
      41   **
      42   **  The generation process is:
      43   **  1. the platform-independent extraction tool xoscons is built with the
      44   **     base native compiler
      45   **  2. this template is processed by the cross C compiler to produce
      46   **     a list of constant values
      47   **  3. the comments in this template and the list of values are processed
      48   **     by xoscons to generate s-oscons.ads.
      49   **
      50   **  Any comment occurring in this file whose start and end markers are on
      51   **  a line by themselves (see above) is copied verbatim to s-oscons.ads.
      52   **  All other comments are ignored. Note that the build process first passes
      53   **  this file through the C preprocessor, so comments that occur in a section
      54   **  that is conditioned by a #if directive will be copied to the output only
      55   **  when it applies.
      56   **
      57   **  Two methods are supported to generate the list of constant values,
      58   **  s-oscons-tmpl.s.
      59   **
      60   **  The default one assumes that the template can be compiled by the newly-
      61   **  built cross compiler. It uses markup produced in the (pseudo-)assembly
      62   **  listing:
      63   **
      64   **     xgcc -DTARGET=\"$target\" -C -E s-oscons-tmplt.c > s-oscons-tmplt.i
      65   **     xgcc -S s-oscons-tmplt.i
      66   **     xoscons
      67   **
      68   **  Alternatively, if s-oscons-tmplt.c must be compiled with a proprietary
      69   **  compiler (e.g. the native DEC CC on OpenVMS), the NATIVE macro should
      70   **  be defined, and the resulting program executed:
      71   **
      72   **  $ CC/DEFINE=("TARGET=""OpenVMS""",NATIVE)
      73   **      /PREPROCESS_ONLY /COMMENTS=AS_IS s-oscons-tmplt
      74   **  $ CC/DEFINE=("TARGET=""OpenVMS""",NATIVE) s-oscons-tmplt
      75   **  $ LINK s-oscons-tmplt
      76   **  $ DEFINE/USER SYS$OUTPUT s-oscons-tmplt.s
      77   **  $ RUN s-oscons-tmplt
      78   **  $ RUN xoscons
      79   **/
      80  
      81  /* Feature macro definitions */
      82  
      83  /**
      84   ** Note: we deliberately do not define _POSIX_SOURCE / _POSIX_C_SOURCE
      85   ** unconditionally, as on many platforms these macros actually disable
      86   ** a number of non-POSIX but useful/required features.
      87   **/
      88  
      89  #if defined (__linux__) || defined (__ANDROID__)
      90  
      91  /* Define _XOPEN_SOURCE to get IOV_MAX */
      92  # if !defined (_XOPEN_SOURCE)
      93  #  define _XOPEN_SOURCE 500
      94  # endif
      95  
      96  /* Define _BSD_SOURCE to get CRTSCTS */
      97  # define _BSD_SOURCE
      98  
      99  #endif /* defined (__linux__) || defined (__ANDROID__) */
     100  
     101  /* Include gsocket.h before any system header so it can redefine FD_SETSIZE */
     102  
     103  #include "gsocket.h"
     104  
     105  #include <stdlib.h>
     106  #include <string.h>
     107  #include <limits.h>
     108  #include <fcntl.h>
     109  #include <time.h>
     110  
     111  #if ! (defined (__vxworks) || defined (__MINGW32__))
     112  # define HAVE_TERMIOS
     113  #endif
     114  
     115  #if defined (__vxworks)
     116  
     117  /**
     118   ** For VxWorks, always include vxWorks.h (gsocket.h provides it only for
     119   ** the case of runtime libraries that support sockets). Note: this must
     120   ** be done before including adaint.h.
     121   **/
     122  
     123  # include <vxWorks.h>
     124  #elif !defined(__MINGW32__)
     125  #include <poll.h>
     126  #endif
     127  
     128  #include "adaint.h"
     129  
     130  #ifdef DUMMY
     131  
     132  # if defined (TARGET)
     133  #   error TARGET may not be defined when generating the dummy version
     134  # else
     135  #   define TARGET "batch runtime compilation (dummy values)"
     136  # endif
     137  
     138  # if !(defined (HAVE_SOCKETS) && defined (HAVE_TERMIOS))
     139  #   error Features missing on platform
     140  # endif
     141  
     142  # define NATIVE
     143  
     144  #endif /* DUMMY */
     145  
     146  #ifndef TARGET
     147  # error Please define TARGET
     148  #endif
     149  
     150  #ifndef HAVE_SOCKETS
     151  # include <errno.h>
     152  #endif
     153  
     154  #ifdef HAVE_TERMIOS
     155  # include <termios.h>
     156  #endif
     157  
     158  #ifdef __APPLE__
     159  # include <_types.h>
     160  #endif
     161  
     162  #if defined (__linux__) || defined (__ANDROID__) || defined (__QNX__) \
     163    || defined (__rtems__)
     164  # include <pthread.h>
     165  # include <signal.h>
     166  #endif
     167  
     168  #if defined(__MINGW32__) || defined(__CYGWIN__)
     169  # include <windef.h>
     170  # include <winbase.h>
     171  #endif
     172  
     173  #ifdef NATIVE
     174  #include <stdio.h>
     175  
     176  #ifdef DUMMY
     177  int counter = 0;
     178  # define _VAL(x) counter++
     179  #else
     180  # define _VAL(x) x
     181  #endif
     182  
     183  #define CND(name,comment) \
     184    printf ("\n->CND:$%d:" #name ":$%d:" comment, __LINE__, ((int) _VAL (name)));
     185  
     186  #define CNU(name,comment) \
     187    printf ("\n->CNU:$%d:" #name ":$%u:" comment, __LINE__, ((unsigned int) _VAL (name)));
     188  
     189  #define CNS(name,comment) \
     190    printf ("\n->CNS:$%d:" #name ":" name ":" comment, __LINE__);
     191  
     192  #define C(sname,type,value,comment)\
     193    printf ("\n->C:$%d:" sname ":" #type ":" value ":" comment, __LINE__);
     194  
     195  #define SUB(sname)\
     196    printf ("\n->SUB:$%d:" #sname ":" sname, __LINE__);
     197  
     198  #define TXT(text) \
     199    printf ("\n->TXT:$%d:" text, __LINE__);
     200  
     201  #else
     202  
     203  #define CND(name, comment) \
     204    asm volatile("\n->CND:%0:" #name ":%1:" comment \
     205    : : "i" (__LINE__), "i" ((int) name));
     206  /* Decimal constant in the range of type "int" */
     207  
     208  #define CNU(name, comment) \
     209    asm volatile("\n->CNU:%0:" #name ":%1:" comment \
     210    : : "i" (__LINE__), "i" ((int) name));
     211  /* Decimal constant in the range of type "unsigned int" (note, assembler
     212   * always wants a signed int, we convert back in xoscons).
     213   */
     214  
     215  #define CNS(name, comment) \
     216    asm volatile("\n->CNS:%0:" #name ":" name ":" comment \
     217    : : "i" (__LINE__));
     218  /* General expression named number */
     219  
     220  #define C(sname, type, value, comment) \
     221    asm volatile("\n->C:%0:" sname ":" #type ":" value ":" comment \
     222    : : "i" (__LINE__));
     223  /* Typed constant */
     224  
     225  #define SUB(sname) \
     226    asm volatile("\n->SUB:%0:" #sname ":" sname \
     227    : : "i" (__LINE__));
     228  /* Subtype */
     229  
     230  #define TXT(text) \
     231    asm volatile("\n->TXT:%0:" text \
     232    : : "i" (__LINE__));
     233  /* Freeform text */
     234  
     235  #endif /* NATIVE */
     236  
     237  #define CST(name,comment) C(#name,String,name,comment)
     238  /* String constant */
     239  
     240  #ifdef __MINGW32__
     241  unsigned int _CRT_fmode = _O_BINARY;
     242  #endif
     243  
     244  int
     245  main (void) {
     246  
     247  /*
     248  --  This package provides target dependent definitions of constant for use
     249  --  by the GNAT runtime library. This package should not be directly with'd
     250  --  by an application program.
     251  
     252  --  This file is generated automatically, do not modify it by hand! Instead,
     253  --  make changes to s-oscons-tmplt.c and rebuild the GNAT runtime library.
     254  */
     255  
     256  /**
     257   ** Do not change the format of the line below without also updating the
     258   ** MaRTE Makefile.
     259   **/
     260  TXT("--  This is the version for " TARGET)
     261  TXT("")
     262  TXT("with Interfaces.C;")
     263  #if defined (__MINGW32__) || defined (__CYGWIN__)
     264  # define TARGET_OS "Windows"
     265  # define Serial_Port_Descriptor "System.Win32.HANDLE"
     266  TXT("with System.Win32;")
     267  #else
     268  # define TARGET_OS "Other_OS"
     269  # define Serial_Port_Descriptor "Interfaces.C.int"
     270  #endif
     271  
     272  /*
     273  package System.OS_Constants is
     274  
     275     pragma Pure;
     276  */
     277  
     278  /**
     279   **  General constants (all platforms)
     280   **/
     281  
     282  /*
     283  
     284     ---------------------------------
     285     -- General platform parameters --
     286     ---------------------------------
     287  
     288     type OS_Type is (Windows, Other_OS);
     289  */
     290  C("Target_OS", OS_Type, TARGET_OS, "")
     291  /*
     292     pragma Warnings (Off, Target_OS);
     293     --  Suppress warnings on Target_OS since it is in general tested for
     294     --  equality with a constant value to implement conditional compilation,
     295     --  which normally generates a constant condition warning.
     296  
     297  */
     298  #define Target_Name TARGET
     299  CST(Target_Name, "")
     300  
     301  /**
     302   ** Note: the name of the following constant is recognized specially by
     303   **  xoscons (case sensitive).
     304   **/
     305  #define SIZEOF_unsigned_int sizeof (unsigned int)
     306  CND(SIZEOF_unsigned_int, "Size of unsigned int")
     307  
     308  SUB(Serial_Port_Descriptor)
     309  
     310  /*
     311  
     312     -------------------
     313     -- System limits --
     314     -------------------
     315  
     316  */
     317  
     318  #ifndef IOV_MAX
     319  # define IOV_MAX INT_MAX
     320  #endif
     321  CND(IOV_MAX, "Maximum writev iovcnt")
     322  
     323  /* NAME_MAX is used to compute the allocation size for a struct dirent
     324   * passed to readdir() / readdir_r(). However on some systems it is not
     325   * defined, as it is technically a filesystem dependent property that
     326   * we should retrieve through pathconf(). In any case, we do not need a
     327   * precise value but only an upper limit.
     328   */
     329  #ifndef NAME_MAX
     330  # ifdef MAXNAMELEN
     331     /* Solaris has no NAME_MAX but defines MAXNAMELEN */
     332  #  define NAME_MAX MAXNAMELEN
     333  # elif defined(PATH_MAX)
     334     /* PATH_MAX (maximum length of a full path name) is a safe fall back */
     335  #  define NAME_MAX PATH_MAX
     336  # elif defined(FILENAME_MAX)
     337     /* Similarly FILENAME_MAX can provide a safe fall back */
     338  #  define NAME_MAX FILENAME_MAX
     339  # else
     340     /* Hardcode a reasonably large value as a last chance fallback */
     341  #  define NAME_MAX 1024
     342  # endif
     343  #endif
     344  CND(NAME_MAX, "Maximum file name length")
     345  
     346  /*
     347  
     348     ---------------------
     349     -- File open modes --
     350     ---------------------
     351  
     352  */
     353  
     354  #ifndef O_RDWR
     355  # define O_RDWR -1
     356  #endif
     357  CND(O_RDWR, "Read/write")
     358  
     359  #ifndef O_NOCTTY
     360  # define O_NOCTTY -1
     361  #endif
     362  CND(O_NOCTTY, "Don't change ctrl tty")
     363  
     364  #ifndef O_NDELAY
     365  # define O_NDELAY -1
     366  #endif
     367  CND(O_NDELAY, "Nonblocking")
     368  
     369  /*
     370  
     371     ----------------------
     372     -- Fcntl operations --
     373     ----------------------
     374  
     375  */
     376  
     377  #ifndef F_GETFL
     378  # define F_GETFL -1
     379  #endif
     380  CND(F_GETFL, "Get flags")
     381  
     382  #ifndef F_SETFL
     383  # define F_SETFL -1
     384  #endif
     385  CND(F_SETFL, "Set flags")
     386  
     387  /*
     388  
     389     -----------------
     390     -- Fcntl flags --
     391     -----------------
     392  
     393  */
     394  
     395  #ifndef FNDELAY
     396  # define FNDELAY -1
     397  #endif
     398  CND(FNDELAY, "Nonblocking")
     399  
     400  /*
     401  
     402     ----------------------
     403     -- Ioctl operations --
     404     ----------------------
     405  
     406  */
     407  
     408  /* ioctl(2) requests are "int" in UNIX, but "unsigned long" on FreeBSD */
     409  
     410  #if defined (__FreeBSD__) || defined (__DragonFly__)
     411  # define CNI CNU
     412  # define IOCTL_Req_T "Interfaces.C.unsigned"
     413  #else
     414  # define CNI CND
     415  # define IOCTL_Req_T "Interfaces.C.int"
     416  #endif
     417  
     418  SUB(IOCTL_Req_T)
     419  
     420  #ifndef FIONBIO
     421  # define FIONBIO -1
     422  #endif
     423  CNI(FIONBIO, "Set/clear non-blocking io")
     424  
     425  #ifndef FIONREAD
     426  # define FIONREAD -1
     427  #endif
     428  CNI(FIONREAD, "How many bytes to read")
     429  
     430  /*
     431  
     432     ------------------
     433     -- Errno values --
     434     ------------------
     435  
     436     --  The following constants are defined from <errno.h>
     437  
     438  */
     439  #ifndef EAGAIN
     440  # define EAGAIN -1
     441  #endif
     442  CND(EAGAIN, "Try again")
     443  
     444  #ifndef ENOENT
     445  # define ENOENT -1
     446  #endif
     447  CND(ENOENT, "File not found")
     448  
     449  #ifndef ENOMEM
     450  # define ENOMEM -1
     451  #endif
     452  CND(ENOMEM, "Out of memory")
     453  
     454  #ifdef __MINGW32__
     455  /*
     456  
     457     --  The following constants are defined from <winsock2.h> (WSA*)
     458  
     459  */
     460  
     461  /**
     462   **  For sockets-related errno values on Windows, gsocket.h redefines
     463   **  Exxx as WSAExxx.
     464   **/
     465  
     466  #endif
     467  
     468  #ifndef EACCES
     469  # define EACCES -1
     470  #endif
     471  CND(EACCES, "Permission denied")
     472  
     473  #ifndef EADDRINUSE
     474  # define EADDRINUSE -1
     475  #endif
     476  CND(EADDRINUSE, "Address already in use")
     477  
     478  #ifndef EADDRNOTAVAIL
     479  # define EADDRNOTAVAIL -1
     480  #endif
     481  CND(EADDRNOTAVAIL, "Cannot assign address")
     482  
     483  #ifndef EAFNOSUPPORT
     484  # define EAFNOSUPPORT -1
     485  #endif
     486  CND(EAFNOSUPPORT, "Addr family not supported")
     487  
     488  #ifndef EALREADY
     489  # define EALREADY -1
     490  #endif
     491  CND(EALREADY, "Operation in progress")
     492  
     493  #ifndef EBADF
     494  # define EBADF -1
     495  #endif
     496  CND(EBADF, "Bad file descriptor")
     497  
     498  #ifndef ECONNABORTED
     499  # define ECONNABORTED -1
     500  #endif
     501  CND(ECONNABORTED, "Connection aborted")
     502  
     503  #ifndef ECONNREFUSED
     504  # define ECONNREFUSED -1
     505  #endif
     506  CND(ECONNREFUSED, "Connection refused")
     507  
     508  #ifndef ECONNRESET
     509  # define ECONNRESET -1
     510  #endif
     511  CND(ECONNRESET, "Connection reset by peer")
     512  
     513  #ifndef EDESTADDRREQ
     514  # define EDESTADDRREQ -1
     515  #endif
     516  CND(EDESTADDRREQ, "Destination addr required")
     517  
     518  #ifndef EFAULT
     519  # define EFAULT -1
     520  #endif
     521  CND(EFAULT, "Bad address")
     522  
     523  #ifndef EHOSTDOWN
     524  # define EHOSTDOWN -1
     525  #endif
     526  CND(EHOSTDOWN, "Host is down")
     527  
     528  #ifndef EHOSTUNREACH
     529  # define EHOSTUNREACH -1
     530  #endif
     531  CND(EHOSTUNREACH, "No route to host")
     532  
     533  #ifndef EINPROGRESS
     534  # define EINPROGRESS -1
     535  #endif
     536  CND(EINPROGRESS, "Operation now in progress")
     537  
     538  #ifndef EINTR
     539  # define EINTR -1
     540  #endif
     541  CND(EINTR, "Interrupted system call")
     542  
     543  #ifndef EINVAL
     544  # define EINVAL -1
     545  #endif
     546  CND(EINVAL, "Invalid argument")
     547  
     548  #ifndef EIO
     549  # define EIO -1
     550  #endif
     551  CND(EIO, "Input output error")
     552  
     553  #ifndef EISCONN
     554  # define EISCONN -1
     555  #endif
     556  CND(EISCONN, "Socket already connected")
     557  
     558  #ifndef ELOOP
     559  # define ELOOP -1
     560  #endif
     561  CND(ELOOP, "Too many symbolic links")
     562  
     563  #ifndef EMFILE
     564  # define EMFILE -1
     565  #endif
     566  CND(EMFILE, "Too many open files")
     567  
     568  #ifndef EMSGSIZE
     569  # define EMSGSIZE -1
     570  #endif
     571  CND(EMSGSIZE, "Message too long")
     572  
     573  #ifndef ENAMETOOLONG
     574  # define ENAMETOOLONG -1
     575  #endif
     576  CND(ENAMETOOLONG, "Name too long")
     577  
     578  #ifndef ENETDOWN
     579  # define ENETDOWN -1
     580  #endif
     581  CND(ENETDOWN, "Network is down")
     582  
     583  #ifndef ENETRESET
     584  # define ENETRESET -1
     585  #endif
     586  CND(ENETRESET, "Disconn. on network reset")
     587  
     588  #ifndef ENETUNREACH
     589  # define ENETUNREACH -1
     590  #endif
     591  CND(ENETUNREACH, "Network is unreachable")
     592  
     593  #ifndef ENOBUFS
     594  # define ENOBUFS -1
     595  #endif
     596  CND(ENOBUFS, "No buffer space available")
     597  
     598  #ifndef ENOPROTOOPT
     599  # define ENOPROTOOPT -1
     600  #endif
     601  CND(ENOPROTOOPT, "Protocol not available")
     602  
     603  #ifndef ENOTCONN
     604  # define ENOTCONN -1
     605  #endif
     606  CND(ENOTCONN, "Socket not connected")
     607  
     608  #ifndef ENOTSOCK
     609  # define ENOTSOCK -1
     610  #endif
     611  CND(ENOTSOCK, "Operation on non socket")
     612  
     613  #ifndef EOPNOTSUPP
     614  # define EOPNOTSUPP -1
     615  #endif
     616  CND(EOPNOTSUPP, "Operation not supported")
     617  
     618  #ifndef EPIPE
     619  # define EPIPE -1
     620  #endif
     621  CND(EPIPE, "Broken pipe")
     622  
     623  #ifndef EPFNOSUPPORT
     624  # define EPFNOSUPPORT -1
     625  #endif
     626  CND(EPFNOSUPPORT, "Unknown protocol family")
     627  
     628  #ifndef EPROTONOSUPPORT
     629  # define EPROTONOSUPPORT -1
     630  #endif
     631  CND(EPROTONOSUPPORT, "Unknown protocol")
     632  
     633  #ifndef EPROTOTYPE
     634  # define EPROTOTYPE -1
     635  #endif
     636  CND(EPROTOTYPE, "Unknown protocol type")
     637  
     638  #ifndef ERANGE
     639  # define ERANGE -1
     640  #endif
     641  CND(ERANGE, "Result too large")
     642  
     643  #ifndef ESHUTDOWN
     644  # define ESHUTDOWN -1
     645  #endif
     646  CND(ESHUTDOWN, "Cannot send once shutdown")
     647  
     648  #ifndef ESOCKTNOSUPPORT
     649  # define ESOCKTNOSUPPORT -1
     650  #endif
     651  CND(ESOCKTNOSUPPORT, "Socket type not supported")
     652  
     653  #ifndef ETIMEDOUT
     654  # define ETIMEDOUT -1
     655  #endif
     656  CND(ETIMEDOUT, "Connection timed out")
     657  
     658  #ifndef ETOOMANYREFS
     659  # define ETOOMANYREFS -1
     660  #endif
     661  CND(ETOOMANYREFS, "Too many references")
     662  
     663  #ifndef EWOULDBLOCK
     664  # define EWOULDBLOCK -1
     665  #endif
     666  CND(EWOULDBLOCK, "Operation would block")
     667  
     668  #ifndef E2BIG
     669  # define E2BIG -1
     670  #endif
     671  CND(E2BIG, "Argument list too long")
     672  
     673  #ifndef EILSEQ
     674  # define EILSEQ -1
     675  #endif
     676  CND(EILSEQ, "Illegal byte sequence")
     677  
     678  /**
     679   **  Terminal/serial I/O constants
     680   **/
     681  
     682  #if defined(HAVE_TERMIOS) || defined(__MINGW32__)
     683  /*
     684  
     685     ----------------------
     686     -- Terminal control --
     687     ----------------------
     688  
     689  */
     690  #endif
     691  
     692  #ifdef HAVE_TERMIOS
     693  
     694  #ifndef TCSANOW
     695  # define TCSANOW -1
     696  #endif
     697  CND(TCSANOW, "Immediate")
     698  
     699  #ifndef TCIFLUSH
     700  # define TCIFLUSH -1
     701  #endif
     702  CND(TCIFLUSH, "Flush input")
     703  
     704  #ifndef IXON
     705  # define IXON -1
     706  #endif
     707  CNU(IXON, "Output sw flow control")
     708  
     709  #ifndef CLOCAL
     710  # define CLOCAL -1
     711  #endif
     712  CNU(CLOCAL, "Local")
     713  
     714  #ifndef CRTSCTS
     715  # define CRTSCTS -1
     716  #endif
     717  CNU(CRTSCTS, "Output hw flow control")
     718  
     719  #ifndef CREAD
     720  # define CREAD -1
     721  #endif
     722  CNU(CREAD, "Read")
     723  
     724  #ifndef ICANON
     725  # define ICANON -1
     726  #endif
     727  CNU(ICANON, "canonical mode")
     728  
     729  #ifndef CBAUD
     730  # define CBAUD -1
     731  #endif
     732  CNU(CBAUD, "baud speed mask")
     733  
     734  #ifndef ECHO
     735  # define ECHO -1
     736  #endif
     737  CNU(ECHO, "echo input characters")
     738  
     739  #ifndef ECHOE
     740  # define ECHOE -1
     741  #endif
     742  CNU(ECHOE, "erase preceding characters")
     743  
     744  #ifndef ECHOK
     745  # define ECHOK -1
     746  #endif
     747  CNU(ECHOK, "kill character, erases current line")
     748  
     749  #ifndef ECHOCTL
     750  # define ECHOCTL -1
     751  #endif
     752  CNU(ECHOCTL, "echo special characters")
     753  
     754  #ifndef ECHONL
     755  # define ECHONL -1
     756  #endif
     757  CNU(ECHONL, "force echo NL character")
     758  
     759  #ifndef CS5
     760  # define CS5 -1
     761  #endif
     762  CNU(CS5, "5 data bits")
     763  
     764  #ifndef CS6
     765  # define CS6 -1
     766  #endif
     767  CNU(CS6, "6 data bits")
     768  
     769  #ifndef CS7
     770  # define CS7 -1
     771  #endif
     772  CNU(CS7, "7 data bits")
     773  
     774  #ifndef CS8
     775  # define CS8 -1
     776  #endif
     777  CNU(CS8, "8 data bits")
     778  
     779  #ifndef CSTOPB
     780  # define CSTOPB -1
     781  #endif
     782  CNU(CSTOPB, "2 stop bits")
     783  
     784  #ifndef PARENB
     785  # define PARENB -1
     786  #endif
     787  CNU(PARENB, "Parity enable")
     788  
     789  #ifndef PARODD
     790  # define PARODD -1
     791  #endif
     792  CNU(PARODD, "Parity odd")
     793  
     794  #ifndef B0
     795  # define B0 -1
     796  #endif
     797  CNU(B0, "0 bps")
     798  
     799  #ifndef B50
     800  # define B50 -1
     801  #endif
     802  CNU(B50, "50 bps")
     803  
     804  #ifndef B75
     805  # define B75 -1
     806  #endif
     807  CNU(B75, "75 bps")
     808  
     809  #ifndef B110
     810  # define B110 -1
     811  #endif
     812  CNU(B110, "110 bps")
     813  
     814  #ifndef B134
     815  # define B134 -1
     816  #endif
     817  CNU(B134, "134 bps")
     818  
     819  #ifndef B150
     820  # define B150 -1
     821  #endif
     822  CNU(B150, "150 bps")
     823  
     824  #ifndef B200
     825  # define B200 -1
     826  #endif
     827  CNU(B200, "200 bps")
     828  
     829  #ifndef B300
     830  # define B300 -1
     831  #endif
     832  CNU(B300, "300 bps")
     833  
     834  #ifndef B600
     835  # define B600 -1
     836  #endif
     837  CNU(B600, "600 bps")
     838  
     839  #ifndef B1200
     840  # define B1200 -1
     841  #endif
     842  CNU(B1200, "1200 bps")
     843  
     844  #ifndef B1800
     845  # define B1800 -1
     846  #endif
     847  CNU(B1800, "1800 bps")
     848  
     849  #ifndef B2400
     850  # define B2400 -1
     851  #endif
     852  CNU(B2400, "2400 bps")
     853  
     854  #ifndef B4800
     855  # define B4800 -1
     856  #endif
     857  CNU(B4800, "4800 bps")
     858  
     859  #ifndef B9600
     860  # define B9600 -1
     861  #endif
     862  CNU(B9600, "9600 bps")
     863  
     864  #ifndef B19200
     865  # define B19200 -1
     866  #endif
     867  CNU(B19200, "19200 bps")
     868  
     869  #ifndef B38400
     870  # define B38400 -1
     871  #endif
     872  CNU(B38400, "38400 bps")
     873  
     874  #ifndef B57600
     875  # define B57600 -1
     876  #endif
     877  CNU(B57600, "57600 bps")
     878  
     879  #ifndef B115200
     880  # define B115200 -1
     881  #endif
     882  CNU(B115200, "115200 bps")
     883  
     884  #ifndef B230400
     885  # define B230400 -1
     886  #endif
     887  CNU(B230400, "230400 bps")
     888  
     889  #ifndef B460800
     890  # define B460800 -1
     891  #endif
     892  CNU(B460800, "460800 bps")
     893  
     894  #ifndef B500000
     895  # define B500000 -1
     896  #endif
     897  CNU(B500000, "500000 bps")
     898  
     899  #ifndef B576000
     900  # define B576000 -1
     901  #endif
     902  CNU(B576000, "576000 bps")
     903  
     904  #ifndef B921600
     905  # define B921600 -1
     906  #endif
     907  CNU(B921600, "921600 bps")
     908  
     909  #ifndef B1000000
     910  # define B1000000 -1
     911  #endif
     912  CNU(B1000000, "1000000 bps")
     913  
     914  #ifndef B1152000
     915  # define B1152000 -1
     916  #endif
     917  CNU(B1152000, "1152000 bps")
     918  
     919  #ifndef B1500000
     920  # define B1500000 -1
     921  #endif
     922  CNU(B1500000, "1500000 bps")
     923  
     924  #ifndef B2000000
     925  # define B2000000 -1
     926  #endif
     927  CNU(B2000000, "2000000 bps")
     928  
     929  #ifndef B2500000
     930  # define B2500000 -1
     931  #endif
     932  CNU(B2500000, "2500000 bps")
     933  
     934  #ifndef B3000000
     935  # define B3000000 -1
     936  #endif
     937  CNU(B3000000, "3000000 bps")
     938  
     939  #ifndef B3500000
     940  # define B3500000 -1
     941  #endif
     942  CNU(B3500000, "3500000 bps")
     943  
     944  #ifndef B4000000
     945  # define B4000000 -1
     946  #endif
     947  CNU(B4000000, "4000000 bps")
     948  
     949  /*
     950  
     951     ---------------------------------
     952     -- Terminal control characters --
     953     ---------------------------------
     954  
     955  */
     956  
     957  #ifndef VINTR
     958  # define VINTR -1
     959  #endif
     960  CND(VINTR, "Interrupt")
     961  
     962  #ifndef VQUIT
     963  # define VQUIT -1
     964  #endif
     965  CND(VQUIT, "Quit")
     966  
     967  #ifndef VERASE
     968  # define VERASE -1
     969  #endif
     970  CND(VERASE, "Erase")
     971  
     972  #ifndef VKILL
     973  # define VKILL -1
     974  #endif
     975  CND(VKILL, "Kill")
     976  
     977  #ifndef VEOF
     978  # define VEOF -1
     979  #endif
     980  CND(VEOF, "EOF")
     981  
     982  #ifndef VTIME
     983  # define VTIME -1
     984  #endif
     985  CND(VTIME, "Read timeout")
     986  
     987  #ifndef VMIN
     988  # define VMIN -1
     989  #endif
     990  CND(VMIN, "Read min chars")
     991  
     992  #ifndef VSWTC
     993  # define VSWTC -1
     994  #endif
     995  CND(VSWTC, "Switch")
     996  
     997  #ifndef VSTART
     998  # define VSTART -1
     999  #endif
    1000  CND(VSTART, "Flow control start")
    1001  
    1002  #ifndef VSTOP
    1003  # define VSTOP -1
    1004  #endif
    1005  CND(VSTOP, "Flow control stop")
    1006  
    1007  #ifndef VSUSP
    1008  # define VSUSP -1
    1009  #endif
    1010  CND(VSUSP, "Suspend")
    1011  
    1012  #ifndef VEOL
    1013  # define VEOL -1
    1014  #endif
    1015  CND(VEOL, "EOL")
    1016  
    1017  #ifndef VREPRINT
    1018  # define VREPRINT -1
    1019  #endif
    1020  CND(VREPRINT, "Reprint unread")
    1021  
    1022  #ifndef VDISCARD
    1023  # define VDISCARD -1
    1024  #endif
    1025  CND(VDISCARD, "Discard pending")
    1026  
    1027  #ifndef VWERASE
    1028  # define VWERASE -1
    1029  #endif
    1030  CND(VWERASE, "Word erase")
    1031  
    1032  #ifndef VLNEXT
    1033  # define VLNEXT -1
    1034  #endif
    1035  CND(VLNEXT, "Literal next")
    1036  
    1037  #ifndef VEOL2
    1038  # define VEOL2 -1
    1039  #endif
    1040  CND(VEOL2, "Alternative EOL")
    1041  
    1042  #endif /* HAVE_TERMIOS */
    1043  
    1044  #if defined(__MINGW32__) || defined(__CYGWIN__)
    1045  CNU(DTR_CONTROL_ENABLE, "Enable DTR flow ctrl")
    1046  CNU(RTS_CONTROL_ENABLE, "Enable RTS flow ctrl")
    1047  #endif
    1048  
    1049  /*
    1050  
    1051     -----------------------------
    1052     -- Pseudo terminal library --
    1053     -----------------------------
    1054  
    1055  */
    1056  
    1057  #if defined (__FreeBSD__) || defined (__linux__) || defined (__DragonFly__)
    1058  # define PTY_Library "-lutil"
    1059  #else
    1060  # define PTY_Library ""
    1061  #endif
    1062  CST(PTY_Library, "for g-exptty")
    1063  
    1064  /**
    1065   **  Sockets constants
    1066   **/
    1067  
    1068  #ifdef HAVE_SOCKETS
    1069  
    1070  /*
    1071  
    1072     --------------
    1073     -- Families --
    1074     --------------
    1075  
    1076  */
    1077  
    1078  #ifndef AF_INET
    1079  # define AF_INET -1
    1080  #endif
    1081  CND(AF_INET, "IPv4 address family")
    1082  
    1083  #ifndef AF_INET6
    1084  # define AF_INET6 -1
    1085  #else
    1086  # define HAVE_AF_INET6 1
    1087  #endif
    1088  CND(AF_INET6, "IPv6 address family")
    1089  
    1090  #ifndef AF_UNIX
    1091  # define AF_UNIX -1
    1092  #endif
    1093  CND(AF_UNIX, "Local unix family")
    1094  
    1095  #ifndef AF_UNSPEC
    1096  # define AF_UNSPEC -1
    1097  #else
    1098  # define HAVE_AF_UNSPEC 1
    1099  #endif
    1100  CND(AF_UNSPEC, "Unspecified address family")
    1101  
    1102  /*
    1103  
    1104     -----------------------------
    1105     -- addrinfo fields offsets --
    1106     -----------------------------
    1107  
    1108  */
    1109  
    1110  #ifdef AI_CANONNAME
    1111    const struct addrinfo ai;
    1112  
    1113  #define AI_FLAGS_OFFSET ((void *)&ai.ai_flags - (void *)&ai)
    1114  #define AI_FAMILY_OFFSET ((void *)&ai.ai_family - (void *)&ai)
    1115  #define AI_SOCKTYPE_OFFSET ((void *)&ai.ai_socktype - (void *)&ai)
    1116  #define AI_PROTOCOL_OFFSET ((void *)&ai.ai_protocol - (void *)&ai)
    1117  #define AI_ADDRLEN_OFFSET ((void *)&ai.ai_addrlen - (void *)&ai)
    1118  #define AI_ADDR_OFFSET ((void *)&ai.ai_addr - (void *)&ai)
    1119  #define AI_CANONNAME_OFFSET ((void *)&ai.ai_canonname - (void *)&ai)
    1120  #define AI_NEXT_OFFSET ((void *)&ai.ai_next - (void *)&ai)
    1121  
    1122  #else
    1123  
    1124  #define AI_FLAGS_OFFSET 0
    1125  #define AI_FAMILY_OFFSET 4
    1126  #define AI_SOCKTYPE_OFFSET 8
    1127  #define AI_PROTOCOL_OFFSET 12
    1128  #define AI_ADDRLEN_OFFSET 16
    1129  #define AI_CANONNAME_OFFSET 24
    1130  #define AI_ADDR_OFFSET 32
    1131  #define AI_NEXT_OFFSET 40
    1132  
    1133  #endif
    1134  
    1135  CND(AI_FLAGS_OFFSET,     "Offset of ai_flags in addrinfo");
    1136  CND(AI_FAMILY_OFFSET,    "Offset of ai_family in addrinfo");
    1137  CND(AI_SOCKTYPE_OFFSET,  "Offset of ai_socktype in addrinfo");
    1138  CND(AI_PROTOCOL_OFFSET,  "Offset of ai_protocol in addrinfo");
    1139  CND(AI_ADDRLEN_OFFSET,   "Offset of ai_addrlen in addrinfo");
    1140  CND(AI_ADDR_OFFSET,      "Offset of ai_addr in addrinfo");
    1141  CND(AI_CANONNAME_OFFSET, "Offset of ai_canonname in addrinfo");
    1142  CND(AI_NEXT_OFFSET,      "Offset of ai_next in addrinfo");
    1143  
    1144  /*
    1145  
    1146     ---------------------------------------
    1147     -- getaddrinfo getnameinfo constants --
    1148     ---------------------------------------
    1149  
    1150  */
    1151  
    1152  #ifndef AI_PASSIVE
    1153  # define AI_PASSIVE -1
    1154  #endif
    1155  CND(AI_PASSIVE, "NULL nodename for accepting")
    1156  
    1157  #ifndef AI_CANONNAME
    1158  # define AI_CANONNAME -1
    1159  #endif
    1160  CND(AI_CANONNAME, "Get the host official name")
    1161  
    1162  #ifndef AI_NUMERICSERV
    1163  # define AI_NUMERICSERV -1
    1164  #endif
    1165  CND(AI_NUMERICSERV, "Service is a numeric string")
    1166  
    1167  #ifndef AI_NUMERICHOST
    1168  # define AI_NUMERICHOST -1
    1169  #endif
    1170  CND(AI_NUMERICHOST, "Node is a numeric IP address")
    1171  
    1172  #ifndef AI_ADDRCONFIG
    1173  # define AI_ADDRCONFIG -1
    1174  #endif
    1175  CND(AI_ADDRCONFIG, "Returns addresses for only locally configured families")
    1176  
    1177  #ifndef AI_V4MAPPED
    1178  # define AI_V4MAPPED -1
    1179  #endif
    1180  CND(AI_V4MAPPED, "Returns IPv4 mapped to IPv6")
    1181  
    1182  #ifndef AI_ALL
    1183  # define AI_ALL -1
    1184  #endif
    1185  CND(AI_ALL, "Change AI_V4MAPPED behavior for unavailavle IPv6 addresses")
    1186  
    1187  #ifndef NI_NAMEREQD
    1188  # define NI_NAMEREQD -1
    1189  #endif
    1190  CND(NI_NAMEREQD, "Error if the hostname cannot be determined")
    1191  
    1192  #ifndef NI_DGRAM
    1193  # define NI_DGRAM -1
    1194  #endif
    1195  CND(NI_DGRAM, "Service is datagram")
    1196  
    1197  #ifndef NI_NOFQDN
    1198  # define NI_NOFQDN -1
    1199  #endif
    1200  CND(NI_NOFQDN, "Return only the hostname part for local hosts")
    1201  
    1202  #ifndef NI_NUMERICSERV
    1203  # define NI_NUMERICSERV -1
    1204  #endif
    1205  CND(NI_NUMERICSERV, "Numeric form of the service")
    1206  
    1207  #ifndef NI_NUMERICHOST
    1208  # define NI_NUMERICHOST -1
    1209  #endif
    1210  CND(NI_NUMERICHOST, "Numeric form of the hostname")
    1211  
    1212  #ifndef NI_MAXHOST
    1213  # define NI_MAXHOST -1
    1214  #endif
    1215  CND(NI_MAXHOST, "Maximum size of hostname")
    1216  
    1217  #ifndef NI_MAXSERV
    1218  # define NI_MAXSERV -1
    1219  #endif
    1220  CND(NI_MAXSERV, "Maximum size of service name")
    1221  
    1222  #ifndef EAI_SYSTEM
    1223  # define EAI_SYSTEM -1
    1224  #endif
    1225  CND(EAI_SYSTEM, "Check errno for details")
    1226  
    1227  /*
    1228  
    1229     ------------------
    1230     -- Socket modes --
    1231     ------------------
    1232  
    1233  */
    1234  
    1235  #ifndef SOCK_STREAM
    1236  # define SOCK_STREAM -1
    1237  #endif
    1238  CND(SOCK_STREAM, "Stream socket")
    1239  
    1240  #ifndef SOCK_DGRAM
    1241  # define SOCK_DGRAM -1
    1242  #endif
    1243  CND(SOCK_DGRAM, "Datagram socket")
    1244  
    1245  #ifndef SOCK_RAW
    1246  # define SOCK_RAW -1
    1247  #endif
    1248  CND(SOCK_RAW, "Raw socket")
    1249  
    1250  /*
    1251  
    1252     -----------------
    1253     -- Host errors --
    1254     -----------------
    1255  
    1256  */
    1257  
    1258  #ifndef HOST_NOT_FOUND
    1259  # define HOST_NOT_FOUND -1
    1260  #endif
    1261  CND(HOST_NOT_FOUND, "Unknown host")
    1262  
    1263  #ifndef TRY_AGAIN
    1264  # define TRY_AGAIN -1
    1265  #endif
    1266  CND(TRY_AGAIN, "Host name lookup failure")
    1267  
    1268  #ifndef NO_DATA
    1269  # define NO_DATA -1
    1270  #endif
    1271  CND(NO_DATA, "No data record for name")
    1272  
    1273  #ifndef NO_RECOVERY
    1274  # define NO_RECOVERY -1
    1275  #endif
    1276  CND(NO_RECOVERY, "Non recoverable errors")
    1277  
    1278  /*
    1279  
    1280     --------------------
    1281     -- Shutdown modes --
    1282     --------------------
    1283  
    1284  */
    1285  
    1286  #ifndef SHUT_RD
    1287  # define SHUT_RD -1
    1288  #endif
    1289  CND(SHUT_RD, "No more recv")
    1290  
    1291  #ifndef SHUT_WR
    1292  # define SHUT_WR -1
    1293  #endif
    1294  CND(SHUT_WR, "No more send")
    1295  
    1296  #ifndef SHUT_RDWR
    1297  # define SHUT_RDWR -1
    1298  #endif
    1299  CND(SHUT_RDWR, "No more recv/send")
    1300  
    1301  /*
    1302  
    1303     ---------------------
    1304     -- Protocol levels --
    1305     ---------------------
    1306  
    1307  */
    1308  
    1309  #ifndef SOL_SOCKET
    1310  # define SOL_SOCKET -1
    1311  #endif
    1312  CND(SOL_SOCKET, "Options for socket level")
    1313  
    1314  #ifndef IPPROTO_IP
    1315  # define IPPROTO_IP -1
    1316  #endif
    1317  CND(IPPROTO_IP, "Dummy protocol for IP")
    1318  
    1319  #ifndef IPPROTO_IPV6
    1320  # define IPPROTO_IPV6 -1
    1321  #endif
    1322  CND(IPPROTO_IPV6, "IPv6 socket option level")
    1323  
    1324  #ifndef IPPROTO_UDP
    1325  # define IPPROTO_UDP -1
    1326  #endif
    1327  CND(IPPROTO_UDP, "UDP")
    1328  
    1329  #ifndef IPPROTO_TCP
    1330  # define IPPROTO_TCP -1
    1331  #endif
    1332  CND(IPPROTO_TCP, "TCP")
    1333  
    1334  #ifndef IPPROTO_ICMP
    1335  # define IPPROTO_ICMP -1
    1336  #endif
    1337  CND(IPPROTO_ICMP, "Internet Control Message Protocol")
    1338  
    1339  #ifndef IPPROTO_IGMP
    1340  # define IPPROTO_IGMP -1
    1341  #endif
    1342  CND(IPPROTO_IGMP, "Internet Group Management Protocol")
    1343  
    1344  #ifndef IPPROTO_IPIP
    1345  # define IPPROTO_IPIP -1
    1346  #endif
    1347  CND(IPPROTO_IPIP, "IPIP tunnels (older KA9Q tunnels use 94)")
    1348  
    1349  #ifndef IPPROTO_EGP
    1350  # define IPPROTO_EGP -1
    1351  #endif
    1352  CND(IPPROTO_EGP, "Exterior Gateway Protocol")
    1353  
    1354  #ifndef IPPROTO_PUP
    1355  # define IPPROTO_PUP -1
    1356  #endif
    1357  CND(IPPROTO_PUP, "PUP protocol")
    1358  
    1359  #ifndef IPPROTO_IDP
    1360  # define IPPROTO_IDP -1
    1361  #endif
    1362  CND(IPPROTO_IDP, "XNS IDP protocol")
    1363  
    1364  #ifndef IPPROTO_TP
    1365  # define IPPROTO_TP -1
    1366  #endif
    1367  CND(IPPROTO_TP, "SO Transport Protocol Class 4")
    1368  
    1369  #ifndef IPPROTO_DCCP
    1370  # define IPPROTO_DCCP -1
    1371  #endif
    1372  CND(IPPROTO_DCCP, "Datagram Congestion Control Protocol")
    1373  
    1374  #ifndef IPPROTO_RSVP
    1375  # define IPPROTO_RSVP -1
    1376  #endif
    1377  CND(IPPROTO_RSVP, "Reservation Protocol")
    1378  
    1379  #ifndef IPPROTO_GRE
    1380  # define IPPROTO_GRE -1
    1381  #endif
    1382  CND(IPPROTO_GRE, "General Routing Encapsulation")
    1383  
    1384  #ifndef IPPROTO_ESP
    1385  # define IPPROTO_ESP -1
    1386  #endif
    1387  CND(IPPROTO_ESP, "encapsulating security payload")
    1388  
    1389  #ifndef IPPROTO_AH
    1390  # define IPPROTO_AH -1
    1391  #endif
    1392  CND(IPPROTO_AH, "authentication header")
    1393  
    1394  #ifndef IPPROTO_MTP
    1395  # define IPPROTO_MTP -1
    1396  #endif
    1397  CND(IPPROTO_MTP, "Multicast Transport Protocol")
    1398  
    1399  #ifndef IPPROTO_BEETPH
    1400  # define IPPROTO_BEETPH -1
    1401  #endif
    1402  CND(IPPROTO_BEETPH, "IP option pseudo header for BEET")
    1403  
    1404  #ifndef IPPROTO_ENCAP
    1405  # define IPPROTO_ENCAP -1
    1406  #endif
    1407  CND(IPPROTO_ENCAP, "Encapsulation Header")
    1408  
    1409  #ifndef IPPROTO_PIM
    1410  # define IPPROTO_PIM -1
    1411  #endif
    1412  CND(IPPROTO_PIM, "Protocol Independent Multicast")
    1413  
    1414  #ifndef IPPROTO_COMP
    1415  # define IPPROTO_COMP -1
    1416  #endif
    1417  CND(IPPROTO_COMP, "Compression Header Protocol")
    1418  
    1419  #ifndef IPPROTO_SCTP
    1420  # define IPPROTO_SCTP -1
    1421  #endif
    1422  CND(IPPROTO_SCTP, "Stream Control Transmission Protocol")
    1423  
    1424  #ifndef IPPROTO_UDPLITE
    1425  # define IPPROTO_UDPLITE -1
    1426  #endif
    1427  CND(IPPROTO_UDPLITE, "UDP-Lite protocol")
    1428  
    1429  #ifndef IPPROTO_MPLS
    1430  # define IPPROTO_MPLS -1
    1431  #endif
    1432  CND(IPPROTO_MPLS, "MPLS in IP")
    1433  
    1434  #ifndef IPPROTO_RAW
    1435  # define IPPROTO_RAW -1
    1436  #endif
    1437  CND(IPPROTO_RAW, "Raw IP packets")
    1438  
    1439  /*
    1440  
    1441     -------------------
    1442     -- Request flags --
    1443     -------------------
    1444  
    1445  */
    1446  
    1447  #ifndef MSG_OOB
    1448  # define MSG_OOB -1
    1449  #endif
    1450  CND(MSG_OOB, "Process out-of-band data")
    1451  
    1452  #ifndef MSG_PEEK
    1453  # define MSG_PEEK -1
    1454  #endif
    1455  CND(MSG_PEEK, "Peek at incoming data")
    1456  
    1457  #ifndef MSG_EOR
    1458  # define MSG_EOR -1
    1459  #endif
    1460  CND(MSG_EOR, "Send end of record")
    1461  
    1462  #ifndef MSG_WAITALL
    1463  # define MSG_WAITALL -1
    1464  #endif
    1465  CND(MSG_WAITALL, "Wait for full reception")
    1466  
    1467  #ifndef MSG_NOSIGNAL
    1468  # define MSG_NOSIGNAL -1
    1469  #endif
    1470  CND(MSG_NOSIGNAL, "No SIGPIPE on send")
    1471  
    1472  #if defined (__linux__) || defined (__ANDROID__) || defined (__QNX__)
    1473  # define MSG_Forced_Flags "MSG_NOSIGNAL"
    1474  #else
    1475  # define MSG_Forced_Flags "0"
    1476  #endif
    1477  CNS(MSG_Forced_Flags, "")
    1478  /*
    1479     --  Flags set on all send(2) calls
    1480  */
    1481  
    1482  /*
    1483  
    1484     --------------------
    1485     -- Socket options --
    1486     --------------------
    1487  
    1488  */
    1489  
    1490  #ifndef TCP_NODELAY
    1491  # define TCP_NODELAY -1
    1492  #endif
    1493  CND(TCP_NODELAY, "Do not coalesce packets")
    1494  
    1495  #ifndef TCP_KEEPCNT
    1496  #ifdef __MINGW32__
    1497  /* Windows headers can be too old to have all available constants.
    1498   * We know this one. */
    1499  # define TCP_KEEPCNT 16
    1500  #else
    1501  # define TCP_KEEPCNT -1
    1502  #endif
    1503  #endif
    1504  CND(TCP_KEEPCNT, "Maximum number of keepalive probes")
    1505  
    1506  #ifndef TCP_KEEPIDLE
    1507  #ifdef __MINGW32__
    1508  /* Windows headers can be too old to have all available constants.
    1509   * We know this one. */
    1510  # define TCP_KEEPIDLE 3
    1511  #else
    1512  # define TCP_KEEPIDLE -1
    1513  #endif
    1514  #endif
    1515  CND(TCP_KEEPIDLE, "Idle time before TCP starts sending keepalive probes")
    1516  
    1517  #ifndef TCP_KEEPINTVL
    1518  #ifdef __MINGW32__
    1519  /* Windows headers can be too old to have all available constants.
    1520   * We know this one. */
    1521  # define TCP_KEEPINTVL 17
    1522  #else
    1523  # define TCP_KEEPINTVL -1
    1524  #endif
    1525  #endif
    1526  CND(TCP_KEEPINTVL, "Time between individual keepalive probes")
    1527  
    1528  #ifndef SO_REUSEADDR
    1529  # define SO_REUSEADDR -1
    1530  #endif
    1531  CND(SO_REUSEADDR, "Bind reuse local address")
    1532  
    1533  #ifndef SO_REUSEPORT
    1534  # define SO_REUSEPORT -1
    1535  #endif
    1536  CND(SO_REUSEPORT, "Bind reuse port number")
    1537  
    1538  #ifndef SO_KEEPALIVE
    1539  # define SO_KEEPALIVE -1
    1540  #endif
    1541  CND(SO_KEEPALIVE, "Enable keep-alive msgs")
    1542  
    1543  #ifndef SO_LINGER
    1544  # define SO_LINGER -1
    1545  #endif
    1546  CND(SO_LINGER, "Defer close to flush data")
    1547  
    1548  #ifndef SO_BROADCAST
    1549  # define SO_BROADCAST -1
    1550  #endif
    1551  CND(SO_BROADCAST, "Can send broadcast msgs")
    1552  
    1553  #ifndef SO_SNDBUF
    1554  # define SO_SNDBUF -1
    1555  #endif
    1556  CND(SO_SNDBUF, "Set/get send buffer size")
    1557  
    1558  #ifndef SO_RCVBUF
    1559  # define SO_RCVBUF -1
    1560  #endif
    1561  CND(SO_RCVBUF, "Set/get recv buffer size")
    1562  
    1563  #ifndef SO_SNDTIMEO
    1564  # define SO_SNDTIMEO -1
    1565  #endif
    1566  CND(SO_SNDTIMEO, "Emission timeout")
    1567  
    1568  #ifndef SO_RCVTIMEO
    1569  # define SO_RCVTIMEO -1
    1570  #endif
    1571  CND(SO_RCVTIMEO, "Reception timeout")
    1572  
    1573  #ifndef SO_ERROR
    1574  # define SO_ERROR -1
    1575  #endif
    1576  CND(SO_ERROR, "Get/clear error status")
    1577  
    1578  #ifndef SO_BUSY_POLL
    1579  # define SO_BUSY_POLL -1
    1580  #endif
    1581  CND(SO_BUSY_POLL, "Busy polling")
    1582  
    1583  #ifndef IP_MULTICAST_IF
    1584  # define IP_MULTICAST_IF -1
    1585  #endif
    1586  CND(IP_MULTICAST_IF, "Set/get mcast interface")
    1587  
    1588  #ifndef IP_MULTICAST_TTL
    1589  # define IP_MULTICAST_TTL -1
    1590  #endif
    1591  CND(IP_MULTICAST_TTL, "Set/get multicast TTL")
    1592  
    1593  #ifndef IP_MULTICAST_LOOP
    1594  # define IP_MULTICAST_LOOP -1
    1595  #endif
    1596  CND(IP_MULTICAST_LOOP, "Set/get mcast loopback")
    1597  
    1598  #ifndef IP_ADD_MEMBERSHIP
    1599  # define IP_ADD_MEMBERSHIP -1
    1600  #endif
    1601  CND(IP_ADD_MEMBERSHIP, "Join a multicast group")
    1602  
    1603  #ifndef IP_DROP_MEMBERSHIP
    1604  # define IP_DROP_MEMBERSHIP -1
    1605  #endif
    1606  CND(IP_DROP_MEMBERSHIP, "Leave a multicast group")
    1607  
    1608  #ifndef IP_PKTINFO
    1609  # define IP_PKTINFO -1
    1610  #endif
    1611  CND(IP_PKTINFO, "Get datagram info")
    1612  
    1613  #ifndef IP_RECVERR
    1614  # define IP_RECVERR -1
    1615  #endif
    1616  CND(IP_RECVERR, "Extended reliable error message passing")
    1617  
    1618  #ifndef IPV6_ADDRFORM
    1619  # define IPV6_ADDRFORM -1
    1620  #endif
    1621  CND(IPV6_ADDRFORM, "Turn IPv6 socket into different address family")
    1622  
    1623  #ifndef IPV6_ADD_MEMBERSHIP
    1624  # define IPV6_ADD_MEMBERSHIP -1
    1625  #endif
    1626  CND(IPV6_ADD_MEMBERSHIP, "Join IPv6 multicast group")
    1627  
    1628  #ifndef IPV6_DROP_MEMBERSHIP
    1629  # define IPV6_DROP_MEMBERSHIP -1
    1630  #endif
    1631  CND(IPV6_DROP_MEMBERSHIP, "Leave IPv6 multicast group")
    1632  
    1633  #ifndef IPV6_MTU
    1634  # define IPV6_MTU -1
    1635  #endif
    1636  CND(IPV6_MTU, "Set/get MTU used for the socket")
    1637  
    1638  #ifndef IPV6_MTU_DISCOVER
    1639  # define IPV6_MTU_DISCOVER -1
    1640  #endif
    1641  CND(IPV6_MTU_DISCOVER, "Control path-MTU discovery on the socket")
    1642  
    1643  #ifndef IPV6_MULTICAST_HOPS
    1644  # define IPV6_MULTICAST_HOPS -1
    1645  #endif
    1646  CND(IPV6_MULTICAST_HOPS, "Set the multicast hop limit for the socket")
    1647  
    1648  #ifndef IPV6_MULTICAST_IF
    1649  # define IPV6_MULTICAST_IF -1
    1650  #endif
    1651  CND(IPV6_MULTICAST_IF, "Set/get IPv6 mcast interface")
    1652  
    1653  #ifndef IPV6_MULTICAST_LOOP
    1654  # define IPV6_MULTICAST_LOOP -1
    1655  #endif
    1656  CND(IPV6_MULTICAST_LOOP, "Set/get mcast loopback")
    1657  
    1658  #ifndef IPV6_RECVPKTINFO
    1659  # define IPV6_RECVPKTINFO -1
    1660  #endif
    1661  CND(IPV6_RECVPKTINFO, "Set delivery of the IPV6_PKTINFO")
    1662  
    1663  #ifndef IPV6_PKTINFO
    1664  # define IPV6_PKTINFO -1
    1665  #endif
    1666  CND(IPV6_PKTINFO, "Get IPv6datagram info")
    1667  
    1668  #ifndef IPV6_RTHDR
    1669  # define IPV6_RTHDR -1
    1670  #endif
    1671  CND(IPV6_RTHDR, "Set the routing header delivery")
    1672  
    1673  #ifndef IPV6_AUTHHDR
    1674  # define IPV6_AUTHHDR -1
    1675  #endif
    1676  CND(IPV6_AUTHHDR, "Set the authentication header delivery")
    1677  
    1678  #ifndef IPV6_DSTOPTS
    1679  # define IPV6_DSTOPTS -1
    1680  #endif
    1681  CND(IPV6_DSTOPTS, "Set the destination options delivery")
    1682  
    1683  #ifndef IPV6_HOPOPTS
    1684  # define IPV6_HOPOPTS -1
    1685  #endif
    1686  CND(IPV6_HOPOPTS, "Set the hop options delivery")
    1687  
    1688  #ifndef IPV6_FLOWINFO
    1689  #ifdef __linux__
    1690  /* The IPV6_FLOWINFO is defined in linux/in6.h, but we can't include it because
    1691   * of conflicts with other headers. */
    1692  # define IPV6_FLOWINFO 11
    1693  #else
    1694  # define IPV6_FLOWINFO -1
    1695  #endif
    1696  #endif
    1697  CND(IPV6_FLOWINFO, "Set the flow ID delivery")
    1698  
    1699  #ifndef IPV6_HOPLIMIT
    1700  # define IPV6_HOPLIMIT -1
    1701  #endif
    1702  CND(IPV6_HOPLIMIT, "Set the hop count of the packet delivery")
    1703  
    1704  #ifndef IPV6_RECVERR
    1705  # define IPV6_RECVERR -1
    1706  #endif
    1707  CND(IPV6_RECVERR, "Extended reliable error message passing")
    1708  
    1709  #ifndef IPV6_ROUTER_ALERT
    1710  # define IPV6_ROUTER_ALERT -1
    1711  #endif
    1712  CND(IPV6_ROUTER_ALERT, "Pass forwarded router alert hop-by-hop option")
    1713  
    1714  #ifndef IPV6_UNICAST_HOPS
    1715  # define IPV6_UNICAST_HOPS -1
    1716  #endif
    1717  CND(IPV6_UNICAST_HOPS, "Set the unicast hop limit")
    1718  
    1719  #ifndef IPV6_V6ONLY
    1720  # define IPV6_V6ONLY -1
    1721  #endif
    1722  CND(IPV6_V6ONLY, "Restricted to IPv6 communications only")
    1723  
    1724  /*
    1725  
    1726     ----------------------
    1727     -- Type definitions --
    1728     ----------------------
    1729  
    1730  */
    1731  
    1732  {
    1733    struct timeval tv;
    1734  /*
    1735     --  Sizes (in bytes) of the components of struct timeval
    1736  */
    1737  #define SIZEOF_tv_sec (sizeof tv.tv_sec)
    1738  CND(SIZEOF_tv_sec, "tv_sec")
    1739  #define SIZEOF_tv_usec (sizeof tv.tv_usec)
    1740  CND(SIZEOF_tv_usec, "tv_usec")
    1741  /*
    1742  
    1743     --  Maximum allowed value for tv_sec
    1744  */
    1745  
    1746  /**
    1747   ** On Solaris, field tv_sec in struct timeval has an undocumented
    1748   ** hard-wired limit of 100 million.
    1749   ** On IA64 HP-UX the limit is 2**31 - 1.
    1750   **/
    1751  #if defined (__sun__)
    1752  # define MAX_tv_sec "100_000_000"
    1753  
    1754  #elif defined (__hpux__)
    1755  # define MAX_tv_sec "16#7fffffff#"
    1756  
    1757  #else
    1758  # define MAX_tv_sec "2 ** (SIZEOF_tv_sec * 8 - 1) - 1"
    1759  #endif
    1760  CNS(MAX_tv_sec, "")
    1761  }
    1762  /*
    1763  
    1764     --  Sizes of various data types
    1765  */
    1766  
    1767  #define SIZEOF_sockaddr_in (sizeof (struct sockaddr_in))
    1768  CND(SIZEOF_sockaddr_in, "struct sockaddr_in")
    1769  #ifdef HAVE_AF_INET6
    1770  # define SIZEOF_sockaddr_in6 (sizeof (struct sockaddr_in6))
    1771  #else
    1772  # define SIZEOF_sockaddr_in6 0
    1773  #endif
    1774  CND(SIZEOF_sockaddr_in6, "struct sockaddr_in6")
    1775  
    1776  /**
    1777   ** The sockaddr_un structure is not defined in MINGW C headers
    1778   ** but Windows supports it from build 17063.
    1779   **/
    1780  #if defined(__MINGW32__)
    1781  struct sockaddr_un {
    1782    ADDRESS_FAMILY sun_family;    /* AF_UNIX */
    1783    char           sun_path[108]; /* Pathname */
    1784  };
    1785  #endif
    1786  #define SIZEOF_sockaddr_un (sizeof (struct sockaddr_un))
    1787  CND(SIZEOF_sockaddr_un, "struct sockaddr_un")
    1788  
    1789  #define SIZEOF_fd_set (sizeof (fd_set))
    1790  CND(SIZEOF_fd_set, "fd_set")
    1791  CND(FD_SETSIZE, "Max fd value")
    1792  
    1793  #define SIZEOF_struct_hostent (sizeof (struct hostent))
    1794  CND(SIZEOF_struct_hostent, "struct hostent")
    1795  
    1796  #define SIZEOF_struct_servent (sizeof (struct servent))
    1797  CND(SIZEOF_struct_servent, "struct servent")
    1798  
    1799  #if defined (__linux__) || defined (__ANDROID__) || defined (__QNX__)
    1800  #define SIZEOF_sigset (sizeof (sigset_t))
    1801  CND(SIZEOF_sigset, "sigset")
    1802  #endif
    1803  
    1804  #if defined(_WIN32) || defined(__vxworks)
    1805  #define SIZEOF_nfds_t sizeof (int) * 8
    1806  #define SIZEOF_socklen_t sizeof (size_t)
    1807  #elif defined(__Lynx__)
    1808  #define SIZEOF_nfds_t sizeof (unsigned long int) * 8
    1809  #define SIZEOF_socklen_t sizeof (socklen_t)
    1810  #else
    1811  #define SIZEOF_nfds_t sizeof (nfds_t) * 8
    1812  #define SIZEOF_socklen_t sizeof (socklen_t)
    1813  #endif
    1814  CND(SIZEOF_nfds_t, "Size of nfds_t");
    1815  CND(SIZEOF_socklen_t, "Size of socklen_t");
    1816  
    1817  {
    1818  #if defined(__vxworks)
    1819  #define SIZEOF_fd_type sizeof (int) * 8
    1820  #define SIZEOF_pollfd_events sizeof (short) * 8
    1821  #else
    1822  const struct pollfd v_pollfd;
    1823  #define SIZEOF_fd_type sizeof (v_pollfd.fd) * 8
    1824  #define SIZEOF_pollfd_events sizeof (v_pollfd.events) * 8
    1825  #endif
    1826  CND(SIZEOF_fd_type, "Size of socket fd");
    1827  CND(SIZEOF_pollfd_events, "Size of pollfd.events");
    1828  }
    1829  
    1830  #ifndef IF_NAMESIZE
    1831  #ifdef IF_MAX_STRING_SIZE
    1832  #define IF_NAMESIZE IF_MAX_STRING_SIZE
    1833  #else
    1834  #define IF_NAMESIZE -1
    1835  #endif
    1836  #endif
    1837  CND(IF_NAMESIZE, "Max size of interface name with 0 terminator");
    1838  
    1839  /*
    1840  
    1841     --  Poll values
    1842  
    1843  */
    1844  
    1845  #if defined(__vxworks)
    1846  #ifndef POLLIN
    1847  #define POLLIN 1
    1848  #endif
    1849  
    1850  #ifndef POLLPRI
    1851  #define POLLPRI 2
    1852  #endif
    1853  
    1854  #ifndef POLLOUT
    1855  #define POLLOUT 4
    1856  #endif
    1857  
    1858  #ifndef POLLERR
    1859  #define POLLERR 8
    1860  #endif
    1861  
    1862  #ifndef POLLHUP
    1863  #define POLLHUP 16
    1864  #endif
    1865  
    1866  #ifndef POLLNVAL
    1867  #define POLLNVAL 32
    1868  #endif
    1869  
    1870  #elif defined(_WIN32)
    1871  #define POLLPRI 0
    1872  /*  If the POLLPRI flag is set on a socket for the Microsoft Winsock provider,
    1873   *  the WSAPoll function will fail. */
    1874  #endif
    1875  
    1876  CND(POLLIN, "There is data to read");
    1877  CND(POLLPRI, "Urgent data to read");
    1878  CND(POLLOUT, "Writing will not block");
    1879  CND(POLLERR, "Error (output only)");
    1880  CND(POLLHUP, "Hang up (output only)");
    1881  CND(POLLNVAL, "Invalid request");
    1882  
    1883  /*
    1884  
    1885     --  Fields of struct msghdr
    1886  */
    1887  
    1888  #if defined (__sun__) || defined (__hpux__)
    1889  # define Msg_Iovlen_T "Interfaces.C.int"
    1890  #else
    1891  # define Msg_Iovlen_T "Interfaces.C.size_t"
    1892  #endif
    1893  
    1894  SUB(Msg_Iovlen_T)
    1895  
    1896  /*
    1897  
    1898     ----------------------------------------
    1899     -- Properties of supported interfaces --
    1900     ----------------------------------------
    1901  
    1902  */
    1903  
    1904  CND(Need_Netdb_Buffer, "Need buffer for Netdb ops")
    1905  CND(Need_Netdb_Lock,   "Need lock for Netdb ops")
    1906  CND(Has_Sockaddr_Len,  "Sockaddr has sa_len field")
    1907  
    1908  /**
    1909   ** Do not change the format of the line below without also updating the
    1910   ** MaRTE Makefile.
    1911   **/
    1912  C("Thread_Blocking_IO", Boolean, "True", "")
    1913  /*
    1914     --  Set False for contexts where socket i/o are process blocking
    1915  
    1916  */
    1917  
    1918  #ifdef HAVE_INET_PTON
    1919  # define Inet_Pton_Linkname "inet_pton"
    1920  #else
    1921  # define Inet_Pton_Linkname "__gnat_inet_pton"
    1922  #endif
    1923  CST(Inet_Pton_Linkname, "")
    1924  
    1925  #ifdef HAVE_INET_NTOP
    1926  # define Inet_Ntop_Linkname "inet_ntop"
    1927  #else
    1928  # define Inet_Ntop_Linkname "__gnat_inet_ntop"
    1929  #endif
    1930  CST(Inet_Ntop_Linkname, "")
    1931  
    1932  #if defined(_WIN32)
    1933  # define Poll_Linkname "WSAPoll"
    1934  #else
    1935  # define Poll_Linkname "poll"
    1936  #endif
    1937  CST(Poll_Linkname, "")
    1938  
    1939  #endif /* HAVE_SOCKETS */
    1940  
    1941  /*
    1942  
    1943     ---------------------
    1944     -- Threads support --
    1945     ---------------------
    1946  
    1947     --  Clock identifier definitions
    1948  
    1949  */
    1950  
    1951  /* Note: On HP-UX, CLOCK_REALTIME is an enum, not a macro. */
    1952  
    1953  #if !(defined(CLOCK_REALTIME) || defined (__hpux__))
    1954  # define CLOCK_REALTIME (-1)
    1955  #endif
    1956  CND(CLOCK_REALTIME, "System realtime clock")
    1957  
    1958  #ifdef CLOCK_MONOTONIC
    1959  CND(CLOCK_MONOTONIC, "System monotonic clock")
    1960  #endif
    1961  
    1962  #ifdef CLOCK_FASTEST
    1963  CND(CLOCK_FASTEST, "Fastest clock")
    1964  #endif
    1965  
    1966  #ifndef CLOCK_THREAD_CPUTIME_ID
    1967  # define CLOCK_THREAD_CPUTIME_ID -1
    1968  #endif
    1969  CND(CLOCK_THREAD_CPUTIME_ID, "Thread CPU clock")
    1970  
    1971  #if defined(__linux__) || defined(__FreeBSD__) \
    1972   || (defined(_AIX) && defined(_AIXVERSION_530)) \
    1973   || defined(__DragonFly__) || defined(__QNX__)
    1974  /** On these platforms use system provided monotonic clock instead of
    1975   ** the default CLOCK_REALTIME. We then need to set up cond var attributes
    1976   ** appropriately (see thread.c).
    1977   **
    1978   ** Note that AIX 5.2 does not support CLOCK_MONOTONIC timestamps for
    1979   ** pthread_cond_timedwait (and does not have pthread_condattr_setclock),
    1980   ** hence the conditionalization on AIX version above). _AIXVERSION_530
    1981   ** is defined in AIX 5.3 and more recent versions.
    1982   **/
    1983  # define CLOCK_RT_Ada "CLOCK_MONOTONIC"
    1984  
    1985  #else
    1986  /* By default use CLOCK_REALTIME */
    1987  # define CLOCK_RT_Ada "CLOCK_REALTIME"
    1988  #endif
    1989  
    1990  #ifdef CLOCK_RT_Ada
    1991  CNS(CLOCK_RT_Ada, "")
    1992  #endif
    1993  
    1994  #if defined (__APPLE__) || defined (__linux__) || defined (__ANDROID__) \
    1995    || defined (__QNX__) || defined (__rtems__) || defined (DUMMY)
    1996  /*
    1997  
    1998     --  Sizes of pthread data types
    1999  */
    2000  
    2001  #if defined (__APPLE__) || defined (DUMMY)
    2002  /*
    2003     --  (on Darwin, these are just placeholders)
    2004  */
    2005  #define PTHREAD_SIZE            __PTHREAD_SIZE__
    2006  #define PTHREAD_ATTR_SIZE       __PTHREAD_ATTR_SIZE__
    2007  #define PTHREAD_MUTEXATTR_SIZE  __PTHREAD_MUTEXATTR_SIZE__
    2008  #define PTHREAD_MUTEX_SIZE      __PTHREAD_MUTEX_SIZE__
    2009  #define PTHREAD_CONDATTR_SIZE   __PTHREAD_CONDATTR_SIZE__
    2010  #define PTHREAD_COND_SIZE       __PTHREAD_COND_SIZE__
    2011  #define PTHREAD_RWLOCKATTR_SIZE __PTHREAD_RWLOCKATTR_SIZE__
    2012  #define PTHREAD_RWLOCK_SIZE     __PTHREAD_RWLOCK_SIZE__
    2013  #define PTHREAD_ONCE_SIZE       __PTHREAD_ONCE_SIZE__
    2014  #else
    2015  #define PTHREAD_SIZE            (sizeof (pthread_t))
    2016  #define PTHREAD_ATTR_SIZE       (sizeof (pthread_attr_t))
    2017  #define PTHREAD_MUTEXATTR_SIZE  (sizeof (pthread_mutexattr_t))
    2018  #define PTHREAD_MUTEX_SIZE      (sizeof (pthread_mutex_t))
    2019  #define PTHREAD_CONDATTR_SIZE   (sizeof (pthread_condattr_t))
    2020  #define PTHREAD_COND_SIZE       (sizeof (pthread_cond_t))
    2021  #define PTHREAD_RWLOCKATTR_SIZE (sizeof (pthread_rwlockattr_t))
    2022  #define PTHREAD_RWLOCK_SIZE     (sizeof (pthread_rwlock_t))
    2023  #define PTHREAD_ONCE_SIZE       (sizeof (pthread_once_t))
    2024  #endif
    2025  /*
    2026  
    2027  */
    2028  CND(PTHREAD_SIZE,            "pthread_t")
    2029  CND(PTHREAD_ATTR_SIZE,       "pthread_attr_t")
    2030  CND(PTHREAD_MUTEXATTR_SIZE,  "pthread_mutexattr_t")
    2031  CND(PTHREAD_MUTEX_SIZE,      "pthread_mutex_t")
    2032  CND(PTHREAD_CONDATTR_SIZE,   "pthread_condattr_t")
    2033  CND(PTHREAD_COND_SIZE,       "pthread_cond_t")
    2034  CND(PTHREAD_RWLOCKATTR_SIZE, "pthread_rwlockattr_t")
    2035  CND(PTHREAD_RWLOCK_SIZE,     "pthread_rwlock_t")
    2036  CND(PTHREAD_ONCE_SIZE,       "pthread_once_t")
    2037  
    2038  #endif /* __APPLE__ || __linux__ || __ANDROID__ || __rtems__ */
    2039  
    2040  /*
    2041  
    2042     --------------------------------
    2043     -- File and directory support --
    2044     --------------------------------
    2045  
    2046  */
    2047  
    2048  /**
    2049   ** Note: this constant can be used in the GNAT runtime library. In compiler
    2050   ** units on the other hand, System.OS_Constants is not available, so we
    2051   ** declare an Ada constant (Osint.File_Attributes_Size) independently, which
    2052   ** is at least as large as sizeof (struct file_attributes), and we have an
    2053   ** assertion at initialization of Osint checking that the size is indeed at
    2054   ** least sufficient.
    2055   **/
    2056  #define SIZEOF_struct_file_attributes (sizeof (struct file_attributes))
    2057  CND(SIZEOF_struct_file_attributes, "struct file_attributes")
    2058  
    2059  /**
    2060   ** Maximal size of buffer for struct dirent. Note: Since POSIX.1 does not
    2061   ** specify the size of the d_name field, and other nonstandard fields may
    2062   ** precede that field within the dirent structure, we must make a conservative
    2063   ** computation.
    2064   **/
    2065  {
    2066    struct dirent dent;
    2067  #define SIZEOF_struct_dirent_alloc \
    2068    ((char*) &dent.d_name - (char*) &dent) + NAME_MAX + 1
    2069  CND(SIZEOF_struct_dirent_alloc, "struct dirent allocation")
    2070  }
    2071  
    2072  /**
    2073   **  System-specific constants follow
    2074   **  Each section should be activated if compiling for the corresponding
    2075   **  platform *or* generating the dummy version for runtime test compilation.
    2076   **/
    2077  
    2078  #if defined (__vxworks) || defined (DUMMY)
    2079  
    2080  /*
    2081  
    2082     --------------------------------
    2083     -- VxWorks-specific constants --
    2084     --------------------------------
    2085  
    2086     --  These constants may be used only within the VxWorks version of
    2087     --  GNAT.Sockets.Thin.
    2088  */
    2089  
    2090  CND(OK,    "VxWorks generic success")
    2091  CND(ERROR, "VxWorks generic error")
    2092  
    2093  #endif /* __vxworks */
    2094  
    2095  #if defined (__MINGW32__) || defined (DUMMY)
    2096  /*
    2097  
    2098     ------------------------------
    2099     -- MinGW-specific constants --
    2100     ------------------------------
    2101  
    2102     --  These constants may be used only within the MinGW version of
    2103     --  GNAT.Sockets.Thin.
    2104  */
    2105  
    2106  CND(WSASYSNOTREADY,     "System not ready")
    2107  CND(WSAVERNOTSUPPORTED, "Version not supported")
    2108  CND(WSANOTINITIALISED,  "Winsock not initialized")
    2109  CND(WSAEDISCON,         "Disconnected")
    2110  
    2111  #endif /* __MINGW32__ */
    2112  
    2113  /**
    2114   ** End of constants definitions
    2115   **/
    2116  
    2117  #ifdef NATIVE
    2118     putchar ('\n');
    2119  #endif
    2120  
    2121  /*
    2122  
    2123  end System.OS_Constants;
    2124  */
    2125  }