(root)/
tar-1.35/
gnu/
stdint.in.h
       1  /* Copyright (C) 2001-2002, 2004-2023 Free Software Foundation, Inc.
       2     Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
       3     This file is part of gnulib.
       4  
       5     This file is free software: you can redistribute it and/or modify
       6     it under the terms of the GNU Lesser General Public License as
       7     published by the Free Software Foundation; either version 2.1 of the
       8     License, or (at your option) any later version.
       9  
      10     This file is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      13     GNU Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public License
      16     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
      17  
      18  /*
      19   * ISO C 99 <stdint.h> for platforms that lack it.
      20   * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html>
      21   */
      22  
      23  #ifndef _@GUARD_PREFIX@_STDINT_H
      24  
      25  #if __GNUC__ >= 3
      26  @PRAGMA_SYSTEM_HEADER@
      27  #endif
      28  @PRAGMA_COLUMNS@
      29  
      30  /* When including a system file that in turn includes <inttypes.h>,
      31     use the system <inttypes.h>, not our substitute.  This avoids
      32     problems with (for example) VMS, whose <sys/bitypes.h> includes
      33     <inttypes.h>.  */
      34  #define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
      35  
      36  /* On Android (Bionic libc), <sys/types.h> includes this file before
      37     having defined 'time_t'.  Therefore in this case avoid including
      38     other system header files; just include the system's <stdint.h>.
      39     Ideally we should test __BIONIC__ here, but it is only defined after
      40     <sys/cdefs.h> has been included; hence test __ANDROID__ instead.  */
      41  #if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H
      42  # @INCLUDE_NEXT@ @NEXT_STDINT_H@
      43  #else
      44  
      45  /* Get those types that are already defined in other system include
      46     files, so that we can "#define int8_t signed char" below without
      47     worrying about a later system include file containing a "typedef
      48     signed char int8_t;" that will get messed up by our macro.  Our
      49     macros should all be consistent with the system versions, except
      50     for the "fast" types and macros, which we recommend against using
      51     in public interfaces due to compiler differences.  */
      52  
      53  #if @HAVE_STDINT_H@
      54  # if defined __sgi && ! defined __c99
      55     /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
      56        with "This header file is to be used only for c99 mode compilations"
      57        diagnostics.  */
      58  #  define __STDINT_H__
      59  # endif
      60  
      61    /* Some pre-C++11 <stdint.h> implementations need this.  */
      62  # ifdef __cplusplus
      63  #  ifndef __STDC_CONSTANT_MACROS
      64  #   define __STDC_CONSTANT_MACROS 1
      65  #  endif
      66  #  ifndef __STDC_LIMIT_MACROS
      67  #   define __STDC_LIMIT_MACROS 1
      68  #  endif
      69  # endif
      70  
      71    /* Other systems may have an incomplete or buggy <stdint.h>.
      72       Include it before <inttypes.h>, since any "#include <stdint.h>"
      73       in <inttypes.h> would reinclude us, skipping our contents because
      74       _@GUARD_PREFIX@_STDINT_H is defined.
      75       The include_next requires a split double-inclusion guard.  */
      76  # @INCLUDE_NEXT@ @NEXT_STDINT_H@
      77  #endif
      78  
      79  #if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
      80  #define _@GUARD_PREFIX@_STDINT_H
      81  
      82  /* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX,
      83     LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH.  */
      84  #include <limits.h>
      85  
      86  /* Override WINT_MIN and WINT_MAX if gnulib's <wchar.h> or <wctype.h> overrides
      87     wint_t.  */
      88  #if @GNULIBHEADERS_OVERRIDE_WINT_T@
      89  # undef WINT_MIN
      90  # undef WINT_MAX
      91  # define WINT_MIN 0x0U
      92  # define WINT_MAX 0xffffffffU
      93  #endif
      94  
      95  #if ! @HAVE_C99_STDINT_H@
      96  
      97  /* <sys/types.h> defines some of the stdint.h types as well, on glibc,
      98     IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
      99     AIX 5.2 <sys/types.h> isn't needed and causes troubles.
     100     Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
     101     relies on the system <stdint.h> definitions, so include
     102     <sys/types.h> after @NEXT_STDINT_H@.  */
     103  # if @HAVE_SYS_TYPES_H@ && ! defined _AIX
     104  #  include <sys/types.h>
     105  # endif
     106  
     107  # if @HAVE_INTTYPES_H@
     108    /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
     109       int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
     110       <inttypes.h> also defines intptr_t and uintptr_t.  */
     111  #  include <inttypes.h>
     112  # elif @HAVE_SYS_INTTYPES_H@
     113    /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
     114       the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX.  */
     115  #  include <sys/inttypes.h>
     116  # endif
     117  
     118  # if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__
     119    /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
     120       int{8,16,32,64}_t and __BIT_TYPES_DEFINED__.  In libc5 >= 5.2.2 it is
     121       included by <sys/types.h>.  */
     122  #  include <sys/bitypes.h>
     123  # endif
     124  
     125  # undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
     126  
     127  /* Minimum and maximum values for an integer type under the usual assumption.
     128     Return an unspecified value if BITS == 0, adding a check to pacify
     129     picky compilers.  */
     130  
     131  /* These are separate macros, because if you try to merge these macros into
     132     a single one, HP-UX cc rejects the resulting expression in constant
     133     expressions.  */
     134  # define _STDINT_UNSIGNED_MIN(bits, zero) \
     135      (zero)
     136  # define _STDINT_SIGNED_MIN(bits, zero) \
     137      (~ _STDINT_MAX (1, bits, zero))
     138  
     139  # define _STDINT_MAX(signed, bits, zero) \
     140      (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
     141  
     142  #if !GNULIB_defined_stdint_types
     143  
     144  /* 7.18.1.1. Exact-width integer types */
     145  
     146  /* Here we assume a standard architecture where the hardware integer
     147     types have 8, 16, 32, optionally 64 bits.  */
     148  
     149  # undef int8_t
     150  # undef uint8_t
     151  typedef signed char gl_int8_t;
     152  typedef unsigned char gl_uint8_t;
     153  # define int8_t gl_int8_t
     154  # define uint8_t gl_uint8_t
     155  
     156  # undef int16_t
     157  # undef uint16_t
     158  typedef short int gl_int16_t;
     159  typedef unsigned short int gl_uint16_t;
     160  # define int16_t gl_int16_t
     161  # define uint16_t gl_uint16_t
     162  
     163  # undef int32_t
     164  # undef uint32_t
     165  typedef int gl_int32_t;
     166  typedef unsigned int gl_uint32_t;
     167  # define int32_t gl_int32_t
     168  # define uint32_t gl_uint32_t
     169  
     170  /* If the system defines INT64_MAX, assume int64_t works.  That way,
     171     if the underlying platform defines int64_t to be a 64-bit long long
     172     int, the code below won't mistakenly define it to be a 64-bit long
     173     int, which would mess up C++ name mangling.  We must use #ifdef
     174     rather than #if, to avoid an error with HP-UX 10.20 cc.  */
     175  
     176  # ifdef INT64_MAX
     177  #  define GL_INT64_T
     178  # else
     179  /* Do not undefine int64_t if gnulib is not being used with 64-bit
     180     types, since otherwise it breaks platforms like Tandem/NSK.  */
     181  #  if LONG_MAX >> 31 >> 31 == 1
     182  #   undef int64_t
     183  typedef long int gl_int64_t;
     184  #   define int64_t gl_int64_t
     185  #   define GL_INT64_T
     186  #  elif defined _MSC_VER
     187  #   undef int64_t
     188  typedef __int64 gl_int64_t;
     189  #   define int64_t gl_int64_t
     190  #   define GL_INT64_T
     191  #  else
     192  #   undef int64_t
     193  typedef long long int gl_int64_t;
     194  #   define int64_t gl_int64_t
     195  #   define GL_INT64_T
     196  #  endif
     197  # endif
     198  
     199  # ifdef UINT64_MAX
     200  #  define GL_UINT64_T
     201  # else
     202  #  if ULONG_MAX >> 31 >> 31 >> 1 == 1
     203  #   undef uint64_t
     204  typedef unsigned long int gl_uint64_t;
     205  #   define uint64_t gl_uint64_t
     206  #   define GL_UINT64_T
     207  #  elif defined _MSC_VER
     208  #   undef uint64_t
     209  typedef unsigned __int64 gl_uint64_t;
     210  #   define uint64_t gl_uint64_t
     211  #   define GL_UINT64_T
     212  #  else
     213  #   undef uint64_t
     214  typedef unsigned long long int gl_uint64_t;
     215  #   define uint64_t gl_uint64_t
     216  #   define GL_UINT64_T
     217  #  endif
     218  # endif
     219  
     220  /* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
     221  # define _UINT8_T
     222  # define _UINT32_T
     223  # define _UINT64_T
     224  
     225  
     226  /* 7.18.1.2. Minimum-width integer types */
     227  
     228  /* Here we assume a standard architecture where the hardware integer
     229     types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
     230     are the same as the corresponding N_t types.  */
     231  
     232  # undef int_least8_t
     233  # undef uint_least8_t
     234  # undef int_least16_t
     235  # undef uint_least16_t
     236  # undef int_least32_t
     237  # undef uint_least32_t
     238  # undef int_least64_t
     239  # undef uint_least64_t
     240  # define int_least8_t int8_t
     241  # define uint_least8_t uint8_t
     242  # define int_least16_t int16_t
     243  # define uint_least16_t uint16_t
     244  # define int_least32_t int32_t
     245  # define uint_least32_t uint32_t
     246  # ifdef GL_INT64_T
     247  #  define int_least64_t int64_t
     248  # endif
     249  # ifdef GL_UINT64_T
     250  #  define uint_least64_t uint64_t
     251  # endif
     252  
     253  /* 7.18.1.3. Fastest minimum-width integer types */
     254  
     255  /* Note: Other <stdint.h> substitutes may define these types differently.
     256     It is not recommended to use these types in public header files. */
     257  
     258  /* Here we assume a standard architecture where the hardware integer
     259     types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
     260     are taken from the same list of types.  The following code normally
     261     uses types consistent with glibc, as that lessens the chance of
     262     incompatibility with older GNU hosts.  */
     263  
     264  # undef int_fast8_t
     265  # undef uint_fast8_t
     266  # undef int_fast16_t
     267  # undef uint_fast16_t
     268  # undef int_fast32_t
     269  # undef uint_fast32_t
     270  # undef int_fast64_t
     271  # undef uint_fast64_t
     272  typedef signed char gl_int_fast8_t;
     273  typedef unsigned char gl_uint_fast8_t;
     274  
     275  # ifdef __sun
     276  /* Define types compatible with SunOS 5.10, so that code compiled under
     277     earlier SunOS versions works with code compiled under SunOS 5.10.  */
     278  typedef int gl_int_fast32_t;
     279  typedef unsigned int gl_uint_fast32_t;
     280  # else
     281  typedef long int gl_int_fast32_t;
     282  typedef unsigned long int gl_uint_fast32_t;
     283  # endif
     284  typedef gl_int_fast32_t gl_int_fast16_t;
     285  typedef gl_uint_fast32_t gl_uint_fast16_t;
     286  
     287  # define int_fast8_t gl_int_fast8_t
     288  # define uint_fast8_t gl_uint_fast8_t
     289  # define int_fast16_t gl_int_fast16_t
     290  # define uint_fast16_t gl_uint_fast16_t
     291  # define int_fast32_t gl_int_fast32_t
     292  # define uint_fast32_t gl_uint_fast32_t
     293  # ifdef GL_INT64_T
     294  #  define int_fast64_t int64_t
     295  # endif
     296  # ifdef GL_UINT64_T
     297  #  define uint_fast64_t uint64_t
     298  # endif
     299  
     300  /* 7.18.1.4. Integer types capable of holding object pointers */
     301  
     302  /* kLIBC's <stdint.h> defines _INTPTR_T_DECLARED and needs its own
     303     definitions of intptr_t and uintptr_t (which use int and unsigned)
     304     to avoid clashes with declarations of system functions like sbrk.
     305     Similarly, MinGW WSL-5.4.1 <stdint.h> needs its own intptr_t and
     306     uintptr_t to avoid conflicting declarations of system functions like
     307     _findclose in <io.h>.  */
     308  # if !((defined __KLIBC__ && defined _INTPTR_T_DECLARED) \
     309         || defined __MINGW32__)
     310  #  undef intptr_t
     311  #  undef uintptr_t
     312  #  ifdef _WIN64
     313  typedef long long int gl_intptr_t;
     314  typedef unsigned long long int gl_uintptr_t;
     315  #  else
     316  typedef long int gl_intptr_t;
     317  typedef unsigned long int gl_uintptr_t;
     318  #  endif
     319  #  define intptr_t gl_intptr_t
     320  #  define uintptr_t gl_uintptr_t
     321  # endif
     322  
     323  /* 7.18.1.5. Greatest-width integer types */
     324  
     325  /* Note: These types are compiler dependent. It may be unwise to use them in
     326     public header files. */
     327  
     328  /* If the system defines INTMAX_MAX, assume that intmax_t works, and
     329     similarly for UINTMAX_MAX and uintmax_t.  This avoids problems with
     330     assuming one type where another is used by the system.  */
     331  
     332  # ifndef INTMAX_MAX
     333  #  undef INTMAX_C
     334  #  undef intmax_t
     335  #  if LONG_MAX >> 30 == 1
     336  typedef long long int gl_intmax_t;
     337  #   define intmax_t gl_intmax_t
     338  #  elif defined GL_INT64_T
     339  #   define intmax_t int64_t
     340  #  else
     341  typedef long int gl_intmax_t;
     342  #   define intmax_t gl_intmax_t
     343  #  endif
     344  # endif
     345  
     346  # ifndef UINTMAX_MAX
     347  #  undef UINTMAX_C
     348  #  undef uintmax_t
     349  #  if ULONG_MAX >> 31 == 1
     350  typedef unsigned long long int gl_uintmax_t;
     351  #   define uintmax_t gl_uintmax_t
     352  #  elif defined GL_UINT64_T
     353  #   define uintmax_t uint64_t
     354  #  else
     355  typedef unsigned long int gl_uintmax_t;
     356  #   define uintmax_t gl_uintmax_t
     357  #  endif
     358  # endif
     359  
     360  /* Verify that intmax_t and uintmax_t have the same size.  Too much code
     361     breaks if this is not the case.  If this check fails, the reason is likely
     362     to be found in the autoconf macros.  */
     363  typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
     364                                  ? 1 : -1];
     365  
     366  # define GNULIB_defined_stdint_types 1
     367  # endif /* !GNULIB_defined_stdint_types */
     368  
     369  /* 7.18.2. Limits of specified-width integer types */
     370  
     371  /* 7.18.2.1. Limits of exact-width integer types */
     372  
     373  /* Here we assume a standard architecture where the hardware integer
     374     types have 8, 16, 32, optionally 64 bits.  */
     375  
     376  # undef INT8_MIN
     377  # undef INT8_MAX
     378  # undef UINT8_MAX
     379  # define INT8_MIN  (~ INT8_MAX)
     380  # define INT8_MAX  127
     381  # define UINT8_MAX  255
     382  
     383  # undef INT16_MIN
     384  # undef INT16_MAX
     385  # undef UINT16_MAX
     386  # define INT16_MIN  (~ INT16_MAX)
     387  # define INT16_MAX  32767
     388  # define UINT16_MAX  65535
     389  
     390  # undef INT32_MIN
     391  # undef INT32_MAX
     392  # undef UINT32_MAX
     393  # define INT32_MIN  (~ INT32_MAX)
     394  # define INT32_MAX  2147483647
     395  # define UINT32_MAX  4294967295U
     396  
     397  # if defined GL_INT64_T && ! defined INT64_MAX
     398  /* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
     399     evaluates the latter incorrectly in preprocessor expressions.  */
     400  #  define INT64_MIN  (- INTMAX_C (1) << 63)
     401  #  define INT64_MAX  INTMAX_C (9223372036854775807)
     402  # endif
     403  
     404  # if defined GL_UINT64_T && ! defined UINT64_MAX
     405  #  define UINT64_MAX  UINTMAX_C (18446744073709551615)
     406  # endif
     407  
     408  /* 7.18.2.2. Limits of minimum-width integer types */
     409  
     410  /* Here we assume a standard architecture where the hardware integer
     411     types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
     412     are the same as the corresponding N_t types.  */
     413  
     414  # undef INT_LEAST8_MIN
     415  # undef INT_LEAST8_MAX
     416  # undef UINT_LEAST8_MAX
     417  # define INT_LEAST8_MIN  INT8_MIN
     418  # define INT_LEAST8_MAX  INT8_MAX
     419  # define UINT_LEAST8_MAX  UINT8_MAX
     420  
     421  # undef INT_LEAST16_MIN
     422  # undef INT_LEAST16_MAX
     423  # undef UINT_LEAST16_MAX
     424  # define INT_LEAST16_MIN  INT16_MIN
     425  # define INT_LEAST16_MAX  INT16_MAX
     426  # define UINT_LEAST16_MAX  UINT16_MAX
     427  
     428  # undef INT_LEAST32_MIN
     429  # undef INT_LEAST32_MAX
     430  # undef UINT_LEAST32_MAX
     431  # define INT_LEAST32_MIN  INT32_MIN
     432  # define INT_LEAST32_MAX  INT32_MAX
     433  # define UINT_LEAST32_MAX  UINT32_MAX
     434  
     435  # undef INT_LEAST64_MIN
     436  # undef INT_LEAST64_MAX
     437  # ifdef GL_INT64_T
     438  #  define INT_LEAST64_MIN  INT64_MIN
     439  #  define INT_LEAST64_MAX  INT64_MAX
     440  # endif
     441  
     442  # undef UINT_LEAST64_MAX
     443  # ifdef GL_UINT64_T
     444  #  define UINT_LEAST64_MAX  UINT64_MAX
     445  # endif
     446  
     447  /* 7.18.2.3. Limits of fastest minimum-width integer types */
     448  
     449  /* Here we assume a standard architecture where the hardware integer
     450     types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
     451     are taken from the same list of types.  */
     452  
     453  # undef INT_FAST8_MIN
     454  # undef INT_FAST8_MAX
     455  # undef UINT_FAST8_MAX
     456  # define INT_FAST8_MIN  SCHAR_MIN
     457  # define INT_FAST8_MAX  SCHAR_MAX
     458  # define UINT_FAST8_MAX  UCHAR_MAX
     459  
     460  # undef INT_FAST16_MIN
     461  # undef INT_FAST16_MAX
     462  # undef UINT_FAST16_MAX
     463  # define INT_FAST16_MIN  INT_FAST32_MIN
     464  # define INT_FAST16_MAX  INT_FAST32_MAX
     465  # define UINT_FAST16_MAX  UINT_FAST32_MAX
     466  
     467  # undef INT_FAST32_MIN
     468  # undef INT_FAST32_MAX
     469  # undef UINT_FAST32_MAX
     470  # ifdef __sun
     471  #  define INT_FAST32_MIN  INT_MIN
     472  #  define INT_FAST32_MAX  INT_MAX
     473  #  define UINT_FAST32_MAX  UINT_MAX
     474  # else
     475  #  define INT_FAST32_MIN  LONG_MIN
     476  #  define INT_FAST32_MAX  LONG_MAX
     477  #  define UINT_FAST32_MAX  ULONG_MAX
     478  # endif
     479  
     480  # undef INT_FAST64_MIN
     481  # undef INT_FAST64_MAX
     482  # ifdef GL_INT64_T
     483  #  define INT_FAST64_MIN  INT64_MIN
     484  #  define INT_FAST64_MAX  INT64_MAX
     485  # endif
     486  
     487  # undef UINT_FAST64_MAX
     488  # ifdef GL_UINT64_T
     489  #  define UINT_FAST64_MAX  UINT64_MAX
     490  # endif
     491  
     492  /* 7.18.2.4. Limits of integer types capable of holding object pointers */
     493  
     494  # undef INTPTR_MIN
     495  # undef INTPTR_MAX
     496  # undef UINTPTR_MAX
     497  # ifdef _WIN64
     498  #  define INTPTR_MIN  LLONG_MIN
     499  #  define INTPTR_MAX  LLONG_MAX
     500  #  define UINTPTR_MAX  ULLONG_MAX
     501  # else
     502  #  define INTPTR_MIN  LONG_MIN
     503  #  define INTPTR_MAX  LONG_MAX
     504  #  define UINTPTR_MAX  ULONG_MAX
     505  # endif
     506  
     507  /* 7.18.2.5. Limits of greatest-width integer types */
     508  
     509  # ifndef INTMAX_MAX
     510  #  undef INTMAX_MIN
     511  #  ifdef INT64_MAX
     512  #   define INTMAX_MIN  INT64_MIN
     513  #   define INTMAX_MAX  INT64_MAX
     514  #  else
     515  #   define INTMAX_MIN  INT32_MIN
     516  #   define INTMAX_MAX  INT32_MAX
     517  #  endif
     518  # endif
     519  
     520  # ifndef UINTMAX_MAX
     521  #  ifdef UINT64_MAX
     522  #   define UINTMAX_MAX  UINT64_MAX
     523  #  else
     524  #   define UINTMAX_MAX  UINT32_MAX
     525  #  endif
     526  # endif
     527  
     528  /* 7.18.3. Limits of other integer types */
     529  
     530  /* ptrdiff_t limits */
     531  # undef PTRDIFF_MIN
     532  # undef PTRDIFF_MAX
     533  # if @APPLE_UNIVERSAL_BUILD@
     534  #  ifdef _LP64
     535  #   define PTRDIFF_MIN  _STDINT_SIGNED_MIN (64, 0l)
     536  #   define PTRDIFF_MAX  _STDINT_MAX (1, 64, 0l)
     537  #  else
     538  #   define PTRDIFF_MIN  _STDINT_SIGNED_MIN (32, 0)
     539  #   define PTRDIFF_MAX  _STDINT_MAX (1, 32, 0)
     540  #  endif
     541  # else
     542  #  define PTRDIFF_MIN  \
     543      _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
     544  #  define PTRDIFF_MAX  \
     545      _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
     546  # endif
     547  
     548  /* sig_atomic_t limits */
     549  # undef SIG_ATOMIC_MIN
     550  # undef SIG_ATOMIC_MAX
     551  # if @HAVE_SIGNED_SIG_ATOMIC_T@
     552  #  define SIG_ATOMIC_MIN  \
     553      _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@)
     554  # else
     555  #  define SIG_ATOMIC_MIN  \
     556      _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@)
     557  # endif
     558  # define SIG_ATOMIC_MAX  \
     559     _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
     560                  0@SIG_ATOMIC_T_SUFFIX@)
     561  
     562  
     563  /* size_t limit */
     564  # undef SIZE_MAX
     565  # if @APPLE_UNIVERSAL_BUILD@
     566  #  ifdef _LP64
     567  #   define SIZE_MAX  _STDINT_MAX (0, 64, 0ul)
     568  #  else
     569  #   define SIZE_MAX  _STDINT_MAX (0, 32, 0ul)
     570  #  endif
     571  # else
     572  #  define SIZE_MAX  _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
     573  # endif
     574  
     575  /* wchar_t limits */
     576  /* Get WCHAR_MIN, WCHAR_MAX.
     577     This include is not on the top, above, because on OSF/1 4.0 we have a
     578     sequence of nested includes
     579     <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes
     580     <stdint.h> and assumes its types are already defined.  */
     581  # if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX)
     582  #  define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
     583  #  include <wchar.h>
     584  #  undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
     585  # endif
     586  # undef WCHAR_MIN
     587  # undef WCHAR_MAX
     588  # if @HAVE_SIGNED_WCHAR_T@
     589  #  define WCHAR_MIN  \
     590      _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
     591  # else
     592  #  define WCHAR_MIN  \
     593      _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
     594  # endif
     595  # define WCHAR_MAX  \
     596     _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
     597  
     598  /* wint_t limits */
     599  /* If gnulib's <wchar.h> or <wctype.h> overrides wint_t, @WINT_T_SUFFIX@ is not
     600     accurate, therefore use the definitions from above.  */
     601  # if !@GNULIBHEADERS_OVERRIDE_WINT_T@
     602  #  undef WINT_MIN
     603  #  undef WINT_MAX
     604  #  if @HAVE_SIGNED_WINT_T@
     605  #   define WINT_MIN  \
     606       _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
     607  #  else
     608  #   define WINT_MIN  \
     609       _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
     610  #  endif
     611  #  define WINT_MAX  \
     612      _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
     613  # endif
     614  
     615  /* 7.18.4. Macros for integer constants */
     616  
     617  /* 7.18.4.1. Macros for minimum-width integer constants */
     618  /* According to ISO C 99 Technical Corrigendum 1 */
     619  
     620  /* Here we assume a standard architecture where the hardware integer
     621     types have 8, 16, 32, optionally 64 bits, and int is 32 bits.  */
     622  
     623  # undef INT8_C
     624  # undef UINT8_C
     625  # define INT8_C(x) x
     626  # define UINT8_C(x) x
     627  
     628  # undef INT16_C
     629  # undef UINT16_C
     630  # define INT16_C(x) x
     631  # define UINT16_C(x) x
     632  
     633  # undef INT32_C
     634  # undef UINT32_C
     635  # define INT32_C(x) x
     636  # define UINT32_C(x) x ## U
     637  
     638  # undef INT64_C
     639  # undef UINT64_C
     640  # if LONG_MAX >> 31 >> 31 == 1
     641  #  define INT64_C(x) x##L
     642  # elif defined _MSC_VER
     643  #  define INT64_C(x) x##i64
     644  # else
     645  #  define INT64_C(x) x##LL
     646  # endif
     647  # if ULONG_MAX >> 31 >> 31 >> 1 == 1
     648  #  define UINT64_C(x) x##UL
     649  # elif defined _MSC_VER
     650  #  define UINT64_C(x) x##ui64
     651  # else
     652  #  define UINT64_C(x) x##ULL
     653  # endif
     654  
     655  /* 7.18.4.2. Macros for greatest-width integer constants */
     656  
     657  # ifndef INTMAX_C
     658  #  if LONG_MAX >> 30 == 1
     659  #   define INTMAX_C(x)   x##LL
     660  #  elif defined GL_INT64_T
     661  #   define INTMAX_C(x)   INT64_C(x)
     662  #  else
     663  #   define INTMAX_C(x)   x##L
     664  #  endif
     665  # endif
     666  
     667  # ifndef UINTMAX_C
     668  #  if ULONG_MAX >> 31 == 1
     669  #   define UINTMAX_C(x)  x##ULL
     670  #  elif defined GL_UINT64_T
     671  #   define UINTMAX_C(x)  UINT64_C(x)
     672  #  else
     673  #   define UINTMAX_C(x)  x##UL
     674  #  endif
     675  # endif
     676  
     677  #endif /* !@HAVE_C99_STDINT_H@ */
     678  
     679  /* Macros specified by ISO/IEC TS 18661-1:2014.  */
     680  
     681  #if (!defined UINTMAX_WIDTH \
     682       && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__))
     683  # ifdef INT8_MAX
     684  #  define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX)
     685  # endif
     686  # ifdef UINT8_MAX
     687  #  define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX)
     688  # endif
     689  # ifdef INT16_MAX
     690  #  define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX)
     691  # endif
     692  # ifdef UINT16_MAX
     693  #  define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX)
     694  # endif
     695  # ifdef INT32_MAX
     696  #  define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX)
     697  # endif
     698  # ifdef UINT32_MAX
     699  #  define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX)
     700  # endif
     701  # ifdef INT64_MAX
     702  #  define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX)
     703  # endif
     704  # ifdef UINT64_MAX
     705  #  define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX)
     706  # endif
     707  # define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX)
     708  # define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX)
     709  # define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX)
     710  # define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX)
     711  # define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX)
     712  # define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX)
     713  # define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX)
     714  # define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX)
     715  # define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX)
     716  # define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX)
     717  # define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX)
     718  # define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX)
     719  # define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX)
     720  # define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX)
     721  # define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX)
     722  # define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX)
     723  # define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX)
     724  # define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX)
     725  # define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX)
     726  # define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX)
     727  # define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX)
     728  # define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX)
     729  # define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX)
     730  # ifdef WINT_MAX
     731  #  define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX)
     732  # endif
     733  # ifdef SIG_ATOMIC_MAX
     734  #  define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX)
     735  # endif
     736  #endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */
     737  
     738  #endif /* _@GUARD_PREFIX@_STDINT_H */
     739  #endif /* !(defined __ANDROID__ && ...) */
     740  #endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */