118334Speter#ifndef _LIMITS_H___
218334Speter#define _LIMITS_H___
318334Speter
418334Speter/* Number of bits in a `char'.  */
518334Speter#undef CHAR_BIT
6117395Skan#define CHAR_BIT __CHAR_BIT__
718334Speter
818334Speter/* Maximum length of a multibyte character.  */
918334Speter#ifndef MB_LEN_MAX
1018334Speter#define MB_LEN_MAX 1
1118334Speter#endif
1218334Speter
1318334Speter/* Minimum and maximum values a `signed char' can hold.  */
1418334Speter#undef SCHAR_MIN
15117395Skan#define SCHAR_MIN (-SCHAR_MAX - 1)
1618334Speter#undef SCHAR_MAX
17117395Skan#define SCHAR_MAX __SCHAR_MAX__
1818334Speter
1918334Speter/* Maximum value an `unsigned char' can hold.  (Minimum is 0).  */
2018334Speter#undef UCHAR_MAX
21117395Skan#if __SCHAR_MAX__ == __INT_MAX__
22117395Skan# define UCHAR_MAX (SCHAR_MAX * 2U + 1U)
23117395Skan#else
24117395Skan# define UCHAR_MAX (SCHAR_MAX * 2 + 1)
25117395Skan#endif
2618334Speter
2718334Speter/* Minimum and maximum values a `char' can hold.  */
2818334Speter#ifdef __CHAR_UNSIGNED__
29117395Skan# undef CHAR_MIN
30117395Skan# if __SCHAR_MAX__ == __INT_MAX__
31117395Skan#  define CHAR_MIN 0U
32117395Skan# else
33117395Skan#  define CHAR_MIN 0
34117395Skan# endif
35117395Skan# undef CHAR_MAX
36117395Skan# define CHAR_MAX UCHAR_MAX
3718334Speter#else
38117395Skan# undef CHAR_MIN
39117395Skan# define CHAR_MIN SCHAR_MIN
40117395Skan# undef CHAR_MAX
41117395Skan# define CHAR_MAX SCHAR_MAX
4218334Speter#endif
4318334Speter
4418334Speter/* Minimum and maximum values a `signed short int' can hold.  */
4518334Speter#undef SHRT_MIN
46117395Skan#define SHRT_MIN (-SHRT_MAX - 1)
4718334Speter#undef SHRT_MAX
4890075Sobrien#define SHRT_MAX __SHRT_MAX__
4918334Speter
5090075Sobrien/* Maximum value an `unsigned short int' can hold.  (Minimum is 0).  */
5190075Sobrien#undef USHRT_MAX
5290075Sobrien#if __SHRT_MAX__ == __INT_MAX__
53117395Skan# define USHRT_MAX (SHRT_MAX * 2U + 1U)
5490075Sobrien#else
55117395Skan# define USHRT_MAX (SHRT_MAX * 2 + 1)
5690075Sobrien#endif
5790075Sobrien
58117395Skan/* Minimum and maximum values a `signed int' can hold.  */
59117395Skan#undef INT_MIN
60117395Skan#define INT_MIN (-INT_MAX - 1)
61117395Skan#undef INT_MAX
62117395Skan#define INT_MAX __INT_MAX__
63117395Skan
6418334Speter/* Maximum value an `unsigned int' can hold.  (Minimum is 0).  */
6518334Speter#undef UINT_MAX
66117395Skan#define UINT_MAX (INT_MAX * 2U + 1U)
6718334Speter
6818334Speter/* Minimum and maximum values a `signed long int' can hold.
6918334Speter   (Same as `int').  */
7018334Speter#undef LONG_MIN
71117395Skan#define LONG_MIN (-LONG_MAX - 1L)
7218334Speter#undef LONG_MAX
7318334Speter#define LONG_MAX __LONG_MAX__
7418334Speter
7518334Speter/* Maximum value an `unsigned long int' can hold.  (Minimum is 0).  */
7618334Speter#undef ULONG_MAX
77117395Skan#define ULONG_MAX (LONG_MAX * 2UL + 1UL)
7818334Speter
7990075Sobrien#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
8090075Sobrien/* Minimum and maximum values a `signed long long int' can hold.  */
81117395Skan# undef LLONG_MIN
82117395Skan# define LLONG_MIN (-LLONG_MAX - 1LL)
83117395Skan# undef LLONG_MAX
84117395Skan# define LLONG_MAX __LONG_LONG_MAX__
8590075Sobrien
8690075Sobrien/* Maximum value an `unsigned long long int' can hold.  (Minimum is 0).  */
87117395Skan# undef ULLONG_MAX
88117395Skan# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
8990075Sobrien#endif
9090075Sobrien
9190075Sobrien#if defined (__GNU_LIBRARY__) ? defined (__USE_GNU) : !defined (__STRICT_ANSI__)
9290075Sobrien/* Minimum and maximum values a `signed long long int' can hold.  */
93117395Skan# undef LONG_LONG_MIN
94117395Skan# define LONG_LONG_MIN (-LONG_LONG_MAX - 1LL)
95117395Skan# undef LONG_LONG_MAX
96117395Skan# define LONG_LONG_MAX __LONG_LONG_MAX__
9718334Speter
9818334Speter/* Maximum value an `unsigned long long int' can hold.  (Minimum is 0).  */
99117395Skan# undef ULONG_LONG_MAX
100117395Skan# define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1ULL)
10118334Speter#endif
10218334Speter
10318334Speter#endif /* _LIMITS_H___ */
104