stdint.h revision e6dddefe0a0a7b4be93b2692b2e956852fa8cb9c
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * IPRT - stdint.h wrapper (for backlevel compilers like MSC).
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * Copyright (C) 2009 Sun Microsystems, Inc.
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * available from http://www.virtualbox.org. This file is free software;
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * you can redistribute it and/or modify it under the terms of the GNU
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * General Public License (GPL) as published by the Free Software
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * The contents of this file may alternatively be used under the terms
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * of the Common Development and Distribution License Version 1.0
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * VirtualBox OSE distribution, in which case the provisions of the
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * CDDL are applicable instead of those of the GPL.
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * You may elect to license modified versions of this file under the
d5bf937d132098565e18a0d1fc408fb777c5e5b6vboxsync * terms and conditions of either the GPL or the CDDL or both.
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync * additional information or have any questions.
9986f9bfdcb0055fdb79bbd158f4912ccc3a5751vboxsync * Use the stdint.h on systems that have one.
9986f9bfdcb0055fdb79bbd158f4912ccc3a5751vboxsync#if !(defined(RT_OS_LINUX) && defined(__KERNEL__)) \
9986f9bfdcb0055fdb79bbd158f4912ccc3a5751vboxsync && !defined(_MSC_VER) \
9986f9bfdcb0055fdb79bbd158f4912ccc3a5751vboxsync && !defined(__IBMC__) \
9986f9bfdcb0055fdb79bbd158f4912ccc3a5751vboxsync && !defined(__IBMCPP__) \
9986f9bfdcb0055fdb79bbd158f4912ccc3a5751vboxsync && !defined(IPRT_NO_CRT) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if defined(RT_OS_DARWIN) && defined(KERNEL) && defined(RT_ARCH_AMD64)
fe06619ae576367ff3568e6abd99fb8ad28cc73avboxsync * Kludge to fix the incorrect 32-bit constant macros in
f7c0f913c4c22ee18059ff97055442566d0f14a1vboxsync * Kernel.framework/Headers/stdin.h. uint32_t and int32_t are
9986f9bfdcb0055fdb79bbd158f4912ccc3a5751vboxsync * int not long as these macros use, which is significant when
9986f9bfdcb0055fdb79bbd158f4912ccc3a5751vboxsync * targeting AMD64. (10a222)
62c8fef246519d59ee7ad41dd71de75b96b3552bvboxsync# endif /* 64-bit darwin kludge. */
da0cd3ee12f6b9c0e86f2aea3213cba6869b6647vboxsync#else /* No system stdint.h */
da0cd3ee12f6b9c0e86f2aea3213cba6869b6647vboxsync * Define the types we use.
da0cd3ee12f6b9c0e86f2aea3213cba6869b6647vboxsync * The linux kernel defines all these in linux/types.h, so skip it.
da0cd3ee12f6b9c0e86f2aea3213cba6869b6647vboxsync# if !(defined(RT_OS_LINUX) && defined(__KERNEL__)) \
da0cd3ee12f6b9c0e86f2aea3213cba6869b6647vboxsync || defined(IPRT_NO_CRT) \
da0cd3ee12f6b9c0e86f2aea3213cba6869b6647vboxsync /* Simplify the [u]int64_t type detection mess. */
62c8fef246519d59ee7ad41dd71de75b96b3552bvboxsync# if __IBMCPP__ < 350 && (defined(__WINDOWS__) || defined(_AIX) || defined(__OS2__))
62c8fef246519d59ee7ad41dd71de75b96b3552bvboxsync# if __IBMC__ < 350 && (defined(__WINDOWS__) || defined(_AIX) || defined(__OS2__))
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync /* x-bit types */
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_INT8_T_DECLARED) && !defined(_INT8_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsynctypedef signed char int8_t;
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_UINT8_T_DECLARED) && !defined(_UINT8_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsynctypedef unsigned char uint8_t;
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_INT16_T_DECLARED) && !defined(_INT16_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsynctypedef signed short int16_t;
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_UINT16_T_DECLARED) && !defined(_UINT16_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsynctypedef unsigned short uint16_t;
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_INT32_T_DECLARED) && !defined(_INT32_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsynctypedef signed int int32_t;
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_UINT32_T_DECLARED) && !defined(_UINT32_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsynctypedef unsigned int uint32_t;
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if defined(_MSC_VER)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_INT64_T_DECLARED) && !defined(_INT64_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_UINT64_T_DECLARED) && !defined(_UINT64_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# elif defined(IPRT_STDINT_USE_STRUCT_FOR_64_BIT_TYPES)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_INT64_T_DECLARED) && !defined(_INT64_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsynctypedef struct { uint32_t lo; int32_t hi; } int64_t;
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_UINT64_T_DECLARED) && !defined(_UINT64_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsynctypedef struct { uint32_t lo; uint32_t hi; } uint64_t;
32c16cab49ef1ab1aea3b3340fbc133b99ee8b20vboxsync# else /* Use long long for 64-bit types */
32c16cab49ef1ab1aea3b3340fbc133b99ee8b20vboxsync# if !defined(_INT64_T_DECLARED) && !defined(_INT64_T)
32c16cab49ef1ab1aea3b3340fbc133b99ee8b20vboxsynctypedef signed long long int64_t;
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_UINT64_T_DECLARED) && !defined(_UINT64_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsynctypedef unsigned long long uint64_t;
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync /* max integer types */
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_INTMAX_T_DECLARED) && !defined(_INTMAX_T)
32c16cab49ef1ab1aea3b3340fbc133b99ee8b20vboxsync# if !defined(_UINTMAX_T_DECLARED) && !defined(_UINTMAX_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# error "PORTME: Add architecture. Don't forget to check the [U]INTx_C() and [U]INTMAX_MIN/MAX macros."
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# endif /* !linux kernel or stuff */
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync /* pointer <-> integer types */
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || defined(RT_OS_LINUX) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_INTPTR_T_DECLARED) && !defined(_INTPTR_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsynctypedef signed long intptr_t;
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_UINTPTR_T_DECLARED) && !defined(_UINTPTR_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsynctypedef unsigned long uintptr_t;
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_INTPTR_T_DECLARED) && !defined(_INTPTR_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# if !defined(_UINTPTR_T_DECLARED) && !defined(_UINTPTR_T)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync# endif /* !_MSC_VER */
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync#endif /* no system stdint.h */
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * Make sure the [U]INTx_C(c) macros are present.
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * For In C++ source the system stdint.h may have skipped these if it was
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * included before we managed to define __STDC_CONSTANT_MACROS. (Kludge alert!)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync#if !defined(INT8_C) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(INT16_C) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(INT32_C) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(INT64_C) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(INTMAX_C) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(UINT8_C) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(UINT16_C) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(UINT32_C) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(UINT64_C) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * Make sure the INTx_MIN and [U]INTx_MAX macros are present.
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * For In C++ source the system stdint.h may have skipped these if it was
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync * included before we managed to define __STDC_LIMIT_MACROS. (Kludge alert!)
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync#if !defined(INT8_MIN) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(INT16_MIN) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(INT32_MIN) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(INT64_MIN) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(INT8_MAX) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(INT16_MAX) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(INT32_MAX) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(INT64_MAX) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(UINT8_MAX) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(UINT16_MAX) \
d84b6107a8e797f41ac2d55bed97b02c91c742e8vboxsync || !defined(UINT32_MAX) \
2c1d8cd8efdd4c486ff681135035d24111b03af8vboxsync# define INT64_MIN (INT64_C(-0x7fffffffffffffff) - 1)