xref: /xnu-11417.140.69/bsd/arm/limits.h (revision 43a90889846e00bfb5cf1d255cdc0a701a1e05a4)
1*43a90889SApple OSS Distributions /*
2*43a90889SApple OSS Distributions  * Copyright (c) 2000-2007 Apple Inc. All rights reserved.
3*43a90889SApple OSS Distributions  */
4*43a90889SApple OSS Distributions /*
5*43a90889SApple OSS Distributions  * Copyright (c) 1988, 1993
6*43a90889SApple OSS Distributions  *	The Regents of the University of California.  All rights reserved.
7*43a90889SApple OSS Distributions  *
8*43a90889SApple OSS Distributions  * Redistribution and use in source and binary forms, with or without
9*43a90889SApple OSS Distributions  * modification, are permitted provided that the following conditions
10*43a90889SApple OSS Distributions  * are met:
11*43a90889SApple OSS Distributions  * 1. Redistributions of source code must retain the above copyright
12*43a90889SApple OSS Distributions  *    notice, this list of conditions and the following disclaimer.
13*43a90889SApple OSS Distributions  * 2. Redistributions in binary form must reproduce the above copyright
14*43a90889SApple OSS Distributions  *    notice, this list of conditions and the following disclaimer in the
15*43a90889SApple OSS Distributions  *    documentation and/or other materials provided with the distribution.
16*43a90889SApple OSS Distributions  * 3. All advertising materials mentioning features or use of this software
17*43a90889SApple OSS Distributions  *    must display the following acknowledgement:
18*43a90889SApple OSS Distributions  *	This product includes software developed by the University of
19*43a90889SApple OSS Distributions  *	California, Berkeley and its contributors.
20*43a90889SApple OSS Distributions  * 4. Neither the name of the University nor the names of its contributors
21*43a90889SApple OSS Distributions  *    may be used to endorse or promote products derived from this software
22*43a90889SApple OSS Distributions  *    without specific prior written permission.
23*43a90889SApple OSS Distributions  *
24*43a90889SApple OSS Distributions  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25*43a90889SApple OSS Distributions  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26*43a90889SApple OSS Distributions  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27*43a90889SApple OSS Distributions  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28*43a90889SApple OSS Distributions  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29*43a90889SApple OSS Distributions  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30*43a90889SApple OSS Distributions  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31*43a90889SApple OSS Distributions  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32*43a90889SApple OSS Distributions  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33*43a90889SApple OSS Distributions  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34*43a90889SApple OSS Distributions  * SUCH DAMAGE.
35*43a90889SApple OSS Distributions  *
36*43a90889SApple OSS Distributions  *	@(#)limits.h	8.3 (Berkeley) 1/4/94
37*43a90889SApple OSS Distributions  */
38*43a90889SApple OSS Distributions 
39*43a90889SApple OSS Distributions #ifndef _ARM_LIMITS_H_
40*43a90889SApple OSS Distributions #define _ARM_LIMITS_H_
41*43a90889SApple OSS Distributions 
42*43a90889SApple OSS Distributions #if defined (__arm__) || defined (__arm64__)
43*43a90889SApple OSS Distributions 
44*43a90889SApple OSS Distributions #include <sys/cdefs.h>
45*43a90889SApple OSS Distributions #include <arm/_limits.h>
46*43a90889SApple OSS Distributions 
47*43a90889SApple OSS Distributions #if defined(KERNEL)
48*43a90889SApple OSS Distributions #ifdef XNU_KERNEL_PRIVATE
49*43a90889SApple OSS Distributions /*
50*43a90889SApple OSS Distributions  * Xcode doesn't currently set up search paths correctly for Kernel extensions,
51*43a90889SApple OSS Distributions  * so the clang headers are not seen in the correct order to use their limits.
52*43a90889SApple OSS Distributions  */
53*43a90889SApple OSS Distributions #endif
54*43a90889SApple OSS Distributions #define USE_CLANG_LIMITS 0
55*43a90889SApple OSS Distributions #else
56*43a90889SApple OSS Distributions #if defined(__has_feature) && __has_feature(modules)
57*43a90889SApple OSS Distributions #define USE_CLANG_LIMITS 1
58*43a90889SApple OSS Distributions #else
59*43a90889SApple OSS Distributions #define USE_CLANG_LIMITS 0
60*43a90889SApple OSS Distributions #endif
61*43a90889SApple OSS Distributions #endif
62*43a90889SApple OSS Distributions 
63*43a90889SApple OSS Distributions #undef  MB_LEN_MAX
64*43a90889SApple OSS Distributions #define MB_LEN_MAX      6               /* Allow 31 bit UTF2 */
65*43a90889SApple OSS Distributions 
66*43a90889SApple OSS Distributions #if !defined(_ANSI_SOURCE) && (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE))
67*43a90889SApple OSS Distributions #define CLK_TCK         __DARWIN_CLK_TCK        /* ticks per second */
68*43a90889SApple OSS Distributions #endif /* !_ANSI_SOURCE && (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
69*43a90889SApple OSS Distributions 
70*43a90889SApple OSS Distributions #if (defined(__has_include) && __has_include(<__xnu_libcxx_sentinel.h>))
71*43a90889SApple OSS Distributions 
72*43a90889SApple OSS Distributions #if !__has_include_next(<limits.h>)
73*43a90889SApple OSS Distributions #error Do not build with -nostdinc (use GCC_USE_STANDARD_INCLUDE_SEARCHING=NO)
74*43a90889SApple OSS Distributions #else
75*43a90889SApple OSS Distributions #include_next <limits.h>
76*43a90889SApple OSS Distributions #endif /* __has_include_next */
77*43a90889SApple OSS Distributions 
78*43a90889SApple OSS Distributions #elif !USE_CLANG_LIMITS
79*43a90889SApple OSS Distributions 
80*43a90889SApple OSS Distributions #define CHAR_BIT        8               /* number of bits in a char */
81*43a90889SApple OSS Distributions 
82*43a90889SApple OSS Distributions /*
83*43a90889SApple OSS Distributions  * According to ANSI (section 2.2.4.2), the values below must be usable by
84*43a90889SApple OSS Distributions  * #if preprocessing directives.  Additionally, the expression must have the
85*43a90889SApple OSS Distributions  * same type as would an expression that is an object of the corresponding
86*43a90889SApple OSS Distributions  * type converted according to the integral promotions.  The subtraction for
87*43a90889SApple OSS Distributions  * INT_MIN and LONG_MIN is so the value is not unsigned; 2147483648 is an
88*43a90889SApple OSS Distributions  * unsigned int for 32-bit two's complement ANSI compilers (section 3.1.3.2).
89*43a90889SApple OSS Distributions  * These numbers work for pcc as well.  The UINT_MAX and ULONG_MAX values
90*43a90889SApple OSS Distributions  * are written as hex so that GCC will be quiet about large integer constants.
91*43a90889SApple OSS Distributions  */
92*43a90889SApple OSS Distributions #define SCHAR_MAX       127             /* min value for a signed char */
93*43a90889SApple OSS Distributions #define SCHAR_MIN       (-128)          /* max value for a signed char */
94*43a90889SApple OSS Distributions 
95*43a90889SApple OSS Distributions #define UCHAR_MAX       255             /* max value for an unsigned char */
96*43a90889SApple OSS Distributions #define CHAR_MAX        127             /* max value for a char */
97*43a90889SApple OSS Distributions #define CHAR_MIN        (-128)          /* min value for a char */
98*43a90889SApple OSS Distributions 
99*43a90889SApple OSS Distributions #define USHRT_MAX       65535           /* max value for an unsigned short */
100*43a90889SApple OSS Distributions #define SHRT_MAX        32767           /* max value for a short */
101*43a90889SApple OSS Distributions #define SHRT_MIN        (-32768)        /* min value for a short */
102*43a90889SApple OSS Distributions 
103*43a90889SApple OSS Distributions #define UINT_MAX        0xffffffff      /* max value for an unsigned int */
104*43a90889SApple OSS Distributions #define INT_MAX         2147483647      /* max value for an int */
105*43a90889SApple OSS Distributions #define INT_MIN         (-2147483647-1) /* min value for an int */
106*43a90889SApple OSS Distributions 
107*43a90889SApple OSS Distributions #ifdef __LP64__
108*43a90889SApple OSS Distributions #define ULONG_MAX       0xffffffffffffffffUL    /* max unsigned long */
109*43a90889SApple OSS Distributions #define LONG_MAX        0x7fffffffffffffffL     /* max signed long */
110*43a90889SApple OSS Distributions #define LONG_MIN        (-0x7fffffffffffffffL-1) /* min signed long */
111*43a90889SApple OSS Distributions #else /* !__LP64__ */
112*43a90889SApple OSS Distributions #define ULONG_MAX       0xffffffffUL    /* max unsigned long */
113*43a90889SApple OSS Distributions #define LONG_MAX        2147483647L     /* max signed long */
114*43a90889SApple OSS Distributions #define LONG_MIN        (-2147483647L-1) /* min signed long */
115*43a90889SApple OSS Distributions #endif /* __LP64__ */
116*43a90889SApple OSS Distributions 
117*43a90889SApple OSS Distributions #define ULLONG_MAX      0xffffffffffffffffULL   /* max unsigned long long */
118*43a90889SApple OSS Distributions #define LLONG_MAX       0x7fffffffffffffffLL    /* max signed long long */
119*43a90889SApple OSS Distributions #define LLONG_MIN       (-0x7fffffffffffffffLL-1) /* min signed long long */
120*43a90889SApple OSS Distributions 
121*43a90889SApple OSS Distributions #endif /* !USE_CLANG_LIMITS */
122*43a90889SApple OSS Distributions 
123*43a90889SApple OSS Distributions #if !defined(_ANSI_SOURCE)
124*43a90889SApple OSS Distributions #ifdef __LP64__
125*43a90889SApple OSS Distributions #define LONG_BIT        64
126*43a90889SApple OSS Distributions #else /* !__LP64__ */
127*43a90889SApple OSS Distributions #define LONG_BIT        32
128*43a90889SApple OSS Distributions #endif /* __LP64__ */
129*43a90889SApple OSS Distributions #define SSIZE_MAX       LONG_MAX        /* max value for a ssize_t */
130*43a90889SApple OSS Distributions #define WORD_BIT        32
131*43a90889SApple OSS Distributions 
132*43a90889SApple OSS Distributions #if (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || defined(_DARWIN_C_SOURCE)
133*43a90889SApple OSS Distributions #define SIZE_T_MAX      ULONG_MAX       /* max value for a size_t */
134*43a90889SApple OSS Distributions 
135*43a90889SApple OSS Distributions #define UQUAD_MAX       ULLONG_MAX
136*43a90889SApple OSS Distributions #define QUAD_MAX        LLONG_MAX
137*43a90889SApple OSS Distributions #define QUAD_MIN        LLONG_MIN
138*43a90889SApple OSS Distributions 
139*43a90889SApple OSS Distributions #endif /* (!_POSIX_C_SOURCE && !_XOPEN_SOURCE) || _DARWIN_C_SOURCE */
140*43a90889SApple OSS Distributions #endif /* !_ANSI_SOURCE */
141*43a90889SApple OSS Distributions 
142*43a90889SApple OSS Distributions #undef USE_CLANG_LIMITS
143*43a90889SApple OSS Distributions 
144*43a90889SApple OSS Distributions #endif /* defined (__arm__) || defined (__arm64__) */
145*43a90889SApple OSS Distributions 
146*43a90889SApple OSS Distributions #endif /* _ARM_LIMITS_H_ */
147