* doc/headers/assert.texi (assert.h): Document assert module use.
[gnulib.git] / lib / stdint_.h
index c29108f..4fa5251 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2002, 2004-2006 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2002, 2004-2007 Free Software Foundation, Inc.
    Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
    This file is part of gnulib.
 
    Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
    This file is part of gnulib.
 
 #if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS
 
 /* Get WCHAR_MIN, WCHAR_MAX.  */
 #if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS
 
 /* Get WCHAR_MIN, WCHAR_MAX.  */
-# if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX)
-   /* BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before
-      <wchar.h>.  */
-#  include <stdio.h>
-#  include <time.h>
+# if ! (defined WCHAR_MIN && defined WCHAR_MAX)
 #  include <wchar.h>
 # endif
 
 #  include <wchar.h>
 # endif
 
 #define int32_t int
 #define uint32_t unsigned int
 
 #define int32_t int
 #define uint32_t unsigned int
 
-#undef int64_t
+/* 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
 #if LONG_MAX >> 31 >> 31 == 1
+# undef int64_t
 # define int64_t long int
 # define int64_t long int
+# define GL_INT64_T
 #elif defined _MSC_VER
 #elif defined _MSC_VER
+# undef int64_t
 # define int64_t __int64
 # define int64_t __int64
+# define GL_INT64_T
 #elif @HAVE_LONG_LONG_INT@
 #elif @HAVE_LONG_LONG_INT@
+# undef int64_t
 # define int64_t long long int
 # define int64_t long long int
+# define GL_INT64_T
 #endif
 
 #endif
 
-#undef uint64_t
 #if ULONG_MAX >> 31 >> 31 >> 1 == 1
 #if ULONG_MAX >> 31 >> 31 >> 1 == 1
+# undef uint64_t
 # define uint64_t unsigned long int
 # define uint64_t unsigned long int
+# define GL_UINT64_T
 #elif defined _MSC_VER
 #elif defined _MSC_VER
+# undef uint64_t
 # define uint64_t unsigned __int64
 # define uint64_t unsigned __int64
+# define GL_UINT64_T
 #elif @HAVE_UNSIGNED_LONG_LONG_INT@
 #elif @HAVE_UNSIGNED_LONG_LONG_INT@
+# undef uint64_t
 # define uint64_t unsigned long long int
 # define uint64_t unsigned long long int
+# define GL_UINT64_T
 #endif
 
 /* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
 #endif
 
 /* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
 #define uint_least16_t uint16_t
 #define int_least32_t int32_t
 #define uint_least32_t uint32_t
 #define uint_least16_t uint16_t
 #define int_least32_t int32_t
 #define uint_least32_t uint32_t
-#ifdef int64_t
+#ifdef GL_INT64_T
 # define int_least64_t int64_t
 #endif
 # define int_least64_t int64_t
 #endif
-#ifdef uint64_t
+#ifdef GL_UINT64_T
 # define uint_least64_t uint64_t
 #endif
 
 # define uint_least64_t uint64_t
 #endif
 
 #define uint_fast16_t unsigned int_fast16_t
 #define int_fast32_t long int
 #define uint_fast32_t unsigned int_fast32_t
 #define uint_fast16_t unsigned int_fast16_t
 #define int_fast32_t long int
 #define uint_fast32_t unsigned int_fast32_t
-#ifdef int64_t
+#ifdef GL_INT64_T
 # define int_fast64_t int64_t
 #endif
 # define int_fast64_t int64_t
 #endif
-#ifdef uint64_t
+#ifdef GL_UINT64_T
 # define uint_fast64_t uint64_t
 #endif
 
 # define uint_fast64_t uint64_t
 #endif
 
 #undef intmax_t
 #if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
 # define intmax_t long long int
 #undef intmax_t
 #if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
 # define intmax_t long long int
-#elif defined int64_t
+#elif defined GL_INT64_T
 # define intmax_t int64_t
 #else
 # define intmax_t long int
 # define intmax_t int64_t
 #else
 # define intmax_t long int
 #undef uintmax_t
 #if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
 # define uintmax_t unsigned long long int
 #undef uintmax_t
 #if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
 # define uintmax_t unsigned long long int
-#elif defined int64_t
+#elif defined GL_UINT64_T
 # define uintmax_t uint64_t
 #else
 # define uintmax_t unsigned long int
 # define uintmax_t uint64_t
 #else
 # define uintmax_t unsigned long int
 
 #undef INT64_MIN
 #undef INT64_MAX
 
 #undef INT64_MIN
 #undef INT64_MAX
-#ifdef int64_t
-# define INT64_MIN  (~ INT64_MAX)
+#ifdef GL_INT64_T
+/* 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
 # define INT64_MAX  INTMAX_C (9223372036854775807)
 #endif
 
 #undef UINT64_MAX
-#ifdef uint64_t
+#ifdef GL_UINT64_T
 # define UINT64_MAX  UINTMAX_C (18446744073709551615)
 #endif
 
 # define UINT64_MAX  UINTMAX_C (18446744073709551615)
 #endif
 
 
 #undef INT_LEAST64_MIN
 #undef INT_LEAST64_MAX
 
 #undef INT_LEAST64_MIN
 #undef INT_LEAST64_MAX
-#ifdef int64_t
+#ifdef GL_INT64_T
 # define INT_LEAST64_MIN  INT64_MIN
 # define INT_LEAST64_MAX  INT64_MAX
 #endif
 
 #undef UINT_LEAST64_MAX
 # define INT_LEAST64_MIN  INT64_MIN
 # define INT_LEAST64_MAX  INT64_MAX
 #endif
 
 #undef UINT_LEAST64_MAX
-#ifdef uint64_t
+#ifdef GL_UINT64_T
 # define UINT_LEAST64_MAX  UINT64_MAX
 #endif
 
 # define UINT_LEAST64_MAX  UINT64_MAX
 #endif
 
 
 #undef INT_FAST64_MIN
 #undef INT_FAST64_MAX
 
 #undef INT_FAST64_MIN
 #undef INT_FAST64_MAX
-#ifdef int64_t
+#ifdef GL_INT64_T
 # define INT_FAST64_MIN  INT64_MIN
 # define INT_FAST64_MAX  INT64_MAX
 #endif
 
 #undef UINT_FAST64_MAX
 # define INT_FAST64_MIN  INT64_MIN
 # define INT_FAST64_MAX  INT64_MAX
 #endif
 
 #undef UINT_FAST64_MAX
-#ifdef uint64_t
+#ifdef GL_UINT64_T
 # define UINT_FAST64_MAX  UINT64_MAX
 #endif
 
 # define UINT_FAST64_MAX  UINT64_MAX
 #endif
 
 
 #undef INTMAX_MIN
 #undef INTMAX_MAX
 
 #undef INTMAX_MIN
 #undef INTMAX_MAX
-#define INTMAX_MIN  (~ INTMAX_MAX)
 #ifdef INT64_MAX
 #ifdef INT64_MAX
+# define INTMAX_MIN  INT64_MIN
 # define INTMAX_MAX  INT64_MAX
 #else
 # define INTMAX_MAX  INT64_MAX
 #else
+# define INTMAX_MIN  INT32_MIN
 # define INTMAX_MAX  INT32_MAX
 #endif
 
 # define INTMAX_MAX  INT32_MAX
 #endif
 
 #undef INTMAX_C
 #if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
 # define INTMAX_C(x)   x##LL
 #undef INTMAX_C
 #if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
 # define INTMAX_C(x)   x##LL
-#elif defined int64_t
+#elif defined GL_INT64_T
 # define INTMAX_C(x)   INT64_C(x)
 #else
 # define INTMAX_C(x)   x##L
 # define INTMAX_C(x)   INT64_C(x)
 #else
 # define INTMAX_C(x)   x##L
 #undef UINTMAX_C
 #if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
 # define UINTMAX_C(x)  x##ULL
 #undef UINTMAX_C
 #if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
 # define UINTMAX_C(x)  x##ULL
-#elif defined uint64_t
+#elif defined GL_UINT64_T
 # define UINTMAX_C(x)  UINT64_C(x)
 #else
 # define UINTMAX_C(x)  x##UL
 # define UINTMAX_C(x)  UINT64_C(x)
 #else
 # define UINTMAX_C(x)  x##UL