master
  1/* Copyright (C) 1991-2025 Free Software Foundation, Inc.
  2   This file is part of the GNU C Library.
  3
  4   The GNU C Library is free software; you can redistribute it and/or
  5   modify it under the terms of the GNU Lesser General Public
  6   License as published by the Free Software Foundation; either
  7   version 2.1 of the License, or (at your option) any later version.
  8
  9   The GNU C Library is distributed in the hope that it will be useful,
 10   but WITHOUT ANY WARRANTY; without even the implied warranty of
 11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 12   Lesser General Public License for more details.
 13
 14   You should have received a copy of the GNU Lesser General Public
 15   License along with the GNU C Library; if not, see
 16   <https://www.gnu.org/licenses/>.  */
 17
 18/*
 19 *	ISO C99 Standard: 7.10/5.2.4.2.1 Sizes of integer types	<limits.h>
 20 */
 21
 22#ifndef _LIBC_LIMITS_H_
 23#define _LIBC_LIMITS_H_	1
 24
 25#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
 26#include <bits/libc-header-start.h>
 27
 28
 29/* Maximum length of any multibyte character in any locale.
 30   We define this value here since the gcc header does not define
 31   the correct value.  */
 32#define MB_LEN_MAX	16
 33
 34
 35/* If we are not using GNU CC we have to define all the symbols ourself.
 36   Otherwise use gcc's definitions (see below).  */
 37#if !defined __GNUC__ || __GNUC__ < 2
 38
 39/* We only protect from multiple inclusion here, because all the other
 40   #include's protect themselves, and in GCC 2 we may #include_next through
 41   multiple copies of this file before we get to GCC's.  */
 42# ifndef _LIMITS_H
 43#  define _LIMITS_H	1
 44
 45#include <bits/wordsize.h>
 46
 47/* We don't have #include_next.
 48   Define ANSI <limits.h> for standard 32-bit words.  */
 49
 50/* These assume 8-bit `char's, 16-bit `short int's,
 51   and 32-bit `int's and `long int's.  */
 52
 53/* Number of bits in a `char'.	*/
 54#  define CHAR_BIT	8
 55
 56/* Minimum and maximum values a `signed char' can hold.  */
 57#  define SCHAR_MIN	(-128)
 58#  define SCHAR_MAX	127
 59
 60/* Maximum value an `unsigned char' can hold.  (Minimum is 0.)  */
 61#  define UCHAR_MAX	255
 62
 63/* Minimum and maximum values a `char' can hold.  */
 64#  ifdef __CHAR_UNSIGNED__
 65#   define CHAR_MIN	0
 66#   define CHAR_MAX	UCHAR_MAX
 67#  else
 68#   define CHAR_MIN	SCHAR_MIN
 69#   define CHAR_MAX	SCHAR_MAX
 70#  endif
 71
 72/* Minimum and maximum values a `signed short int' can hold.  */
 73#  define SHRT_MIN	(-32768)
 74#  define SHRT_MAX	32767
 75
 76/* Maximum value an `unsigned short int' can hold.  (Minimum is 0.)  */
 77#  define USHRT_MAX	65535
 78
 79/* Minimum and maximum values a `signed int' can hold.  */
 80#  define INT_MIN	(-INT_MAX - 1)
 81#  define INT_MAX	2147483647
 82
 83/* Maximum value an `unsigned int' can hold.  (Minimum is 0.)  */
 84#  define UINT_MAX	4294967295U
 85
 86/* Minimum and maximum values a `signed long int' can hold.  */
 87#  if __WORDSIZE == 64
 88#   define LONG_MAX	9223372036854775807L
 89#  else
 90#   define LONG_MAX	2147483647L
 91#  endif
 92#  define LONG_MIN	(-LONG_MAX - 1L)
 93
 94/* Maximum value an `unsigned long int' can hold.  (Minimum is 0.)  */
 95#  if __WORDSIZE == 64
 96#   define ULONG_MAX	18446744073709551615UL
 97#  else
 98#   define ULONG_MAX	4294967295UL
 99#  endif
100
101#  ifdef __USE_ISOC99
102
103/* Minimum and maximum values a `signed long long int' can hold.  */
104#   define LLONG_MAX	9223372036854775807LL
105#   define LLONG_MIN	(-LLONG_MAX - 1LL)
106
107/* Maximum value an `unsigned long long int' can hold.  (Minimum is 0.)  */
108#   define ULLONG_MAX	18446744073709551615ULL
109
110#  endif /* ISO C99 */
111
112# endif	/* limits.h  */
113#endif	/* GCC 2.  */
114
115#endif	/* !_LIBC_LIMITS_H_ */
116
117 /* Get the compiler's limits.h, which defines almost all the ISO constants.
118
119    We put this #include_next outside the double inclusion check because
120    it should be possible to include this file more than once and still get
121    the definitions from gcc's header.  */
122#if defined __GNUC__ && !defined _GCC_LIMITS_H_
123/* `_GCC_LIMITS_H_' is what GCC's file defines.  */
124# include_next <limits.h>
125#endif
126
127/* The <limits.h> files in some gcc versions don't define LLONG_MIN,
128   LLONG_MAX, and ULLONG_MAX.  Instead only the values gcc defined for
129   ages are available.  */
130#if defined __USE_ISOC99 && defined __GNUC__
131# ifndef LLONG_MIN
132#  define LLONG_MIN	(-LLONG_MAX-1)
133# endif
134# ifndef LLONG_MAX
135#  define LLONG_MAX	__LONG_LONG_MAX__
136# endif
137# ifndef ULLONG_MAX
138#  define ULLONG_MAX	(LLONG_MAX * 2ULL + 1)
139# endif
140#endif
141
142/* The integer width macros are not defined by GCC's <limits.h> before
143   GCC 7, or if _GNU_SOURCE rather than
144   __STDC_WANT_IEC_60559_BFP_EXT__ is used to enable this feature.  */
145#if __GLIBC_USE (IEC_60559_BFP_EXT_C23)
146# ifndef CHAR_WIDTH
147#  define CHAR_WIDTH 8
148# endif
149# ifndef SCHAR_WIDTH
150#  define SCHAR_WIDTH 8
151# endif
152# ifndef UCHAR_WIDTH
153#  define UCHAR_WIDTH 8
154# endif
155# ifndef SHRT_WIDTH
156#  define SHRT_WIDTH 16
157# endif
158# ifndef USHRT_WIDTH
159#  define USHRT_WIDTH 16
160# endif
161# ifndef INT_WIDTH
162#  define INT_WIDTH 32
163# endif
164# ifndef UINT_WIDTH
165#  define UINT_WIDTH 32
166# endif
167# ifndef LONG_WIDTH
168#  define LONG_WIDTH __WORDSIZE
169# endif
170# ifndef ULONG_WIDTH
171#  define ULONG_WIDTH __WORDSIZE
172# endif
173# ifndef LLONG_WIDTH
174#  define LLONG_WIDTH 64
175# endif
176# ifndef ULLONG_WIDTH
177#  define ULLONG_WIDTH 64
178# endif
179#endif /* Use IEC_60559_BFP_EXT.  */
180
181/* The macros for _Bool are not defined by GCC's <limits.h> before GCC
182   11, or if _GNU_SOURCE is defined rather than enabling C23 support
183   with -std.  */
184#if __GLIBC_USE (ISOC23)
185# ifndef BOOL_MAX
186#  define BOOL_MAX 1
187# endif
188# ifndef BOOL_WIDTH
189#  define BOOL_WIDTH 1
190# endif
191#endif
192
193#ifdef	__USE_POSIX
194/* POSIX adds things to <limits.h>.  */
195# include <bits/posix1_lim.h>
196#endif
197
198#ifdef	__USE_POSIX2
199# include <bits/posix2_lim.h>
200#endif
201
202#ifdef	__USE_XOPEN
203# include <bits/xopen_lim.h>
204#endif