/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _SYS_INT_LIMITS_H #define _SYS_INT_LIMITS_H #pragma ident "%Z%%M% %I% %E% SMI" /* * This file, , is part of the Sun Microsystems implementation * of as defined in the ISO C standard, ISO/IEC 9899:1999 * Programming language - C. * * Programs/Modules should not directly include this file. Access to the * types defined in this file should be through the inclusion of one of the * following files: * * This nested inclusion is disabled for strictly * ANSI-C conforming compilations. The *_MIN * definitions are not visible to POSIX or XPG * conforming applications (due to what may be * a bug in the specification - this is under * investigation) * * Provides the Kernel and Driver appropriate * components of . * * For use by applications. * * See these files for more details. */ #include #ifdef __cplusplus extern "C" { #endif /* * Limits * * The following define the limits for the types defined in . * * INTMAX_MIN (minimum value of the largest supported signed integer type), * INTMAX_MAX (maximum value of the largest supported signed integer type), * and UINTMAX_MAX (maximum value of the largest supported unsigned integer * type) can be set to implementation defined limits. * * NOTE : A programmer can test to see whether an implementation supports * a particular size of integer by testing if the macro that gives the * maximum for that datatype is defined. For example, if #ifdef UINT64_MAX * tests false, the implementation does not support unsigned 64 bit integers. * * The type of these macros is intentionally unspecified. * * The types int8_t, int_least8_t, and int_fast8_t are not defined for ISAs * where the ABI specifies "char" as unsigned when the translation mode is * not ANSI-C. */ #if defined(_CHAR_IS_SIGNED) || defined(__STDC__) #define INT8_MAX (127) #endif #define INT16_MAX (32767) #define INT32_MAX (2147483647) #if defined(_LP64) #define INT64_MAX (9223372036854775807L) #elif defined(_LONGLONG_TYPE) #define INT64_MAX (9223372036854775807LL) #endif #define UINT8_MAX (255U) #define UINT16_MAX (65535U) #define UINT32_MAX (4294967295U) #if defined(_LP64) #define UINT64_MAX (18446744073709551615UL) #elif defined(_LONGLONG_TYPE) #define UINT64_MAX (18446744073709551615ULL) #endif #ifdef INT64_MAX #define INTMAX_MAX INT64_MAX #else #define INTMAX_MAX INT32_MAX #endif #ifdef UINT64_MAX #define UINTMAX_MAX UINT64_MAX #else #define UINTMAX_MAX UINT32_MAX #endif #if defined(_CHAR_IS_SIGNED) || defined(__STDC__) #define INT_LEAST8_MAX INT8_MAX #endif #define INT_LEAST16_MAX INT16_MAX #define INT_LEAST32_MAX INT32_MAX #ifdef INT64_MAX #define INT_LEAST64_MAX INT64_MAX #endif #define UINT_LEAST8_MAX UINT8_MAX #define UINT_LEAST16_MAX UINT16_MAX #define UINT_LEAST32_MAX UINT32_MAX #ifdef UINT64_MAX #define UINT_LEAST64_MAX UINT64_MAX #endif #if defined(_CHAR_IS_SIGNED) || defined(__STDC__) #define INT_FAST8_MAX INT8_MAX #endif #define INT_FAST16_MAX INT16_MAX #define INT_FAST32_MAX INT32_MAX #ifdef INT64_MAX #define INT_FAST64_MAX INT64_MAX #endif #define UINT_FAST8_MAX UINT8_MAX #define UINT_FAST16_MAX UINT16_MAX #define UINT_FAST32_MAX UINT32_MAX #ifdef UINT64_MAX #define UINT_FAST64_MAX UINT64_MAX #endif /* * The following 2 macros are provided for testing whether the types * intptr_t and uintptr_t (integers large enough to hold a void *) are * defined in this header. They are needed in case the architecture can't * represent a pointer in any standard integral type. */ #if defined(_LP64) || defined(_I32LPx) #define INTPTR_MAX INT64_MAX #define UINTPTR_MAX UINT64_MAX #else #define INTPTR_MAX INT32_MAX #define UINTPTR_MAX UINT32_MAX #endif /* Maximum limits of ptrdiff_t defined in */ #if defined(_LP64) || defined(_I32LPx) #define PTRDIFF_MAX 9223372036854775807L #else #define PTRDIFF_MAX 2147483647 #endif /* * Maximum value of a "size_t". SIZE_MAX was previously defined * in , however, the standards specify it be defined * in . The headers includes this header as * does . The value of SIZE_MAX should not deviate * from the value of ULONG_MAX defined . */ #if defined(_LP64) #define SIZE_MAX 18446744073709551615UL #else #define SIZE_MAX 4294967295UL #endif /* Maximum limit of sig_atomic_t defined in */ #ifndef SIG_ATOMIC_MAX #define SIG_ATOMIC_MAX 2147483647 #endif /* * Maximum limit of wchar_t. The WCHAR_* macros are also * defined in , but inclusion of that header * will break ISO/IEC C namespace. */ #ifndef WCHAR_MAX #define WCHAR_MAX 2147483647 #endif /* Maximum limit of wint_t */ #ifndef WINT_MAX #define WINT_MAX 2147483647 #endif /* * It is probably a bug in the POSIX specification (IEEE-1003.1-1990) that * when including that the suffix _MAX is reserved but not the * suffix _MIN. However, until that issue is resolved.... */ #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || defined(_XPG6) #if defined(_CHAR_IS_SIGNED) || defined(__STDC__) #define INT8_MIN (-128) #endif #define INT16_MIN (-32767-1) #define INT32_MIN (-2147483647-1) #if defined(_LP64) #define INT64_MIN (-9223372036854775807L-1) #elif defined(_LONGLONG_TYPE) #define INT64_MIN (-9223372036854775807LL-1) #endif #ifdef INT64_MIN #define INTMAX_MIN INT64_MIN #else #define INTMAX_MIN INT32_MIN #endif #if defined(_CHAR_IS_SIGNED) || defined(__STDC__) #define INT_LEAST8_MIN INT8_MIN #endif #define INT_LEAST16_MIN INT16_MIN #define INT_LEAST32_MIN INT32_MIN #ifdef INT64_MIN #define INT_LEAST64_MIN INT64_MIN #endif #if defined(_CHAR_IS_SIGNED) || defined(__STDC__) #define INT_FAST8_MIN INT8_MIN #endif #define INT_FAST16_MIN INT16_MIN #define INT_FAST32_MIN INT32_MIN #ifdef INT64_MIN #define INT_FAST64_MIN INT64_MIN #endif /* Minimum value of a pointer-holding signed integer type */ #if defined(_LP64) || defined(_I32LPx) #define INTPTR_MIN INT64_MIN #else #define INTPTR_MIN INT32_MIN #endif /* Minimum limits of ptrdiff_t defined in */ #if defined(_LP64) || defined(_I32LPx) #define PTRDIFF_MIN (-9223372036854775807L-1L) #else #define PTRDIFF_MIN (-2147483647-1) #endif /* Minimum limit of sig_atomic_t defined in */ #ifndef SIG_ATOMIC_MIN #define SIG_ATOMIC_MIN (-2147483647-1) #endif /* * Minimum limit of wchar_t. The WCHAR_* macros are also * defined in , but inclusion of that header * will break ISO/IEC C namespace. */ #ifndef WCHAR_MIN #define WCHAR_MIN (-2147483647-1) #endif /* Minimum limit of wint_t */ #ifndef WINT_MIN #define WINT_MIN (-2147483647-1) #endif #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) ... */ #ifdef __cplusplus } #endif #endif /* _SYS_INT_LIMITS_H */