(root)/
gettext-0.22.4/
gettext-tools/
gnulib-lib/
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 __INTPTR_WIDTH__ \
     310             && __INTPTR_WIDTH__ != (defined _WIN64 ? LLONG_WIDTH : LONG_WIDTH)) \
     311         || defined __MINGW32__)
     312  #  undef intptr_t
     313  #  undef uintptr_t
     314  #  ifdef _WIN64
     315  typedef long long int gl_intptr_t;
     316  typedef unsigned long long int gl_uintptr_t;
     317  #  else
     318  typedef long int gl_intptr_t;
     319  typedef unsigned long int gl_uintptr_t;
     320  #  endif
     321  #  define intptr_t gl_intptr_t
     322  #  define uintptr_t gl_uintptr_t
     323  # endif
     324  
     325  /* 7.18.1.5. Greatest-width integer types */
     326  
     327  /* Note: These types are compiler dependent. It may be unwise to use them in
     328     public header files. */
     329  
     330  /* If the system defines INTMAX_MAX, assume that intmax_t works, and
     331     similarly for UINTMAX_MAX and uintmax_t.  This avoids problems with
     332     assuming one type where another is used by the system.  */
     333  
     334  # ifndef INTMAX_MAX
     335  #  undef INTMAX_C
     336  #  undef intmax_t
     337  #  if LONG_MAX >> 30 == 1
     338  typedef long long int gl_intmax_t;
     339  #   define intmax_t gl_intmax_t
     340  #  elif defined GL_INT64_T
     341  #   define intmax_t int64_t
     342  #  else
     343  typedef long int gl_intmax_t;
     344  #   define intmax_t gl_intmax_t
     345  #  endif
     346  # endif
     347  
     348  # ifndef UINTMAX_MAX
     349  #  undef UINTMAX_C
     350  #  undef uintmax_t
     351  #  if ULONG_MAX >> 31 == 1
     352  typedef unsigned long long int gl_uintmax_t;
     353  #   define uintmax_t gl_uintmax_t
     354  #  elif defined GL_UINT64_T
     355  #   define uintmax_t uint64_t
     356  #  else
     357  typedef unsigned long int gl_uintmax_t;
     358  #   define uintmax_t gl_uintmax_t
     359  #  endif
     360  # endif
     361  
     362  /* Verify that intmax_t and uintmax_t have the same size.  Too much code
     363     breaks if this is not the case.  If this check fails, the reason is likely
     364     to be found in the autoconf macros.  */
     365  typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
     366                                  ? 1 : -1];
     367  
     368  # define GNULIB_defined_stdint_types 1
     369  # endif /* !GNULIB_defined_stdint_types */
     370  
     371  /* 7.18.2. Limits of specified-width integer types */
     372  
     373  /* 7.18.2.1. Limits of exact-width integer types */
     374  
     375  /* Here we assume a standard architecture where the hardware integer
     376     types have 8, 16, 32, optionally 64 bits.  */
     377  
     378  # undef INT8_MIN
     379  # undef INT8_MAX
     380  # undef UINT8_MAX
     381  # define INT8_MIN  (~ INT8_MAX)
     382  # define INT8_MAX  127
     383  # define UINT8_MAX  255
     384  
     385  # undef INT16_MIN
     386  # undef INT16_MAX
     387  # undef UINT16_MAX
     388  # define INT16_MIN  (~ INT16_MAX)
     389  # define INT16_MAX  32767
     390  # define UINT16_MAX  65535
     391  
     392  # undef INT32_MIN
     393  # undef INT32_MAX
     394  # undef UINT32_MAX
     395  # define INT32_MIN  (~ INT32_MAX)
     396  # define INT32_MAX  2147483647
     397  # define UINT32_MAX  4294967295U
     398  
     399  # if defined GL_INT64_T && ! defined INT64_MAX
     400  /* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
     401     evaluates the latter incorrectly in preprocessor expressions.  */
     402  #  define INT64_MIN  (- INTMAX_C (1) << 63)
     403  #  define INT64_MAX  INTMAX_C (9223372036854775807)
     404  # endif
     405  
     406  # if defined GL_UINT64_T && ! defined UINT64_MAX
     407  #  define UINT64_MAX  UINTMAX_C (18446744073709551615)
     408  # endif
     409  
     410  /* 7.18.2.2. Limits of minimum-width integer types */
     411  
     412  /* Here we assume a standard architecture where the hardware integer
     413     types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
     414     are the same as the corresponding N_t types.  */
     415  
     416  # undef INT_LEAST8_MIN
     417  # undef INT_LEAST8_MAX
     418  # undef UINT_LEAST8_MAX
     419  # define INT_LEAST8_MIN  INT8_MIN
     420  # define INT_LEAST8_MAX  INT8_MAX
     421  # define UINT_LEAST8_MAX  UINT8_MAX
     422  
     423  # undef INT_LEAST16_MIN
     424  # undef INT_LEAST16_MAX
     425  # undef UINT_LEAST16_MAX
     426  # define INT_LEAST16_MIN  INT16_MIN
     427  # define INT_LEAST16_MAX  INT16_MAX
     428  # define UINT_LEAST16_MAX  UINT16_MAX
     429  
     430  # undef INT_LEAST32_MIN
     431  # undef INT_LEAST32_MAX
     432  # undef UINT_LEAST32_MAX
     433  # define INT_LEAST32_MIN  INT32_MIN
     434  # define INT_LEAST32_MAX  INT32_MAX
     435  # define UINT_LEAST32_MAX  UINT32_MAX
     436  
     437  # undef INT_LEAST64_MIN
     438  # undef INT_LEAST64_MAX
     439  # ifdef GL_INT64_T
     440  #  define INT_LEAST64_MIN  INT64_MIN
     441  #  define INT_LEAST64_MAX  INT64_MAX
     442  # endif
     443  
     444  # undef UINT_LEAST64_MAX
     445  # ifdef GL_UINT64_T
     446  #  define UINT_LEAST64_MAX  UINT64_MAX
     447  # endif
     448  
     449  /* 7.18.2.3. Limits of fastest minimum-width integer types */
     450  
     451  /* Here we assume a standard architecture where the hardware integer
     452     types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
     453     are taken from the same list of types.  */
     454  
     455  # undef INT_FAST8_MIN
     456  # undef INT_FAST8_MAX
     457  # undef UINT_FAST8_MAX
     458  # define INT_FAST8_MIN  SCHAR_MIN
     459  # define INT_FAST8_MAX  SCHAR_MAX
     460  # define UINT_FAST8_MAX  UCHAR_MAX
     461  
     462  # undef INT_FAST16_MIN
     463  # undef INT_FAST16_MAX
     464  # undef UINT_FAST16_MAX
     465  # define INT_FAST16_MIN  INT_FAST32_MIN
     466  # define INT_FAST16_MAX  INT_FAST32_MAX
     467  # define UINT_FAST16_MAX  UINT_FAST32_MAX
     468  
     469  # undef INT_FAST32_MIN
     470  # undef INT_FAST32_MAX
     471  # undef UINT_FAST32_MAX
     472  # ifdef __sun
     473  #  define INT_FAST32_MIN  INT_MIN
     474  #  define INT_FAST32_MAX  INT_MAX
     475  #  define UINT_FAST32_MAX  UINT_MAX
     476  # else
     477  #  define INT_FAST32_MIN  LONG_MIN
     478  #  define INT_FAST32_MAX  LONG_MAX
     479  #  define UINT_FAST32_MAX  ULONG_MAX
     480  # endif
     481  
     482  # undef INT_FAST64_MIN
     483  # undef INT_FAST64_MAX
     484  # ifdef GL_INT64_T
     485  #  define INT_FAST64_MIN  INT64_MIN
     486  #  define INT_FAST64_MAX  INT64_MAX
     487  # endif
     488  
     489  # undef UINT_FAST64_MAX
     490  # ifdef GL_UINT64_T
     491  #  define UINT_FAST64_MAX  UINT64_MAX
     492  # endif
     493  
     494  /* 7.18.2.4. Limits of integer types capable of holding object pointers */
     495  
     496  # undef INTPTR_MIN
     497  # undef INTPTR_MAX
     498  # undef UINTPTR_MAX
     499  # ifdef _WIN64
     500  #  define INTPTR_MIN  LLONG_MIN
     501  #  define INTPTR_MAX  LLONG_MAX
     502  #  define UINTPTR_MAX  ULLONG_MAX
     503  # else
     504  #  define INTPTR_MIN  LONG_MIN
     505  #  define INTPTR_MAX  LONG_MAX
     506  #  define UINTPTR_MAX  ULONG_MAX
     507  # endif
     508  
     509  /* 7.18.2.5. Limits of greatest-width integer types */
     510  
     511  # ifndef INTMAX_MAX
     512  #  undef INTMAX_MIN
     513  #  ifdef INT64_MAX
     514  #   define INTMAX_MIN  INT64_MIN
     515  #   define INTMAX_MAX  INT64_MAX
     516  #  else
     517  #   define INTMAX_MIN  INT32_MIN
     518  #   define INTMAX_MAX  INT32_MAX
     519  #  endif
     520  # endif
     521  
     522  # ifndef UINTMAX_MAX
     523  #  ifdef UINT64_MAX
     524  #   define UINTMAX_MAX  UINT64_MAX
     525  #  else
     526  #   define UINTMAX_MAX  UINT32_MAX
     527  #  endif
     528  # endif
     529  
     530  /* 7.18.3. Limits of other integer types */
     531  
     532  /* ptrdiff_t limits */
     533  # undef PTRDIFF_MIN
     534  # undef PTRDIFF_MAX
     535  # if @APPLE_UNIVERSAL_BUILD@
     536  #  ifdef _LP64
     537  #   define PTRDIFF_MIN  _STDINT_SIGNED_MIN (64, 0l)
     538  #   define PTRDIFF_MAX  _STDINT_MAX (1, 64, 0l)
     539  #  else
     540  #   define PTRDIFF_MIN  _STDINT_SIGNED_MIN (32, 0)
     541  #   define PTRDIFF_MAX  _STDINT_MAX (1, 32, 0)
     542  #  endif
     543  # else
     544  #  define PTRDIFF_MIN  \
     545      _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
     546  #  define PTRDIFF_MAX  \
     547      _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
     548  # endif
     549  
     550  /* sig_atomic_t limits */
     551  # undef SIG_ATOMIC_MIN
     552  # undef SIG_ATOMIC_MAX
     553  # if @HAVE_SIGNED_SIG_ATOMIC_T@
     554  #  define SIG_ATOMIC_MIN  \
     555      _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@)
     556  # else
     557  #  define SIG_ATOMIC_MIN  \
     558      _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@)
     559  # endif
     560  # define SIG_ATOMIC_MAX  \
     561     _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
     562                  0@SIG_ATOMIC_T_SUFFIX@)
     563  
     564  
     565  /* size_t limit */
     566  # undef SIZE_MAX
     567  # if @APPLE_UNIVERSAL_BUILD@
     568  #  ifdef _LP64
     569  #   define SIZE_MAX  _STDINT_MAX (0, 64, 0ul)
     570  #  else
     571  #   define SIZE_MAX  _STDINT_MAX (0, 32, 0ul)
     572  #  endif
     573  # else
     574  #  define SIZE_MAX  _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
     575  # endif
     576  
     577  /* wchar_t limits */
     578  /* Get WCHAR_MIN, WCHAR_MAX.
     579     This include is not on the top, above, because on OSF/1 4.0 we have a
     580     sequence of nested includes
     581     <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes
     582     <stdint.h> and assumes its types are already defined.  */
     583  # if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX)
     584  #  define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
     585  #  include <wchar.h>
     586  #  undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
     587  # endif
     588  # undef WCHAR_MIN
     589  # undef WCHAR_MAX
     590  # if @HAVE_SIGNED_WCHAR_T@
     591  #  define WCHAR_MIN  \
     592      _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
     593  # else
     594  #  define WCHAR_MIN  \
     595      _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
     596  # endif
     597  # define WCHAR_MAX  \
     598     _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
     599  
     600  /* wint_t limits */
     601  /* If gnulib's <wchar.h> or <wctype.h> overrides wint_t, @WINT_T_SUFFIX@ is not
     602     accurate, therefore use the definitions from above.  */
     603  # if !@GNULIBHEADERS_OVERRIDE_WINT_T@
     604  #  undef WINT_MIN
     605  #  undef WINT_MAX
     606  #  if @HAVE_SIGNED_WINT_T@
     607  #   define WINT_MIN  \
     608       _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
     609  #  else
     610  #   define WINT_MIN  \
     611       _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
     612  #  endif
     613  #  define WINT_MAX  \
     614      _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
     615  # endif
     616  
     617  /* 7.18.4. Macros for integer constants */
     618  
     619  /* 7.18.4.1. Macros for minimum-width integer constants */
     620  /* According to ISO C 99 Technical Corrigendum 1 */
     621  
     622  /* Here we assume a standard architecture where the hardware integer
     623     types have 8, 16, 32, optionally 64 bits, and int is 32 bits.  */
     624  
     625  # undef INT8_C
     626  # undef UINT8_C
     627  # define INT8_C(x) x
     628  # define UINT8_C(x) x
     629  
     630  # undef INT16_C
     631  # undef UINT16_C
     632  # define INT16_C(x) x
     633  # define UINT16_C(x) x
     634  
     635  # undef INT32_C
     636  # undef UINT32_C
     637  # define INT32_C(x) x
     638  # define UINT32_C(x) x ## U
     639  
     640  # undef INT64_C
     641  # undef UINT64_C
     642  # if LONG_MAX >> 31 >> 31 == 1
     643  #  define INT64_C(x) x##L
     644  # elif defined _MSC_VER
     645  #  define INT64_C(x) x##i64
     646  # else
     647  #  define INT64_C(x) x##LL
     648  # endif
     649  # if ULONG_MAX >> 31 >> 31 >> 1 == 1
     650  #  define UINT64_C(x) x##UL
     651  # elif defined _MSC_VER
     652  #  define UINT64_C(x) x##ui64
     653  # else
     654  #  define UINT64_C(x) x##ULL
     655  # endif
     656  
     657  /* 7.18.4.2. Macros for greatest-width integer constants */
     658  
     659  # ifndef INTMAX_C
     660  #  if LONG_MAX >> 30 == 1
     661  #   define INTMAX_C(x)   x##LL
     662  #  elif defined GL_INT64_T
     663  #   define INTMAX_C(x)   INT64_C(x)
     664  #  else
     665  #   define INTMAX_C(x)   x##L
     666  #  endif
     667  # endif
     668  
     669  # ifndef UINTMAX_C
     670  #  if ULONG_MAX >> 31 == 1
     671  #   define UINTMAX_C(x)  x##ULL
     672  #  elif defined GL_UINT64_T
     673  #   define UINTMAX_C(x)  UINT64_C(x)
     674  #  else
     675  #   define UINTMAX_C(x)  x##UL
     676  #  endif
     677  # endif
     678  
     679  #endif /* !@HAVE_C99_STDINT_H@ */
     680  
     681  /* Macros specified by ISO/IEC TS 18661-1:2014.  */
     682  
     683  #if (!defined UINTMAX_WIDTH \
     684       && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__))
     685  # ifdef INT8_MAX
     686  #  define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX)
     687  # endif
     688  # ifdef UINT8_MAX
     689  #  define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX)
     690  # endif
     691  # ifdef INT16_MAX
     692  #  define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX)
     693  # endif
     694  # ifdef UINT16_MAX
     695  #  define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX)
     696  # endif
     697  # ifdef INT32_MAX
     698  #  define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX)
     699  # endif
     700  # ifdef UINT32_MAX
     701  #  define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX)
     702  # endif
     703  # ifdef INT64_MAX
     704  #  define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX)
     705  # endif
     706  # ifdef UINT64_MAX
     707  #  define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX)
     708  # endif
     709  # define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX)
     710  # define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX)
     711  # define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX)
     712  # define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX)
     713  # define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX)
     714  # define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX)
     715  # define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX)
     716  # define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX)
     717  # define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX)
     718  # define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX)
     719  # define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX)
     720  # define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX)
     721  # define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX)
     722  # define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX)
     723  # define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX)
     724  # define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX)
     725  # define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX)
     726  # define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX)
     727  # define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX)
     728  # define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX)
     729  # define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX)
     730  # define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX)
     731  # define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX)
     732  # ifdef WINT_MAX
     733  #  define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX)
     734  # endif
     735  # ifdef SIG_ATOMIC_MAX
     736  #  define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX)
     737  # endif
     738  #endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */
     739  
     740  #endif /* _@GUARD_PREFIX@_STDINT_H */
     741  #endif /* !(defined __ANDROID__ && ...) */
     742  #endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */