diff options
Diffstat (limited to 'lib/stdint.in.h')
| -rw-r--r-- | lib/stdint.in.h | 285 | 
1 files changed, 176 insertions, 109 deletions
| diff --git a/lib/stdint.in.h b/lib/stdint.in.h index 997e4063..cf365587 100644 --- a/lib/stdint.in.h +++ b/lib/stdint.in.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2002, 2004-2010 Free Software Foundation, Inc. +/* Copyright (C) 2001-2002, 2004-2015 Free Software Foundation, Inc.     Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.     This file is part of gnulib. @@ -13,19 +13,19 @@     GNU Lesser General Public License for more details.     You should have received a copy of the GNU Lesser General Public License -   along with this program; if not, write to the Free Software Foundation, -   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */ +   along with this program; if not, see <http://www.gnu.org/licenses/>.  */  /*   * ISO C 99 <stdint.h> for platforms that lack it.   * <http://www.opengroup.org/susv3xbd/stdint.h.html>   */ -#ifndef _GL_STDINT_H +#ifndef _@GUARD_PREFIX@_STDINT_H  #if __GNUC__ >= 3  @PRAGMA_SYSTEM_HEADER@  #endif +@PRAGMA_COLUMNS@  /* When including a system file that in turn includes <inttypes.h>,     use the system <inttypes.h>, not our substitute.  This avoids @@ -33,6 +33,15 @@     <inttypes.h>.  */  #define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H +/* On Android (Bionic libc), <sys/types.h> includes this file before +   having defined 'time_t'.  Therefore in this case avoid including +   other system header files; just include the system's <stdint.h>. +   Ideally we should test __BIONIC__ here, but it is only defined after +   <sys/cdefs.h> has been included; hence test __ANDROID__ instead.  */ +#if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H +# @INCLUDE_NEXT@ @NEXT_STDINT_H@ +#else +  /* Get those types that are already defined in other system include     files, so that we can "#define int8_t signed char" below without     worrying about a later system include file containing a "typedef @@ -48,28 +57,40 @@        diagnostics.  */  #  define __STDINT_H__  # endif + +  /* Some pre-C++11 <stdint.h> implementations need this.  */ +# ifdef __cplusplus +#  ifndef __STDC_CONSTANT_MACROS +#   define __STDC_CONSTANT_MACROS 1 +#  endif +#  ifndef __STDC_LIMIT_MACROS +#   define __STDC_LIMIT_MACROS 1 +#  endif +# endif +    /* Other systems may have an incomplete or buggy <stdint.h>.       Include it before <inttypes.h>, since any "#include <stdint.h>"       in <inttypes.h> would reinclude us, skipping our contents because -     _GL_STDINT_H is defined. +     _@GUARD_PREFIX@_STDINT_H is defined.       The include_next requires a split double-inclusion guard.  */  # @INCLUDE_NEXT@ @NEXT_STDINT_H@  #endif -#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H -#define _GL_STDINT_H +#if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H +#define _@GUARD_PREFIX@_STDINT_H  /* <sys/types.h> defines some of the stdint.h types as well, on glibc,     IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).     AIX 5.2 <sys/types.h> isn't needed and causes troubles. -   MacOS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but +   Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but     relies on the system <stdint.h> definitions, so include     <sys/types.h> after @NEXT_STDINT_H@.  */  #if @HAVE_SYS_TYPES_H@ && ! defined _AIX  # include <sys/types.h>  #endif -/* Get LONG_MIN, LONG_MAX, ULONG_MAX.  */ +/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, +   LONG_MIN, LONG_MAX, ULONG_MAX.  */  #include <limits.h>  #if @HAVE_INTTYPES_H@ @@ -92,7 +113,7 @@  #undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H -/* Minimum and maximum values for a integer type under the usual assumption. +/* Minimum and maximum values for an integer type under the usual assumption.     Return an unspecified value if BITS == 0, adding a check to pacify     picky compilers.  */ @@ -107,6 +128,8 @@          warnings in the signed case.  */ \       ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) +#if !GNULIB_defined_stdint_types +  /* 7.18.1.1. Exact-width integer types */  /* Here we assume a standard architecture where the hardware integer @@ -133,40 +156,54 @@ typedef unsigned int gl_uint32_t;  #define int32_t gl_int32_t  #define uint32_t gl_uint32_t +/* If the system defines INT64_MAX, assume int64_t works.  That way, +   if the underlying platform defines int64_t to be a 64-bit long long +   int, the code below won't mistakenly define it to be a 64-bit long +   int, which would mess up C++ name mangling.  We must use #ifdef +   rather than #if, to avoid an error with HP-UX 10.20 cc.  */ + +#ifdef INT64_MAX +# define GL_INT64_T +#else  /* Do not undefine int64_t if gnulib is not being used with 64-bit     types, since otherwise it breaks platforms like Tandem/NSK.  */ -#if LONG_MAX >> 31 >> 31 == 1 -# undef int64_t +# if LONG_MAX >> 31 >> 31 == 1 +#  undef int64_t  typedef long int gl_int64_t; -# define int64_t gl_int64_t -# define GL_INT64_T -#elif defined _MSC_VER -# undef int64_t +#  define int64_t gl_int64_t +#  define GL_INT64_T +# elif defined _MSC_VER +#  undef int64_t  typedef __int64 gl_int64_t; -# define int64_t gl_int64_t -# define GL_INT64_T -#elif @HAVE_LONG_LONG_INT@ -# undef int64_t +#  define int64_t gl_int64_t +#  define GL_INT64_T +# elif @HAVE_LONG_LONG_INT@ +#  undef int64_t  typedef long long int gl_int64_t; -# define int64_t gl_int64_t -# define GL_INT64_T +#  define int64_t gl_int64_t +#  define GL_INT64_T +# endif  #endif -#if ULONG_MAX >> 31 >> 31 >> 1 == 1 -# undef uint64_t -typedef unsigned long int gl_uint64_t; -# define uint64_t gl_uint64_t +#ifdef UINT64_MAX  # define GL_UINT64_T -#elif defined _MSC_VER -# undef uint64_t +#else +# if ULONG_MAX >> 31 >> 31 >> 1 == 1 +#  undef uint64_t +typedef unsigned long int gl_uint64_t; +#  define uint64_t gl_uint64_t +#  define GL_UINT64_T +# elif defined _MSC_VER +#  undef uint64_t  typedef unsigned __int64 gl_uint64_t; -# define uint64_t gl_uint64_t -# define GL_UINT64_T -#elif @HAVE_UNSIGNED_LONG_LONG_INT@ -# undef uint64_t +#  define uint64_t gl_uint64_t +#  define GL_UINT64_T +# elif @HAVE_UNSIGNED_LONG_LONG_INT@ +#  undef uint64_t  typedef unsigned long long int gl_uint64_t; -# define uint64_t gl_uint64_t -# define GL_UINT64_T +#  define uint64_t gl_uint64_t +#  define GL_UINT64_T +# endif  #endif  /* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */ @@ -209,8 +246,9 @@ typedef unsigned long long int gl_uint64_t;  /* Here we assume a standard architecture where the hardware integer     types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types -   are taken from the same list of types.  Assume that 'long int' -   is fast enough for all narrower integers.  */ +   are taken from the same list of types.  The following code normally +   uses types consistent with glibc, as that lessens the chance of +   incompatibility with older GNU hosts.  */  #undef int_fast8_t  #undef uint_fast8_t @@ -220,12 +258,21 @@ typedef unsigned long long int gl_uint64_t;  #undef uint_fast32_t  #undef int_fast64_t  #undef uint_fast64_t -typedef long int gl_int_fast8_t; -typedef unsigned long int gl_uint_fast8_t; -typedef long int gl_int_fast16_t; -typedef unsigned long int gl_uint_fast16_t; +typedef signed char gl_int_fast8_t; +typedef unsigned char gl_uint_fast8_t; + +#ifdef __sun +/* Define types compatible with SunOS 5.10, so that code compiled under +   earlier SunOS versions works with code compiled under SunOS 5.10.  */ +typedef int gl_int_fast32_t; +typedef unsigned int gl_uint_fast32_t; +#else  typedef long int gl_int_fast32_t;  typedef unsigned long int gl_uint_fast32_t; +#endif +typedef gl_int_fast32_t gl_int_fast16_t; +typedef gl_uint_fast32_t gl_uint_fast16_t; +  #define int_fast8_t gl_int_fast8_t  #define uint_fast8_t gl_uint_fast8_t  #define int_fast16_t gl_int_fast16_t @@ -253,36 +300,48 @@ typedef unsigned long int gl_uintptr_t;  /* Note: These types are compiler dependent. It may be unwise to use them in     public header files. */ -#undef intmax_t -#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +/* If the system defines INTMAX_MAX, assume that intmax_t works, and +   similarly for UINTMAX_MAX and uintmax_t.  This avoids problems with +   assuming one type where another is used by the system.  */ + +#ifndef INTMAX_MAX +# undef INTMAX_C +# undef intmax_t +# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1  typedef long long int gl_intmax_t; -# define intmax_t gl_intmax_t -#elif defined GL_INT64_T -# define intmax_t int64_t -#else +#  define intmax_t gl_intmax_t +# elif defined GL_INT64_T +#  define intmax_t int64_t +# else  typedef long int gl_intmax_t; -# define intmax_t gl_intmax_t +#  define intmax_t gl_intmax_t +# endif  #endif -#undef uintmax_t -#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +#ifndef UINTMAX_MAX +# undef UINTMAX_C +# undef uintmax_t +# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1  typedef unsigned long long int gl_uintmax_t; -# define uintmax_t gl_uintmax_t -#elif defined GL_UINT64_T -# define uintmax_t uint64_t -#else +#  define uintmax_t gl_uintmax_t +# elif defined GL_UINT64_T +#  define uintmax_t uint64_t +# else  typedef unsigned long int gl_uintmax_t; -# define uintmax_t gl_uintmax_t +#  define uintmax_t gl_uintmax_t +# endif  #endif  /* Verify that intmax_t and uintmax_t have the same size.  Too much code     breaks if this is not the case.  If this check fails, the reason is likely     to be found in the autoconf macros.  */ -typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) - 1]; +typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) +                                ? 1 : -1]; -/* 7.18.2. Limits of specified-width integer types */ +#define GNULIB_defined_stdint_types 1 +#endif /* !GNULIB_defined_stdint_types */ -#if ! defined __cplusplus || defined __STDC_LIMIT_MACROS +/* 7.18.2. Limits of specified-width integer types */  /* 7.18.2.1. Limits of exact-width integer types */ @@ -310,17 +369,14 @@ typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) -  #define INT32_MAX  2147483647  #define UINT32_MAX  4294967295U -#undef INT64_MIN -#undef INT64_MAX -#ifdef GL_INT64_T +#if defined GL_INT64_T && ! defined INT64_MAX  /* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0     evaluates the latter incorrectly in preprocessor expressions.  */  # define INT64_MIN  (- INTMAX_C (1) << 63)  # define INT64_MAX  INTMAX_C (9223372036854775807)  #endif -#undef UINT64_MAX -#ifdef GL_UINT64_T +#if defined GL_UINT64_T && ! defined UINT64_MAX  # define UINT64_MAX  UINTMAX_C (18446744073709551615)  #endif @@ -372,23 +428,29 @@ typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) -  #undef INT_FAST8_MIN  #undef INT_FAST8_MAX  #undef UINT_FAST8_MAX -#define INT_FAST8_MIN  LONG_MIN -#define INT_FAST8_MAX  LONG_MAX -#define UINT_FAST8_MAX  ULONG_MAX +#define INT_FAST8_MIN  SCHAR_MIN +#define INT_FAST8_MAX  SCHAR_MAX +#define UINT_FAST8_MAX  UCHAR_MAX  #undef INT_FAST16_MIN  #undef INT_FAST16_MAX  #undef UINT_FAST16_MAX -#define INT_FAST16_MIN  LONG_MIN -#define INT_FAST16_MAX  LONG_MAX -#define UINT_FAST16_MAX  ULONG_MAX +#define INT_FAST16_MIN  INT_FAST32_MIN +#define INT_FAST16_MAX  INT_FAST32_MAX +#define UINT_FAST16_MAX  UINT_FAST32_MAX  #undef INT_FAST32_MIN  #undef INT_FAST32_MAX  #undef UINT_FAST32_MAX -#define INT_FAST32_MIN  LONG_MIN -#define INT_FAST32_MAX  LONG_MAX -#define UINT_FAST32_MAX  ULONG_MAX +#ifdef __sun +# define INT_FAST32_MIN  INT_MIN +# define INT_FAST32_MAX  INT_MAX +# define UINT_FAST32_MAX  UINT_MAX +#else +# define INT_FAST32_MIN  LONG_MIN +# define INT_FAST32_MAX  LONG_MAX +# define UINT_FAST32_MAX  ULONG_MAX +#endif  #undef INT_FAST64_MIN  #undef INT_FAST64_MAX @@ -413,21 +475,23 @@ typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) -  /* 7.18.2.5. Limits of greatest-width integer types */ -#undef INTMAX_MIN -#undef INTMAX_MAX -#ifdef INT64_MAX -# define INTMAX_MIN  INT64_MIN -# define INTMAX_MAX  INT64_MAX -#else -# define INTMAX_MIN  INT32_MIN -# define INTMAX_MAX  INT32_MAX +#ifndef INTMAX_MAX +# undef INTMAX_MIN +# ifdef INT64_MAX +#  define INTMAX_MIN  INT64_MIN +#  define INTMAX_MAX  INT64_MAX +# else +#  define INTMAX_MIN  INT32_MIN +#  define INTMAX_MAX  INT32_MAX +# endif  #endif -#undef UINTMAX_MAX -#ifdef UINT64_MAX -# define UINTMAX_MAX  UINT64_MAX -#else -# define UINTMAX_MAX  UINT32_MAX +#ifndef UINTMAX_MAX +# ifdef UINT64_MAX +#  define UINTMAX_MAX  UINT64_MAX +# else +#  define UINTMAX_MAX  UINT32_MAX +# endif  #endif  /* 7.18.3. Limits of other integer types */ @@ -475,10 +539,16 @@ typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) -  /* wchar_t limits */  /* Get WCHAR_MIN, WCHAR_MAX. -   This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested -   includes <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes +   This include is not on the top, above, because on OSF/1 4.0 we have a +   sequence of nested includes +   <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes     <stdint.h> and assumes its types are already defined.  */ -#if ! (defined WCHAR_MIN && defined WCHAR_MAX) +#if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) +  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be +     included before <wchar.h>.  */ +# include <stddef.h> +# include <stdio.h> +# include <time.h>  # define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H  # include <wchar.h>  # undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H @@ -498,12 +568,8 @@ typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) -  #define WINT_MAX  \     _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) -#endif /* !defined __cplusplus || defined __STDC_LIMIT_MACROS */ -  /* 7.18.4. Macros for integer constants */ -#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS -  /* 7.18.4.1. Macros for minimum-width integer constants */  /* According to ISO C 99 Technical Corrigendum 1 */ @@ -544,25 +610,26 @@ typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) -  /* 7.18.4.2. Macros for greatest-width integer constants */ -#undef INTMAX_C -#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 -# define INTMAX_C(x)   x##LL -#elif defined GL_INT64_T -# define INTMAX_C(x)   INT64_C(x) -#else -# define INTMAX_C(x)   x##L +#ifndef INTMAX_C +# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +#  define INTMAX_C(x)   x##LL +# elif defined GL_INT64_T +#  define INTMAX_C(x)   INT64_C(x) +# else +#  define INTMAX_C(x)   x##L +# endif  #endif -#undef UINTMAX_C -#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 -# define UINTMAX_C(x)  x##ULL -#elif defined GL_UINT64_T -# define UINTMAX_C(x)  UINT64_C(x) -#else -# define UINTMAX_C(x)  x##UL +#ifndef UINTMAX_C +# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +#  define UINTMAX_C(x)  x##ULL +# elif defined GL_UINT64_T +#  define UINTMAX_C(x)  UINT64_C(x) +# else +#  define UINTMAX_C(x)  x##UL +# endif  #endif -#endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */ - -#endif /* _GL_STDINT_H */ -#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ +#endif /* _@GUARD_PREFIX@_STDINT_H */ +#endif /* !(defined __ANDROID__ && ...) */ +#endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ | 
