| /** @file | |
| * IPRT - Types. | |
| */ | |
| /* | |
| * Copyright (C) 2006-2015 Oracle Corporation | |
| * | |
| * This file is part of VirtualBox Open Source Edition (OSE), as | |
| * available from http://www.virtualbox.org. This file is free software; | |
| * you can redistribute it and/or modify it under the terms of the GNU | |
| * General Public License (GPL) as published by the Free Software | |
| * Foundation, in version 2 as it comes in the "COPYING" file of the | |
| * VirtualBox OSE distribution. VirtualBox OSE is distributed in the | |
| * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. | |
| * | |
| * The contents of this file may alternatively be used under the terms | |
| * of the Common Development and Distribution License Version 1.0 | |
| * (CDDL) only, as it comes in the "COPYING.CDDL" file of the | |
| * VirtualBox OSE distribution, in which case the provisions of the | |
| * CDDL are applicable instead of those of the GPL. | |
| * | |
| * You may elect to license modified versions of this file under the | |
| * terms and conditions of either the GPL or the CDDL or both. | |
| */ | |
| #ifndef ___iprt_types_h | |
| #define ___iprt_types_h | |
| #include <iprt/cdefs.h> | |
| #include <iprt/stdint.h> | |
| #include <iprt/stdarg.h> | |
| /* | |
| * Include standard C types. | |
| */ | |
| #ifndef IPRT_NO_CRT | |
| # if defined(IN_XF86_MODULE) && !defined(NO_ANSIC) | |
| /* | |
| * Kludge for xfree86 modules: size_t and other types are redefined. | |
| */ | |
| RT_C_DECLS_BEGIN | |
| # include "xf86_ansic.h" | |
| # undef NULL | |
| RT_C_DECLS_END | |
| # elif defined(RT_OS_DARWIN) && defined(KERNEL) | |
| /* | |
| * Kludge for the darwin kernel: | |
| * stddef.h is missing IIRC. | |
| */ | |
| # ifndef _PTRDIFF_T | |
| # define _PTRDIFF_T | |
| typedef __darwin_ptrdiff_t ptrdiff_t; | |
| # endif | |
| # include <sys/types.h> | |
| # elif defined(RT_OS_FREEBSD) && defined(_KERNEL) | |
| /* | |
| * Kludge for the FreeBSD kernel: | |
| * stddef.h and sys/types.h have slightly different offsetof definitions | |
| * when compiling in kernel mode. This is just to make GCC shut up. | |
| */ | |
| # ifndef _STDDEF_H_ | |
| # undef offsetof | |
| # endif | |
| # include <sys/stddef.h> | |
| # ifndef _SYS_TYPES_H_ | |
| # undef offsetof | |
| # endif | |
| # include <sys/types.h> | |
| # ifndef offsetof | |
| # error "offsetof is not defined!" | |
| # endif | |
| # elif defined(RT_OS_FREEBSD) && HC_ARCH_BITS == 64 && defined(RT_ARCH_X86) | |
| /* | |
| * Kludge for compiling 32-bit code on a 64-bit FreeBSD: | |
| * FreeBSD declares uint64_t and int64_t wrong (long unsigned and long int | |
| * though they need to be long long unsigned and long long int). These | |
| * defines conflict with our declaration in stdint.h. Adding the defines | |
| * below omits the definitions in the system header. | |
| */ | |
| # include <stddef.h> | |
| # define _UINT64_T_DECLARED | |
| # define _INT64_T_DECLARED | |
| # define _UINTPTR_T_DECLARED | |
| # define _INTPTR_T_DECLARED | |
| # include <sys/types.h> | |
| # elif defined(RT_OS_LINUX) && defined(__KERNEL__) | |
| /* | |
| * Kludge for the linux kernel: | |
| * 1. sys/types.h doesn't mix with the kernel. | |
| * 2. Starting with 2.6.19, linux/types.h typedefs bool and linux/stddef.h | |
| * declares false and true as enum values. | |
| * 3. Starting with 2.6.24, linux/types.h typedefs uintptr_t. | |
| * We work around these issues here and nowhere else. | |
| */ | |
| # include <stddef.h> | |
| # if defined(__cplusplus) | |
| typedef bool _Bool; | |
| # endif | |
| # define bool linux_bool | |
| # define true linux_true | |
| # define false linux_false | |
| # define uintptr_t linux_uintptr_t | |
| # include <linux/version.h> | |
| # if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) | |
| # include <generated/autoconf.h> | |
| # else | |
| # ifndef AUTOCONF_INCLUDED | |
| # include <linux/autoconf.h> | |
| # endif | |
| # endif | |
| # include <linux/compiler.h> | |
| # if defined(__cplusplus) | |
| /* | |
| * Starting with 3.3, <linux/compiler-gcc.h> appends 'notrace' (which | |
| * expands to __attribute__((no_instrument_function))) to inline, | |
| * __inline and __inline__. Revert that. | |
| */ | |
| # undef inline | |
| # define inline inline | |
| # undef __inline__ | |
| # define __inline__ __inline__ | |
| # undef __inline | |
| # define __inline __inline | |
| # endif | |
| # include <linux/types.h> | |
| # include <linux/stddef.h> | |
| /* | |
| * Starting with 3.4, <linux/stddef.h> defines NULL as '((void*)0)' which | |
| * does not work for C++ code. | |
| */ | |
| # undef NULL | |
| # undef uintptr_t | |
| # ifdef __GNUC__ | |
| # if (__GNUC__ * 100 + __GNUC_MINOR__) <= 400 | |
| /* | |
| * <linux/compiler-gcc{3,4}.h> does | |
| * #define __inline__ __inline__ __attribute__((always_inline)) | |
| * in some older Linux kernels. Forcing inlining will fail for some RTStrA* | |
| * functions with gcc <= 4.0 due to passing variable argument lists. | |
| */ | |
| # undef __inline__ | |
| # define __inline__ __inline__ | |
| # endif | |
| # endif | |
| # undef false | |
| # undef true | |
| # undef bool | |
| # else | |
| # include <stddef.h> | |
| # include <sys/types.h> | |
| # endif | |
| /* Define any types missing from sys/types.h on windows. */ | |
| # ifdef _MSC_VER | |
| # undef ssize_t | |
| typedef intptr_t ssize_t; | |
| # endif | |
| #else /* no crt */ | |
| # include <iprt/nocrt/compiler/compiler.h> | |
| #endif /* no crt */ | |
| /** @def NULL | |
| * NULL pointer. | |
| */ | |
| #ifndef NULL | |
| # ifdef __cplusplus | |
| # define NULL 0 | |
| # else | |
| # define NULL ((void*)0) | |
| # endif | |
| #endif | |
| /** @defgroup grp_rt_types IPRT Base Types | |
| * @{ | |
| */ | |
| /* define wchar_t, we don't wanna include all the wcsstuff to get this. */ | |
| #ifdef _MSC_VER | |
| # ifndef _WCHAR_T_DEFINED | |
| typedef unsigned short wchar_t; | |
| # define _WCHAR_T_DEFINED | |
| # endif | |
| #endif | |
| #ifdef __GNUC__ | |
| /** @todo wchar_t on GNUC */ | |
| #endif | |
| /* | |
| * C doesn't have bool, nor does VisualAge for C++ v3.08. | |
| */ | |
| #if !defined(__cplusplus) || (defined(__IBMCPP__) && defined(RT_OS_OS2)) | |
| # if defined(__GNUC__) | |
| # if defined(RT_OS_LINUX) && __GNUC__ < 3 | |
| typedef uint8_t bool; | |
| # elif defined(RT_OS_FREEBSD) | |
| # ifndef __bool_true_false_are_defined | |
| typedef _Bool bool; | |
| # endif | |
| # else | |
| # if (defined(RT_OS_DARWIN) || defined(RT_OS_HAIKU)) && (defined(_STDBOOL_H) || defined(__STDBOOL_H)) | |
| # undef bool | |
| # endif | |
| typedef _Bool bool; | |
| # endif | |
| # else | |
| typedef unsigned char bool; | |
| # endif | |
| # ifndef true | |
| # define true (1) | |
| # endif | |
| # ifndef false | |
| # define false (0) | |
| # endif | |
| #endif | |
| /** | |
| * 128-bit unsigned integer. | |
| */ | |
| #if defined(__GNUC__) && defined(RT_ARCH_AMD64) | |
| typedef __uint128_t uint128_t; | |
| #else | |
| typedef struct uint128_s | |
| { | |
| # ifdef RT_BIG_ENDIAN | |
| uint64_t Hi; | |
| uint64_t Lo; | |
| # else | |
| uint64_t Lo; | |
| uint64_t Hi; | |
| # endif | |
| } uint128_t; | |
| #endif | |
| /** | |
| * 128-bit signed integer. | |
| */ | |
| #if defined(__GNUC__) && defined(RT_ARCH_AMD64) | |
| typedef __int128_t int128_t; | |
| #else | |
| typedef struct int128_s | |
| { | |
| # ifdef RT_BIG_ENDIAN | |
| int64_t Hi; | |
| uint64_t Lo; | |
| # else | |
| uint64_t Lo; | |
| int64_t Hi; | |
| # endif | |
| } int128_t; | |
| #endif | |
| /** | |
| * 16-bit unsigned integer union. | |
| */ | |
| typedef union RTUINT16U | |
| { | |
| /** natural view. */ | |
| uint16_t u; | |
| /** 16-bit view. */ | |
| uint16_t au16[1]; | |
| /** 8-bit view. */ | |
| uint8_t au8[2]; | |
| /** 16-bit hi/lo view. */ | |
| struct | |
| { | |
| #ifdef RT_BIG_ENDIAN | |
| uint8_t Hi; | |
| uint8_t Lo; | |
| #else | |
| uint8_t Lo; | |
| uint8_t Hi; | |
| #endif | |
| } s; | |
| } RTUINT16U; | |
| /** Pointer to a 16-bit unsigned integer union. */ | |
| typedef RTUINT16U *PRTUINT16U; | |
| /** Pointer to a const 32-bit unsigned integer union. */ | |
| typedef const RTUINT16U *PCRTUINT16U; | |
| /** | |
| * 32-bit unsigned integer union. | |
| */ | |
| typedef union RTUINT32U | |
| { | |
| /** natural view. */ | |
| uint32_t u; | |
| /** Hi/Low view. */ | |
| struct | |
| { | |
| #ifdef RT_BIG_ENDIAN | |
| uint16_t Hi; | |
| uint16_t Lo; | |
| #else | |
| uint16_t Lo; | |
| uint16_t Hi; | |
| #endif | |
| } s; | |
| /** Word view. */ | |
| struct | |
| { | |
| #ifdef RT_BIG_ENDIAN | |
| uint16_t w1; | |
| uint16_t w0; | |
| #else | |
| uint16_t w0; | |
| uint16_t w1; | |
| #endif | |
| } Words; | |
| /** 32-bit view. */ | |
| uint32_t au32[1]; | |
| /** 16-bit view. */ | |
| uint16_t au16[2]; | |
| /** 8-bit view. */ | |
| uint8_t au8[4]; | |
| } RTUINT32U; | |
| /** Pointer to a 32-bit unsigned integer union. */ | |
| typedef RTUINT32U *PRTUINT32U; | |
| /** Pointer to a const 32-bit unsigned integer union. */ | |
| typedef const RTUINT32U *PCRTUINT32U; | |
| /** | |
| * 64-bit unsigned integer union. | |
| */ | |
| typedef union RTUINT64U | |
| { | |
| /** Natural view. */ | |
| uint64_t u; | |
| /** Hi/Low view. */ | |
| struct | |
| { | |
| #ifdef RT_BIG_ENDIAN | |
| uint32_t Hi; | |
| uint32_t Lo; | |
| #else | |
| uint32_t Lo; | |
| uint32_t Hi; | |
| #endif | |
| } s; | |
| /** Double-Word view. */ | |
| struct | |
| { | |
| #ifdef RT_BIG_ENDIAN | |
| uint32_t dw1; | |
| uint32_t dw0; | |
| #else | |
| uint32_t dw0; | |
| uint32_t dw1; | |
| #endif | |
| } DWords; | |
| /** Word view. */ | |
| struct | |
| { | |
| #ifdef RT_BIG_ENDIAN | |
| uint16_t w3; | |
| uint16_t w2; | |
| uint16_t w1; | |
| uint16_t w0; | |
| #else | |
| uint16_t w0; | |
| uint16_t w1; | |
| uint16_t w2; | |
| uint16_t w3; | |
| #endif | |
| } Words; | |
| /** 64-bit view. */ | |
| uint64_t au64[1]; | |
| /** 32-bit view. */ | |
| uint32_t au32[2]; | |
| /** 16-bit view. */ | |
| uint16_t au16[4]; | |
| /** 8-bit view. */ | |
| uint8_t au8[8]; | |
| } RTUINT64U; | |
| /** Pointer to a 64-bit unsigned integer union. */ | |
| typedef RTUINT64U *PRTUINT64U; | |
| /** Pointer to a const 64-bit unsigned integer union. */ | |
| typedef const RTUINT64U *PCRTUINT64U; | |
| /** | |
| * 128-bit unsigned integer union. | |
| */ | |
| #pragma pack(1) | |
| typedef union RTUINT128U | |
| { | |
| /** Hi/Low view. | |
| * @remarks We put this first so we can have portable initializers | |
| * (RTUINT128_INIT) */ | |
| struct | |
| { | |
| #ifdef RT_BIG_ENDIAN | |
| uint64_t Hi; | |
| uint64_t Lo; | |
| #else | |
| uint64_t Lo; | |
| uint64_t Hi; | |
| #endif | |
| } s; | |
| /** Natural view. | |
| * WARNING! This member depends on the compiler supporting 128-bit stuff. */ | |
| uint128_t u; | |
| /** Quad-Word view. */ | |
| struct | |
| { | |
| #ifdef RT_BIG_ENDIAN | |
| uint64_t qw1; | |
| uint64_t qw0; | |
| #else | |
| uint64_t qw0; | |
| uint64_t qw1; | |
| #endif | |
| } QWords; | |
| /** Double-Word view. */ | |
| struct | |
| { | |
| #ifdef RT_BIG_ENDIAN | |
| uint32_t dw3; | |
| uint32_t dw2; | |
| uint32_t dw1; | |
| uint32_t dw0; | |
| #else | |
| uint32_t dw0; | |
| uint32_t dw1; | |
| uint32_t dw2; | |
| uint32_t dw3; | |
| #endif | |
| } DWords; | |
| /** Word view. */ | |
| struct | |
| { | |
| #ifdef RT_BIG_ENDIAN | |
| uint16_t w7; | |
| uint16_t w6; | |
| uint16_t w5; | |
| uint16_t w4; | |
| uint16_t w3; | |
| uint16_t w2; | |
| uint16_t w1; | |
| uint16_t w0; | |
| #else | |
| uint16_t w0; | |
| uint16_t w1; | |
| uint16_t w2; | |
| uint16_t w3; | |
| uint16_t w4; | |
| uint16_t w5; | |
| uint16_t w6; | |
| uint16_t w7; | |
| #endif | |
| } Words; | |
| /** 64-bit view. */ | |
| uint64_t au64[2]; | |
| /** 32-bit view. */ | |
| uint32_t au32[4]; | |
| /** 16-bit view. */ | |
| uint16_t au16[8]; | |
| /** 8-bit view. */ | |
| uint8_t au8[16]; | |
| } RTUINT128U; | |
| #pragma pack() | |
| /** Pointer to a 64-bit unsigned integer union. */ | |
| typedef RTUINT128U *PRTUINT128U; | |
| /** Pointer to a const 64-bit unsigned integer union. */ | |
| typedef const RTUINT128U *PCRTUINT128U; | |
| /** @def RTUINT128_INIT | |
| * Portable RTUINT128U initializer. */ | |
| #ifdef RT_BIG_ENDIAN | |
| # define RTUINT128_INIT(a_Hi, a_Lo) { { a_Hi, a_Lo } } | |
| #else | |
| # define RTUINT128_INIT(a_Hi, a_Lo) { { a_Lo, a_Hi } } | |
| #endif | |
| /** @def RTUINT128_INIT_C | |
| * Portable RTUINT128U initializer for 64-bit constants. */ | |
| #ifdef RT_BIG_ENDIAN | |
| # define RTUINT128_INIT_C(a_Hi, a_Lo) { { UINT64_C(a_Hi), UINT64_C(a_Lo) } } | |
| #else | |
| # define RTUINT128_INIT_C(a_Hi, a_Lo) { { UINT64_C(a_Lo), UINT64_C(a_Hi) } } | |
| #endif | |
| /** | |
| * Double precision floating point format (64-bit). | |
| */ | |
| typedef union RTFLOAT64U | |
| { | |
| #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) | |
| /** Double view. */ | |
| double rd; | |
| #endif | |
| /** Format using regular bitfields. */ | |
| struct | |
| { | |
| # ifdef RT_BIG_ENDIAN | |
| /** The sign indicator. */ | |
| uint32_t fSign : 1; | |
| /** The exponent (offseted by 1023). */ | |
| uint32_t uExponent : 11; | |
| /** The fraction, bits 32 thru 51. */ | |
| uint32_t u20FractionHigh : 20; | |
| /** The fraction, bits 0 thru 31. */ | |
| uint32_t u32FractionLow; | |
| # else | |
| /** The fraction, bits 0 thru 31. */ | |
| uint32_t u32FractionLow; | |
| /** The fraction, bits 32 thru 51. */ | |
| uint32_t u20FractionHigh : 20; | |
| /** The exponent (offseted by 1023). */ | |
| uint32_t uExponent : 11; | |
| /** The sign indicator. */ | |
| uint32_t fSign : 1; | |
| # endif | |
| } s; | |
| #ifdef RT_COMPILER_GROKS_64BIT_BITFIELDS | |
| /** Format using 64-bit bitfields. */ | |
| RT_GCC_EXTENSION struct | |
| { | |
| # ifdef RT_BIG_ENDIAN | |
| /** The sign indicator. */ | |
| RT_GCC_EXTENSION uint64_t fSign : 1; | |
| /** The exponent (offseted by 1023). */ | |
| RT_GCC_EXTENSION uint64_t uExponent : 11; | |
| /** The fraction. */ | |
| RT_GCC_EXTENSION uint64_t uFraction : 52; | |
| # else | |
| /** The fraction. */ | |
| RT_GCC_EXTENSION uint64_t uFraction : 52; | |
| /** The exponent (offseted by 1023). */ | |
| RT_GCC_EXTENSION uint64_t uExponent : 11; | |
| /** The sign indicator. */ | |
| RT_GCC_EXTENSION uint64_t fSign : 1; | |
| # endif | |
| } s64; | |
| #endif | |
| /** 64-bit view. */ | |
| uint64_t au64[1]; | |
| /** 32-bit view. */ | |
| uint32_t au32[2]; | |
| /** 16-bit view. */ | |
| uint16_t au16[4]; | |
| /** 8-bit view. */ | |
| uint8_t au8[8]; | |
| } RTFLOAT64U; | |
| /** Pointer to a double precision floating point format union. */ | |
| typedef RTFLOAT64U *PRTFLOAT64U; | |
| /** Pointer to a const double precision floating point format union. */ | |
| typedef const RTFLOAT64U *PCRTFLOAT64U; | |
| #if !defined(__IBMCPP__) && !defined(__IBMC__) | |
| /** | |
| * Extended Double precision floating point format (80-bit). | |
| */ | |
| #pragma pack(1) | |
| typedef union RTFLOAT80U | |
| { | |
| /** Format using bitfields. */ | |
| RT_GCC_EXTENSION struct | |
| { | |
| # ifdef RT_BIG_ENDIAN | |
| /** The sign indicator. */ | |
| RT_GCC_EXTENSION uint16_t fSign : 1; | |
| /** The exponent (offseted by 16383). */ | |
| RT_GCC_EXTENSION uint16_t uExponent : 15; | |
| /** The mantissa. */ | |
| uint64_t u64Mantissa; | |
| # else | |
| /** The mantissa. */ | |
| uint64_t u64Mantissa; | |
| /** The exponent (offseted by 16383). */ | |
| RT_GCC_EXTENSION uint16_t uExponent : 15; | |
| /** The sign indicator. */ | |
| RT_GCC_EXTENSION uint16_t fSign : 1; | |
| # endif | |
| } s; | |
| /** 64-bit view. */ | |
| uint64_t au64[1]; | |
| /** 32-bit view. */ | |
| uint32_t au32[2]; | |
| /** 16-bit view. */ | |
| uint16_t au16[5]; | |
| /** 8-bit view. */ | |
| uint8_t au8[10]; | |
| } RTFLOAT80U; | |
| #pragma pack() | |
| /** Pointer to a extended precision floating point format union. */ | |
| typedef RTFLOAT80U *PRTFLOAT80U; | |
| /** Pointer to a const extended precision floating point format union. */ | |
| typedef const RTFLOAT80U *PCRTFLOAT80U; | |
| /** | |
| * A variant of RTFLOAT80U that may be larger than 80-bits depending on how the | |
| * compiler implements long double. | |
| */ | |
| #pragma pack(1) | |
| typedef union RTFLOAT80U2 | |
| { | |
| #ifdef RT_COMPILER_WITH_80BIT_LONG_DOUBLE | |
| /** Long double view. */ | |
| long double lrd; | |
| #endif | |
| /** Format using bitfields. */ | |
| RT_GCC_EXTENSION struct | |
| { | |
| #ifdef RT_BIG_ENDIAN | |
| /** The sign indicator. */ | |
| RT_GCC_EXTENSION uint16_t fSign : 1; | |
| /** The exponent (offseted by 16383). */ | |
| RT_GCC_EXTENSION uint16_t uExponent : 15; | |
| /** The mantissa. */ | |
| uint64_t u64Mantissa; | |
| #else | |
| /** The mantissa. */ | |
| uint64_t u64Mantissa; | |
| /** The exponent (offseted by 16383). */ | |
| RT_GCC_EXTENSION uint16_t uExponent : 15; | |
| /** The sign indicator. */ | |
| RT_GCC_EXTENSION uint16_t fSign : 1; | |
| #endif | |
| } s; | |
| /** Bitfield exposing the J bit and the fraction. */ | |
| RT_GCC_EXTENSION struct | |
| { | |
| #ifdef RT_BIG_ENDIAN | |
| /** The sign indicator. */ | |
| RT_GCC_EXTENSION uint16_t fSign : 1; | |
| /** The exponent (offseted by 16383). */ | |
| RT_GCC_EXTENSION uint16_t uExponent : 15; | |
| /** The J bit, aka the integer bit. */ | |
| uint32_t fInteger; | |
| /** The fraction, bits 32 thru 62. */ | |
| uint32_t u31FractionHigh : 31; | |
| /** The fraction, bits 0 thru 31. */ | |
| uint32_t u32FractionLow : 32; | |
| #else | |
| /** The fraction, bits 0 thru 31. */ | |
| uint32_t u32FractionLow : 32; | |
| /** The fraction, bits 32 thru 62. */ | |
| uint32_t u31FractionHigh : 31; | |
| /** The J bit, aka the integer bit. */ | |
| uint32_t fInteger; | |
| /** The exponent (offseted by 16383). */ | |
| RT_GCC_EXTENSION uint16_t uExponent : 15; | |
| /** The sign indicator. */ | |
| RT_GCC_EXTENSION uint16_t fSign : 1; | |
| #endif | |
| } sj; | |
| #ifdef RT_COMPILER_GROKS_64BIT_BITFIELDS | |
| /** 64-bit bitfields exposing the J bit and the fraction. */ | |
| RT_GCC_EXTENSION struct | |
| { | |
| # ifdef RT_BIG_ENDIAN | |
| /** The sign indicator. */ | |
| RT_GCC_EXTENSION uint16_t fSign : 1; | |
| /** The exponent (offseted by 16383). */ | |
| RT_GCC_EXTENSION uint16_t uExponent : 15; | |
| /** The J bit, aka the integer bit. */ | |
| RT_GCC_EXTENSION uint64_t fInteger : 1; | |
| /** The fraction. */ | |
| RT_GCC_EXTENSION uint64_t u63Fraction : 63; | |
| # else | |
| /** The fraction. */ | |
| RT_GCC_EXTENSION uint64_t u63Fraction : 63; | |
| /** The J bit, aka the integer bit. */ | |
| RT_GCC_EXTENSION uint64_t fInteger : 1; | |
| /** The exponent (offseted by 16383). */ | |
| RT_GCC_EXTENSION uint16_t uExponent : 15; | |
| /** The sign indicator. */ | |
| RT_GCC_EXTENSION uint16_t fSign : 1; | |
| # endif | |
| } sj64; | |
| #endif | |
| /** 64-bit view. */ | |
| uint64_t au64[1]; | |
| /** 32-bit view. */ | |
| uint32_t au32[2]; | |
| /** 16-bit view. */ | |
| uint16_t au16[5]; | |
| /** 8-bit view. */ | |
| uint8_t au8[10]; | |
| } RTFLOAT80U2; | |
| #pragma pack() | |
| /** Pointer to a extended precision floating point format union, 2nd | |
| * variant. */ | |
| typedef RTFLOAT80U2 *PRTFLOAT80U2; | |
| /** Pointer to a const extended precision floating point format union, 2nd | |
| * variant. */ | |
| typedef const RTFLOAT80U2 *PCRTFLOAT80U2; | |
| #endif /* uint16_t bitfields doesn't work */ | |
| /** Generic function type. | |
| * @see PFNRT | |
| */ | |
| typedef DECLCALLBACK(void) FNRT(void); | |
| /** Generic function pointer. | |
| * With -pedantic, gcc-4 complains when casting a function to a data object, for | |
| * example: | |
| * | |
| * @code | |
| * void foo(void) | |
| * { | |
| * } | |
| * | |
| * void *bar = (void *)foo; | |
| * @endcode | |
| * | |
| * The compiler would warn with "ISO C++ forbids casting between | |
| * pointer-to-function and pointer-to-object". The purpose of this warning is | |
| * not to bother the programmer but to point out that he is probably doing | |
| * something dangerous, assigning a pointer to executable code to a data object. | |
| */ | |
| typedef FNRT *PFNRT; | |
| /** Millisecond interval. */ | |
| typedef uint32_t RTMSINTERVAL; | |
| /** Pointer to a millisecond interval. */ | |
| typedef RTMSINTERVAL *PRTMSINTERVAL; | |
| /** Pointer to a const millisecond interval. */ | |
| typedef const RTMSINTERVAL *PCRTMSINTERVAL; | |
| /** Pointer to a time spec structure. */ | |
| typedef struct RTTIMESPEC *PRTTIMESPEC; | |
| /** Pointer to a const time spec structure. */ | |
| typedef const struct RTTIMESPEC *PCRTTIMESPEC; | |
| /** @defgroup grp_rt_types_both Common Guest and Host Context Basic Types | |
| * @{ | |
| */ | |
| /** Signed integer which can contain both GC and HC pointers. */ | |
| #if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) | |
| typedef int32_t RTINTPTR; | |
| #elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) | |
| typedef int64_t RTINTPTR; | |
| #else | |
| # error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. | |
| #endif | |
| /** Pointer to signed integer which can contain both GC and HC pointers. */ | |
| typedef RTINTPTR *PRTINTPTR; | |
| /** Pointer const to signed integer which can contain both GC and HC pointers. */ | |
| typedef const RTINTPTR *PCRTINTPTR; | |
| /** The maximum value the RTINTPTR type can hold. */ | |
| #if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) | |
| # define RTINTPTR_MAX INT32_MAX | |
| #elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) | |
| # define RTINTPTR_MAX INT64_MAX | |
| #else | |
| # error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. | |
| #endif | |
| /** The minimum value the RTINTPTR type can hold. */ | |
| #if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) | |
| # define RTINTPTR_MIN INT32_MIN | |
| #elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) | |
| # define RTINTPTR_MIN INT64_MIN | |
| #else | |
| # error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. | |
| #endif | |
| /** Unsigned integer which can contain both GC and HC pointers. */ | |
| #if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) | |
| typedef uint32_t RTUINTPTR; | |
| #elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) | |
| typedef uint64_t RTUINTPTR; | |
| #else | |
| # error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. | |
| #endif | |
| /** Pointer to unsigned integer which can contain both GC and HC pointers. */ | |
| typedef RTUINTPTR *PRTUINTPTR; | |
| /** Pointer const to unsigned integer which can contain both GC and HC pointers. */ | |
| typedef const RTUINTPTR *PCRTUINTPTR; | |
| /** The maximum value the RTUINTPTR type can hold. */ | |
| #if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) | |
| # define RTUINTPTR_MAX UINT32_MAX | |
| #elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) | |
| # define RTUINTPTR_MAX UINT64_MAX | |
| #else | |
| # error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. | |
| #endif | |
| /** Signed integer. */ | |
| typedef int32_t RTINT; | |
| /** Pointer to signed integer. */ | |
| typedef RTINT *PRTINT; | |
| /** Pointer to const signed integer. */ | |
| typedef const RTINT *PCRTINT; | |
| /** Unsigned integer. */ | |
| typedef uint32_t RTUINT; | |
| /** Pointer to unsigned integer. */ | |
| typedef RTUINT *PRTUINT; | |
| /** Pointer to const unsigned integer. */ | |
| typedef const RTUINT *PCRTUINT; | |
| /** A file offset / size (off_t). */ | |
| typedef int64_t RTFOFF; | |
| /** Pointer to a file offset / size. */ | |
| typedef RTFOFF *PRTFOFF; | |
| /** The max value for RTFOFF. */ | |
| #define RTFOFF_MAX INT64_MAX | |
| /** The min value for RTFOFF. */ | |
| #define RTFOFF_MIN INT64_MIN | |
| /** File mode (see iprt/fs.h). */ | |
| typedef uint32_t RTFMODE; | |
| /** Pointer to file mode. */ | |
| typedef RTFMODE *PRTFMODE; | |
| /** Device unix number. */ | |
| typedef uint32_t RTDEV; | |
| /** Pointer to a device unix number. */ | |
| typedef RTDEV *PRTDEV; | |
| /** @name RTDEV Macros | |
| * @{ */ | |
| /** | |
| * Our makedev macro. | |
| * @returns RTDEV | |
| * @param uMajor The major device number. | |
| * @param uMinor The minor device number. | |
| */ | |
| #define RTDEV_MAKE(uMajor, uMinor) ((RTDEV)( ((RTDEV)(uMajor) << 24) | (uMinor & UINT32_C(0x00ffffff)) )) | |
| /** | |
| * Get the major device node number from an RTDEV type. | |
| * @returns The major device number of @a uDev | |
| * @param uDev The device number. | |
| */ | |
| #define RTDEV_MAJOR(uDev) ((uDev) >> 24) | |
| /** | |
| * Get the minor device node number from an RTDEV type. | |
| * @returns The minor device number of @a uDev | |
| * @param uDev The device number. | |
| */ | |
| #define RTDEV_MINOR(uDev) ((uDev) & UINT32_C(0x00ffffff)) | |
| /** @} */ | |
| /** i-node number. */ | |
| typedef uint64_t RTINODE; | |
| /** Pointer to a i-node number. */ | |
| typedef RTINODE *PRTINODE; | |
| /** User id. */ | |
| typedef uint32_t RTUID; | |
| /** Pointer to a user id. */ | |
| typedef RTUID *PRTUID; | |
| /** NIL user id. | |
| * @todo check this for portability! */ | |
| #define NIL_RTUID (~(RTUID)0) | |
| /** Group id. */ | |
| typedef uint32_t RTGID; | |
| /** Pointer to a group id. */ | |
| typedef RTGID *PRTGID; | |
| /** NIL group id. | |
| * @todo check this for portability! */ | |
| #define NIL_RTGID (~(RTGID)0) | |
| /** I/O Port. */ | |
| typedef uint16_t RTIOPORT; | |
| /** Pointer to I/O Port. */ | |
| typedef RTIOPORT *PRTIOPORT; | |
| /** Pointer to const I/O Port. */ | |
| typedef const RTIOPORT *PCRTIOPORT; | |
| /** Selector. */ | |
| typedef uint16_t RTSEL; | |
| /** Pointer to selector. */ | |
| typedef RTSEL *PRTSEL; | |
| /** Pointer to const selector. */ | |
| typedef const RTSEL *PCRTSEL; | |
| /** Max selector value. */ | |
| #define RTSEL_MAX UINT16_MAX | |
| /** Far 16-bit pointer. */ | |
| #pragma pack(1) | |
| typedef struct RTFAR16 | |
| { | |
| uint16_t off; | |
| RTSEL sel; | |
| } RTFAR16; | |
| #pragma pack() | |
| /** Pointer to Far 16-bit pointer. */ | |
| typedef RTFAR16 *PRTFAR16; | |
| /** Pointer to const Far 16-bit pointer. */ | |
| typedef const RTFAR16 *PCRTFAR16; | |
| /** Far 32-bit pointer. */ | |
| #pragma pack(1) | |
| typedef struct RTFAR32 | |
| { | |
| uint32_t off; | |
| RTSEL sel; | |
| } RTFAR32; | |
| #pragma pack() | |
| /** Pointer to Far 32-bit pointer. */ | |
| typedef RTFAR32 *PRTFAR32; | |
| /** Pointer to const Far 32-bit pointer. */ | |
| typedef const RTFAR32 *PCRTFAR32; | |
| /** Far 64-bit pointer. */ | |
| #pragma pack(1) | |
| typedef struct RTFAR64 | |
| { | |
| uint64_t off; | |
| RTSEL sel; | |
| } RTFAR64; | |
| #pragma pack() | |
| /** Pointer to Far 64-bit pointer. */ | |
| typedef RTFAR64 *PRTFAR64; | |
| /** Pointer to const Far 64-bit pointer. */ | |
| typedef const RTFAR64 *PCRTFAR64; | |
| /** @} */ | |
| /** @defgroup grp_rt_types_hc Host Context Basic Types | |
| * @{ | |
| */ | |
| /** HC Natural signed integer. | |
| * @deprecated silly type. */ | |
| typedef int32_t RTHCINT; | |
| /** Pointer to HC Natural signed integer. | |
| * @deprecated silly type. */ | |
| typedef RTHCINT *PRTHCINT; | |
| /** Pointer to const HC Natural signed integer. | |
| * @deprecated silly type. */ | |
| typedef const RTHCINT *PCRTHCINT; | |
| /** HC Natural unsigned integer. | |
| * @deprecated silly type. */ | |
| typedef uint32_t RTHCUINT; | |
| /** Pointer to HC Natural unsigned integer. | |
| * @deprecated silly type. */ | |
| typedef RTHCUINT *PRTHCUINT; | |
| /** Pointer to const HC Natural unsigned integer. | |
| * @deprecated silly type. */ | |
| typedef const RTHCUINT *PCRTHCUINT; | |
| /** Signed integer which can contain a HC pointer. */ | |
| #if HC_ARCH_BITS == 32 | |
| typedef int32_t RTHCINTPTR; | |
| #elif HC_ARCH_BITS == 64 | |
| typedef int64_t RTHCINTPTR; | |
| #else | |
| # error Unsupported HC_ARCH_BITS value. | |
| #endif | |
| /** Pointer to signed integer which can contain a HC pointer. */ | |
| typedef RTHCINTPTR *PRTHCINTPTR; | |
| /** Pointer to const signed integer which can contain a HC pointer. */ | |
| typedef const RTHCINTPTR *PCRTHCINTPTR; | |
| /** Max RTHCINTPTR value. */ | |
| #if HC_ARCH_BITS == 32 | |
| # define RTHCINTPTR_MAX INT32_MAX | |
| #else | |
| # define RTHCINTPTR_MAX INT64_MAX | |
| #endif | |
| /** Min RTHCINTPTR value. */ | |
| #if HC_ARCH_BITS == 32 | |
| # define RTHCINTPTR_MIN INT32_MIN | |
| #else | |
| # define RTHCINTPTR_MIN INT64_MIN | |
| #endif | |
| /** Signed integer which can contain a HC ring-3 pointer. */ | |
| #if R3_ARCH_BITS == 32 | |
| typedef int32_t RTR3INTPTR; | |
| #elif R3_ARCH_BITS == 64 | |
| typedef int64_t RTR3INTPTR; | |
| #else | |
| # error Unsupported R3_ARCH_BITS value. | |
| #endif | |
| /** Pointer to signed integer which can contain a HC ring-3 pointer. */ | |
| typedef RTR3INTPTR *PRTR3INTPTR; | |
| /** Pointer to const signed integer which can contain a HC ring-3 pointer. */ | |
| typedef const RTR3INTPTR *PCRTR3INTPTR; | |
| /** Max RTR3INTPTR value. */ | |
| #if R3_ARCH_BITS == 32 | |
| # define RTR3INTPTR_MAX INT32_MAX | |
| #else | |
| # define RTR3INTPTR_MAX INT64_MAX | |
| #endif | |
| /** Min RTR3INTPTR value. */ | |
| #if R3_ARCH_BITS == 32 | |
| # define RTR3INTPTR_MIN INT32_MIN | |
| #else | |
| # define RTR3INTPTR_MIN INT64_MIN | |
| #endif | |
| /** Signed integer which can contain a HC ring-0 pointer. */ | |
| #if R0_ARCH_BITS == 32 | |
| typedef int32_t RTR0INTPTR; | |
| #elif R0_ARCH_BITS == 64 | |
| typedef int64_t RTR0INTPTR; | |
| #else | |
| # error Unsupported R0_ARCH_BITS value. | |
| #endif | |
| /** Pointer to signed integer which can contain a HC ring-0 pointer. */ | |
| typedef RTR0INTPTR *PRTR0INTPTR; | |
| /** Pointer to const signed integer which can contain a HC ring-0 pointer. */ | |
| typedef const RTR0INTPTR *PCRTR0INTPTR; | |
| /** Max RTR0INTPTR value. */ | |
| #if R0_ARCH_BITS == 32 | |
| # define RTR0INTPTR_MAX INT32_MAX | |
| #else | |
| # define RTR0INTPTR_MAX INT64_MAX | |
| #endif | |
| /** Min RTHCINTPTR value. */ | |
| #if R0_ARCH_BITS == 32 | |
| # define RTR0INTPTR_MIN INT32_MIN | |
| #else | |
| # define RTR0INTPTR_MIN INT64_MIN | |
| #endif | |
| /** Unsigned integer which can contain a HC pointer. */ | |
| #if HC_ARCH_BITS == 32 | |
| typedef uint32_t RTHCUINTPTR; | |
| #elif HC_ARCH_BITS == 64 | |
| typedef uint64_t RTHCUINTPTR; | |
| #else | |
| # error Unsupported HC_ARCH_BITS value. | |
| #endif | |
| /** Pointer to unsigned integer which can contain a HC pointer. */ | |
| typedef RTHCUINTPTR *PRTHCUINTPTR; | |
| /** Pointer to unsigned integer which can contain a HC pointer. */ | |
| typedef const RTHCUINTPTR *PCRTHCUINTPTR; | |
| /** Max RTHCUINTTPR value. */ | |
| #if HC_ARCH_BITS == 32 | |
| # define RTHCUINTPTR_MAX UINT32_MAX | |
| #else | |
| # define RTHCUINTPTR_MAX UINT64_MAX | |
| #endif | |
| /** Unsigned integer which can contain a HC ring-3 pointer. */ | |
| #if R3_ARCH_BITS == 32 | |
| typedef uint32_t RTR3UINTPTR; | |
| #elif R3_ARCH_BITS == 64 | |
| typedef uint64_t RTR3UINTPTR; | |
| #else | |
| # error Unsupported R3_ARCH_BITS value. | |
| #endif | |
| /** Pointer to unsigned integer which can contain a HC ring-3 pointer. */ | |
| typedef RTR3UINTPTR *PRTR3UINTPTR; | |
| /** Pointer to unsigned integer which can contain a HC ring-3 pointer. */ | |
| typedef const RTR3UINTPTR *PCRTR3UINTPTR; | |
| /** Max RTHCUINTTPR value. */ | |
| #if R3_ARCH_BITS == 32 | |
| # define RTR3UINTPTR_MAX UINT32_MAX | |
| #else | |
| # define RTR3UINTPTR_MAX UINT64_MAX | |
| #endif | |
| /** Unsigned integer which can contain a HC ring-0 pointer. */ | |
| #if R0_ARCH_BITS == 32 | |
| typedef uint32_t RTR0UINTPTR; | |
| #elif R0_ARCH_BITS == 64 | |
| typedef uint64_t RTR0UINTPTR; | |
| #else | |
| # error Unsupported R0_ARCH_BITS value. | |
| #endif | |
| /** Pointer to unsigned integer which can contain a HC ring-0 pointer. */ | |
| typedef RTR0UINTPTR *PRTR0UINTPTR; | |
| /** Pointer to unsigned integer which can contain a HC ring-0 pointer. */ | |
| typedef const RTR0UINTPTR *PCRTR0UINTPTR; | |
| /** Max RTR0UINTTPR value. */ | |
| #if HC_ARCH_BITS == 32 | |
| # define RTR0UINTPTR_MAX UINT32_MAX | |
| #else | |
| # define RTR0UINTPTR_MAX UINT64_MAX | |
| #endif | |
| /** Host Physical Memory Address. */ | |
| typedef uint64_t RTHCPHYS; | |
| /** Pointer to Host Physical Memory Address. */ | |
| typedef RTHCPHYS *PRTHCPHYS; | |
| /** Pointer to const Host Physical Memory Address. */ | |
| typedef const RTHCPHYS *PCRTHCPHYS; | |
| /** @def NIL_RTHCPHYS | |
| * NIL HC Physical Address. | |
| * NIL_RTHCPHYS is used to signal an invalid physical address, similar | |
| * to the NULL pointer. | |
| */ | |
| #define NIL_RTHCPHYS (~(RTHCPHYS)0) | |
| /** Max RTHCPHYS value. */ | |
| #define RTHCPHYS_MAX UINT64_MAX | |
| /** HC pointer. */ | |
| #ifndef IN_RC | |
| typedef void * RTHCPTR; | |
| #else | |
| typedef RTHCUINTPTR RTHCPTR; | |
| #endif | |
| /** Pointer to HC pointer. */ | |
| typedef RTHCPTR *PRTHCPTR; | |
| /** Pointer to const HC pointer. */ | |
| typedef const RTHCPTR *PCRTHCPTR; | |
| /** @def NIL_RTHCPTR | |
| * NIL HC pointer. | |
| */ | |
| #define NIL_RTHCPTR ((RTHCPTR)0) | |
| /** Max RTHCPTR value. */ | |
| #define RTHCPTR_MAX ((RTHCPTR)RTHCUINTPTR_MAX) | |
| /** HC ring-3 pointer. */ | |
| #ifdef IN_RING3 | |
| typedef void * RTR3PTR; | |
| #else | |
| typedef RTR3UINTPTR RTR3PTR; | |
| #endif | |
| /** Pointer to HC ring-3 pointer. */ | |
| typedef RTR3PTR *PRTR3PTR; | |
| /** Pointer to const HC ring-3 pointer. */ | |
| typedef const RTR3PTR *PCRTR3PTR; | |
| /** @def NIL_RTR3PTR | |
| * NIL HC ring-3 pointer. | |
| */ | |
| #ifndef IN_RING3 | |
| # define NIL_RTR3PTR ((RTR3PTR)0) | |
| #else | |
| # define NIL_RTR3PTR (NULL) | |
| #endif | |
| /** Max RTR3PTR value. */ | |
| #define RTR3PTR_MAX ((RTR3PTR)RTR3UINTPTR_MAX) | |
| /** HC ring-0 pointer. */ | |
| #ifdef IN_RING0 | |
| typedef void * RTR0PTR; | |
| #else | |
| typedef RTR0UINTPTR RTR0PTR; | |
| #endif | |
| /** Pointer to HC ring-0 pointer. */ | |
| typedef RTR0PTR *PRTR0PTR; | |
| /** Pointer to const HC ring-0 pointer. */ | |
| typedef const RTR0PTR *PCRTR0PTR; | |
| /** @def NIL_RTR0PTR | |
| * NIL HC ring-0 pointer. | |
| */ | |
| #ifndef IN_RING0 | |
| # define NIL_RTR0PTR ((RTR0PTR)0) | |
| #else | |
| # define NIL_RTR0PTR (NULL) | |
| #endif | |
| /** Max RTR3PTR value. */ | |
| #define RTR0PTR_MAX ((RTR0PTR)RTR0UINTPTR_MAX) | |
| /** Unsigned integer register in the host context. */ | |
| #if HC_ARCH_BITS == 32 | |
| typedef uint32_t RTHCUINTREG; | |
| #elif HC_ARCH_BITS == 64 | |
| typedef uint64_t RTHCUINTREG; | |
| #else | |
| # error "Unsupported HC_ARCH_BITS!" | |
| #endif | |
| /** Pointer to an unsigned integer register in the host context. */ | |
| typedef RTHCUINTREG *PRTHCUINTREG; | |
| /** Pointer to a const unsigned integer register in the host context. */ | |
| typedef const RTHCUINTREG *PCRTHCUINTREG; | |
| /** Unsigned integer register in the host ring-3 context. */ | |
| #if R3_ARCH_BITS == 32 | |
| typedef uint32_t RTR3UINTREG; | |
| #elif R3_ARCH_BITS == 64 | |
| typedef uint64_t RTR3UINTREG; | |
| #else | |
| # error "Unsupported R3_ARCH_BITS!" | |
| #endif | |
| /** Pointer to an unsigned integer register in the host ring-3 context. */ | |
| typedef RTR3UINTREG *PRTR3UINTREG; | |
| /** Pointer to a const unsigned integer register in the host ring-3 context. */ | |
| typedef const RTR3UINTREG *PCRTR3UINTREG; | |
| /** Unsigned integer register in the host ring-3 context. */ | |
| #if R0_ARCH_BITS == 32 | |
| typedef uint32_t RTR0UINTREG; | |
| #elif R0_ARCH_BITS == 64 | |
| typedef uint64_t RTR0UINTREG; | |
| #else | |
| # error "Unsupported R3_ARCH_BITS!" | |
| #endif | |
| /** Pointer to an unsigned integer register in the host ring-3 context. */ | |
| typedef RTR0UINTREG *PRTR0UINTREG; | |
| /** Pointer to a const unsigned integer register in the host ring-3 context. */ | |
| typedef const RTR0UINTREG *PCRTR0UINTREG; | |
| /** @} */ | |
| /** @defgroup grp_rt_types_gc Guest Context Basic Types | |
| * @{ | |
| */ | |
| /** Natural signed integer in the GC. | |
| * @deprecated silly type. */ | |
| #if GC_ARCH_BITS == 32 | |
| typedef int32_t RTGCINT; | |
| #elif GC_ARCH_BITS == 64 /** @todo this isn't right, natural int is 32-bit, see RTHCINT. */ | |
| typedef int64_t RTGCINT; | |
| #endif | |
| /** Pointer to natural signed integer in GC. | |
| * @deprecated silly type. */ | |
| typedef RTGCINT *PRTGCINT; | |
| /** Pointer to const natural signed integer in GC. | |
| * @deprecated silly type. */ | |
| typedef const RTGCINT *PCRTGCINT; | |
| /** Natural unsigned integer in the GC. | |
| * @deprecated silly type. */ | |
| #if GC_ARCH_BITS == 32 | |
| typedef uint32_t RTGCUINT; | |
| #elif GC_ARCH_BITS == 64 /** @todo this isn't right, natural int is 32-bit, see RTHCUINT. */ | |
| typedef uint64_t RTGCUINT; | |
| #endif | |
| /** Pointer to natural unsigned integer in GC. | |
| * @deprecated silly type. */ | |
| typedef RTGCUINT *PRTGCUINT; | |
| /** Pointer to const natural unsigned integer in GC. | |
| * @deprecated silly type. */ | |
| typedef const RTGCUINT *PCRTGCUINT; | |
| /** Signed integer which can contain a GC pointer. */ | |
| #if GC_ARCH_BITS == 32 | |
| typedef int32_t RTGCINTPTR; | |
| #elif GC_ARCH_BITS == 64 | |
| typedef int64_t RTGCINTPTR; | |
| #endif | |
| /** Pointer to signed integer which can contain a GC pointer. */ | |
| typedef RTGCINTPTR *PRTGCINTPTR; | |
| /** Pointer to const signed integer which can contain a GC pointer. */ | |
| typedef const RTGCINTPTR *PCRTGCINTPTR; | |
| /** Unsigned integer which can contain a GC pointer. */ | |
| #if GC_ARCH_BITS == 32 | |
| typedef uint32_t RTGCUINTPTR; | |
| #elif GC_ARCH_BITS == 64 | |
| typedef uint64_t RTGCUINTPTR; | |
| #else | |
| # error Unsupported GC_ARCH_BITS value. | |
| #endif | |
| /** Pointer to unsigned integer which can contain a GC pointer. */ | |
| typedef RTGCUINTPTR *PRTGCUINTPTR; | |
| /** Pointer to unsigned integer which can contain a GC pointer. */ | |
| typedef const RTGCUINTPTR *PCRTGCUINTPTR; | |
| /** Unsigned integer which can contain a 32 bits GC pointer. */ | |
| typedef uint32_t RTGCUINTPTR32; | |
| /** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ | |
| typedef RTGCUINTPTR32 *PRTGCUINTPTR32; | |
| /** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ | |
| typedef const RTGCUINTPTR32 *PCRTGCUINTPTR32; | |
| /** Unsigned integer which can contain a 64 bits GC pointer. */ | |
| typedef uint64_t RTGCUINTPTR64; | |
| /** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ | |
| typedef RTGCUINTPTR64 *PRTGCUINTPTR64; | |
| /** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ | |
| typedef const RTGCUINTPTR64 *PCRTGCUINTPTR64; | |
| /** Guest Physical Memory Address.*/ | |
| typedef uint64_t RTGCPHYS; | |
| /** Pointer to Guest Physical Memory Address. */ | |
| typedef RTGCPHYS *PRTGCPHYS; | |
| /** Pointer to const Guest Physical Memory Address. */ | |
| typedef const RTGCPHYS *PCRTGCPHYS; | |
| /** @def NIL_RTGCPHYS | |
| * NIL GC Physical Address. | |
| * NIL_RTGCPHYS is used to signal an invalid physical address, similar | |
| * to the NULL pointer. Note that this value may actually be valid in | |
| * some contexts. | |
| */ | |
| #define NIL_RTGCPHYS (~(RTGCPHYS)0U) | |
| /** Max guest physical memory address value. */ | |
| #define RTGCPHYS_MAX UINT64_MAX | |
| /** Guest Physical Memory Address; limited to 32 bits.*/ | |
| typedef uint32_t RTGCPHYS32; | |
| /** Pointer to Guest Physical Memory Address. */ | |
| typedef RTGCPHYS32 *PRTGCPHYS32; | |
| /** Pointer to const Guest Physical Memory Address. */ | |
| typedef const RTGCPHYS32 *PCRTGCPHYS32; | |
| /** @def NIL_RTGCPHYS32 | |
| * NIL GC Physical Address. | |
| * NIL_RTGCPHYS32 is used to signal an invalid physical address, similar | |
| * to the NULL pointer. Note that this value may actually be valid in | |
| * some contexts. | |
| */ | |
| #define NIL_RTGCPHYS32 (~(RTGCPHYS32)0) | |
| /** Guest Physical Memory Address; limited to 64 bits.*/ | |
| typedef uint64_t RTGCPHYS64; | |
| /** Pointer to Guest Physical Memory Address. */ | |
| typedef RTGCPHYS64 *PRTGCPHYS64; | |
| /** Pointer to const Guest Physical Memory Address. */ | |
| typedef const RTGCPHYS64 *PCRTGCPHYS64; | |
| /** @def NIL_RTGCPHYS64 | |
| * NIL GC Physical Address. | |
| * NIL_RTGCPHYS64 is used to signal an invalid physical address, similar | |
| * to the NULL pointer. Note that this value may actually be valid in | |
| * some contexts. | |
| */ | |
| #define NIL_RTGCPHYS64 (~(RTGCPHYS64)0) | |
| /** Guest context pointer, 32 bits. | |
| * Keep in mind that this type is an unsigned integer in | |
| * HC and void pointer in GC. | |
| */ | |
| typedef RTGCUINTPTR32 RTGCPTR32; | |
| /** Pointer to a guest context pointer. */ | |
| typedef RTGCPTR32 *PRTGCPTR32; | |
| /** Pointer to a const guest context pointer. */ | |
| typedef const RTGCPTR32 *PCRTGCPTR32; | |
| /** @def NIL_RTGCPTR32 | |
| * NIL GC pointer. | |
| */ | |
| #define NIL_RTGCPTR32 ((RTGCPTR32)0) | |
| /** Guest context pointer, 64 bits. | |
| */ | |
| typedef RTGCUINTPTR64 RTGCPTR64; | |
| /** Pointer to a guest context pointer. */ | |
| typedef RTGCPTR64 *PRTGCPTR64; | |
| /** Pointer to a const guest context pointer. */ | |
| typedef const RTGCPTR64 *PCRTGCPTR64; | |
| /** @def NIL_RTGCPTR64 | |
| * NIL GC pointer. | |
| */ | |
| #define NIL_RTGCPTR64 ((RTGCPTR64)0) | |
| /** Guest context pointer. | |
| * Keep in mind that this type is an unsigned integer in | |
| * HC and void pointer in GC. | |
| */ | |
| #if GC_ARCH_BITS == 64 | |
| typedef RTGCPTR64 RTGCPTR; | |
| /** Pointer to a guest context pointer. */ | |
| typedef PRTGCPTR64 PRTGCPTR; | |
| /** Pointer to a const guest context pointer. */ | |
| typedef PCRTGCPTR64 PCRTGCPTR; | |
| /** @def NIL_RTGCPTR | |
| * NIL GC pointer. | |
| */ | |
| # define NIL_RTGCPTR NIL_RTGCPTR64 | |
| /** Max RTGCPTR value. */ | |
| # define RTGCPTR_MAX UINT64_MAX | |
| #elif GC_ARCH_BITS == 32 | |
| typedef RTGCPTR32 RTGCPTR; | |
| /** Pointer to a guest context pointer. */ | |
| typedef PRTGCPTR32 PRTGCPTR; | |
| /** Pointer to a const guest context pointer. */ | |
| typedef PCRTGCPTR32 PCRTGCPTR; | |
| /** @def NIL_RTGCPTR | |
| * NIL GC pointer. | |
| */ | |
| # define NIL_RTGCPTR NIL_RTGCPTR32 | |
| /** Max RTGCPTR value. */ | |
| # define RTGCPTR_MAX UINT32_MAX | |
| #else | |
| # error "Unsupported GC_ARCH_BITS!" | |
| #endif | |
| /** Unsigned integer register in the guest context. */ | |
| typedef uint32_t RTGCUINTREG32; | |
| /** Pointer to an unsigned integer register in the guest context. */ | |
| typedef RTGCUINTREG32 *PRTGCUINTREG32; | |
| /** Pointer to a const unsigned integer register in the guest context. */ | |
| typedef const RTGCUINTREG32 *PCRTGCUINTREG32; | |
| typedef uint64_t RTGCUINTREG64; | |
| /** Pointer to an unsigned integer register in the guest context. */ | |
| typedef RTGCUINTREG64 *PRTGCUINTREG64; | |
| /** Pointer to a const unsigned integer register in the guest context. */ | |
| typedef const RTGCUINTREG64 *PCRTGCUINTREG64; | |
| #if GC_ARCH_BITS == 64 | |
| typedef RTGCUINTREG64 RTGCUINTREG; | |
| #elif GC_ARCH_BITS == 32 | |
| typedef RTGCUINTREG32 RTGCUINTREG; | |
| #else | |
| # error "Unsupported GC_ARCH_BITS!" | |
| #endif | |
| /** Pointer to an unsigned integer register in the guest context. */ | |
| typedef RTGCUINTREG *PRTGCUINTREG; | |
| /** Pointer to a const unsigned integer register in the guest context. */ | |
| typedef const RTGCUINTREG *PCRTGCUINTREG; | |
| /** @} */ | |
| /** @defgroup grp_rt_types_rc Raw mode Context Basic Types | |
| * @{ | |
| */ | |
| /** Raw mode context pointer; a 32 bits guest context pointer. | |
| * Keep in mind that this type is an unsigned integer in | |
| * HC and void pointer in RC. | |
| */ | |
| #ifdef IN_RC | |
| typedef void * RTRCPTR; | |
| #else | |
| typedef uint32_t RTRCPTR; | |
| #endif | |
| /** Pointer to a raw mode context pointer. */ | |
| typedef RTRCPTR *PRTRCPTR; | |
| /** Pointer to a const raw mode context pointer. */ | |
| typedef const RTRCPTR *PCRTRCPTR; | |
| /** @def NIL_RTGCPTR | |
| * NIL RC pointer. | |
| */ | |
| #ifndef IN_RC | |
| # define NIL_RTRCPTR ((RTRCPTR)0) | |
| #else | |
| # define NIL_RTRCPTR (NULL) | |
| #endif | |
| /** @def RTRCPTR_MAX | |
| * The maximum value a RTRCPTR can have. Mostly used as INVALID value. | |
| */ | |
| #define RTRCPTR_MAX ((RTRCPTR)UINT32_MAX) | |
| /** Raw mode context pointer, unsigned integer variant. */ | |
| typedef int32_t RTRCINTPTR; | |
| /** @def RTRCUINTPTR_MAX | |
| * The maximum value a RTRCUINPTR can have. | |
| */ | |
| #define RTRCUINTPTR_MAX ((RTRCUINTPTR)UINT32_MAX) | |
| /** Raw mode context pointer, signed integer variant. */ | |
| typedef uint32_t RTRCUINTPTR; | |
| /** @def RTRCINTPTR_MIN | |
| * The minimum value a RTRCINPTR can have. | |
| */ | |
| #define RTRCINTPTR_MIN ((RTRCINTPTR)INT32_MIN) | |
| /** @def RTRCINTPTR_MAX | |
| * The maximum value a RTRCINPTR can have. | |
| */ | |
| #define RTRCINTPTR_MAX ((RTRCINTPTR)INT32_MAX) | |
| /** @} */ | |
| /** @defgroup grp_rt_types_cc Current Context Basic Types | |
| * @{ | |
| */ | |
| /** Current Context Physical Memory Address.*/ | |
| #ifdef IN_RC | |
| typedef RTGCPHYS RTCCPHYS; | |
| #else | |
| typedef RTHCPHYS RTCCPHYS; | |
| #endif | |
| /** Pointer to Current Context Physical Memory Address. */ | |
| typedef RTCCPHYS *PRTCCPHYS; | |
| /** Pointer to const Current Context Physical Memory Address. */ | |
| typedef const RTCCPHYS *PCRTCCPHYS; | |
| /** @def NIL_RTCCPHYS | |
| * NIL CC Physical Address. | |
| * NIL_RTCCPHYS is used to signal an invalid physical address, similar | |
| * to the NULL pointer. | |
| */ | |
| #ifdef IN_RC | |
| # define NIL_RTCCPHYS NIL_RTGCPHYS | |
| #else | |
| # define NIL_RTCCPHYS NIL_RTHCPHYS | |
| #endif | |
| /** Unsigned integer register in the current context. */ | |
| #if ARCH_BITS == 32 | |
| typedef uint32_t RTCCUINTREG; | |
| #elif ARCH_BITS == 64 | |
| typedef uint64_t RTCCUINTREG; | |
| #else | |
| # error "Unsupported ARCH_BITS!" | |
| #endif | |
| /** Pointer to an unsigned integer register in the current context. */ | |
| typedef RTCCUINTREG *PRTCCUINTREG; | |
| /** Pointer to a const unsigned integer register in the current context. */ | |
| typedef RTCCUINTREG const *PCRTCCUINTREG; | |
| /** Signed integer register in the current context. */ | |
| #if ARCH_BITS == 32 | |
| typedef int32_t RTCCINTREG; | |
| #elif ARCH_BITS == 64 | |
| typedef int64_t RTCCINTREG; | |
| #endif | |
| /** Pointer to a signed integer register in the current context. */ | |
| typedef RTCCINTREG *PRTCCINTREG; | |
| /** Pointer to a const signed integer register in the current context. */ | |
| typedef RTCCINTREG const *PCRTCCINTREG; | |
| /** @} */ | |
| /** Pointer to a big integer number. */ | |
| typedef struct RTBIGNUM *PRTBIGNUM; | |
| /** Pointer to a const big integer number. */ | |
| typedef struct RTBIGNUM const *PCRTBIGNUM; | |
| /** Pointer to a critical section. */ | |
| typedef struct RTCRITSECT *PRTCRITSECT; | |
| /** Pointer to a const critical section. */ | |
| typedef const struct RTCRITSECT *PCRTCRITSECT; | |
| /** Pointer to a read/write critical section. */ | |
| typedef struct RTCRITSECTRW *PRTCRITSECTRW; | |
| /** Pointer to a const read/write critical section. */ | |
| typedef const struct RTCRITSECTRW *PCRTCRITSECTRW; | |
| /** Condition variable handle. */ | |
| typedef R3PTRTYPE(struct RTCONDVARINTERNAL *) RTCONDVAR; | |
| /** Pointer to a condition variable handle. */ | |
| typedef RTCONDVAR *PRTCONDVAR; | |
| /** Nil condition variable handle. */ | |
| #define NIL_RTCONDVAR 0 | |
| /** Cryptographic (certificate) store handle. */ | |
| typedef R3R0PTRTYPE(struct RTCRSTOREINT *) RTCRSTORE; | |
| /** Pointer to a Cryptographic (certificate) store handle. */ | |
| typedef RTCRSTORE *PRTCRSTORE; | |
| /** Nil Cryptographic (certificate) store handle. */ | |
| #define NIL_RTCRSTORE 0 | |
| /** Pointer to a const (store) certificate context. */ | |
| typedef struct RTCRCERTCTX const *PCRTCRCERTCTX; | |
| /** Cryptographic message digest handle. */ | |
| typedef R3R0PTRTYPE(struct RTCRDIGESTINT *) RTCRDIGEST; | |
| /** Pointer to a cryptographic message digest handle. */ | |
| typedef RTCRDIGEST *PRTCRDIGEST; | |
| /** NIL cryptographic message digest handle. */ | |
| #define NIL_RTCRDIGEST (0) | |
| /** Public key encryption schema handle. */ | |
| typedef R3R0PTRTYPE(struct RTCRPKIXENCRYPTIONINT *) RTCRPKIXENCRYPTION; | |
| /** Pointer to a public key encryption schema handle. */ | |
| typedef RTCRPKIXENCRYPTION *PRTCRPKIXENCRYPTION; | |
| /** NIL public key encryption schema handle */ | |
| #define NIL_RTCRPKIXENCRYPTION (0) | |
| /** Public key signature schema handle. */ | |
| typedef R3R0PTRTYPE(struct RTCRPKIXSIGNATUREINT *) RTCRPKIXSIGNATURE; | |
| /** Pointer to a public key signature schema handle. */ | |
| typedef RTCRPKIXSIGNATURE *PRTCRPKIXSIGNATURE; | |
| /** NIL public key signature schema handle */ | |
| #define NIL_RTCRPKIXSIGNATURE (0) | |
| /** X.509 certificate paths builder & validator handle. */ | |
| typedef R3R0PTRTYPE(struct RTCRX509CERTPATHSINT *) RTCRX509CERTPATHS; | |
| /** Pointer to a certificate paths builder & validator handle. */ | |
| typedef RTCRX509CERTPATHS *PRTCRX509CERTPATHS; | |
| /** Nil certificate paths builder & validator handle. */ | |
| #define NIL_RTCRX509CERTPATHS 0 | |
| /** File handle. */ | |
| typedef R3R0PTRTYPE(struct RTFILEINT *) RTFILE; | |
| /** Pointer to file handle. */ | |
| typedef RTFILE *PRTFILE; | |
| /** Nil file handle. */ | |
| #define NIL_RTFILE ((RTFILE)~(RTHCINTPTR)0) | |
| /** Async I/O request handle. */ | |
| typedef R3PTRTYPE(struct RTFILEAIOREQINTERNAL *) RTFILEAIOREQ; | |
| /** Pointer to an async I/O request handle. */ | |
| typedef RTFILEAIOREQ *PRTFILEAIOREQ; | |
| /** Nil request handle. */ | |
| #define NIL_RTFILEAIOREQ 0 | |
| /** Async I/O completion context handle. */ | |
| typedef R3PTRTYPE(struct RTFILEAIOCTXINTERNAL *) RTFILEAIOCTX; | |
| /** Pointer to an async I/O completion context handle. */ | |
| typedef RTFILEAIOCTX *PRTFILEAIOCTX; | |
| /** Nil context handle. */ | |
| #define NIL_RTFILEAIOCTX 0 | |
| /** Loader module handle. */ | |
| typedef R3R0PTRTYPE(struct RTLDRMODINTERNAL *) RTLDRMOD; | |
| /** Pointer to a loader module handle. */ | |
| typedef RTLDRMOD *PRTLDRMOD; | |
| /** Nil loader module handle. */ | |
| #define NIL_RTLDRMOD 0 | |
| /** Lock validator class handle. */ | |
| typedef R3R0PTRTYPE(struct RTLOCKVALCLASSINT *) RTLOCKVALCLASS; | |
| /** Pointer to a lock validator class handle. */ | |
| typedef RTLOCKVALCLASS *PRTLOCKVALCLASS; | |
| /** Nil lock validator class handle. */ | |
| #define NIL_RTLOCKVALCLASS ((RTLOCKVALCLASS)0) | |
| /** Ring-0 memory object handle. */ | |
| typedef R0PTRTYPE(struct RTR0MEMOBJINTERNAL *) RTR0MEMOBJ; | |
| /** Pointer to a Ring-0 memory object handle. */ | |
| typedef RTR0MEMOBJ *PRTR0MEMOBJ; | |
| /** Nil ring-0 memory object handle. */ | |
| #define NIL_RTR0MEMOBJ 0 | |
| /** Native thread handle. */ | |
| typedef RTHCUINTPTR RTNATIVETHREAD; | |
| /** Pointer to an native thread handle. */ | |
| typedef RTNATIVETHREAD *PRTNATIVETHREAD; | |
| /** Nil native thread handle. */ | |
| #define NIL_RTNATIVETHREAD (~(RTNATIVETHREAD)0) | |
| /** Pipe handle. */ | |
| typedef R3R0PTRTYPE(struct RTPIPEINTERNAL *) RTPIPE; | |
| /** Pointer to a pipe handle. */ | |
| typedef RTPIPE *PRTPIPE; | |
| /** Nil pipe handle. | |
| * @remarks This is not 0 because of UNIX and OS/2 handle values. Take care! */ | |
| #define NIL_RTPIPE ((RTPIPE)RTHCUINTPTR_MAX) | |
| /** @typedef RTPOLLSET | |
| * Poll set handle. */ | |
| typedef R3R0PTRTYPE(struct RTPOLLSETINTERNAL *) RTPOLLSET; | |
| /** Pointer to a poll set handle. */ | |
| typedef RTPOLLSET *PRTPOLLSET; | |
| /** Nil poll set handle handle. */ | |
| #define NIL_RTPOLLSET ((RTPOLLSET)0) | |
| /** Process identifier. */ | |
| typedef uint32_t RTPROCESS; | |
| /** Pointer to a process identifier. */ | |
| typedef RTPROCESS *PRTPROCESS; | |
| /** Nil process identifier. */ | |
| #define NIL_RTPROCESS (~(RTPROCESS)0) | |
| /** Process ring-0 handle. */ | |
| typedef RTR0UINTPTR RTR0PROCESS; | |
| /** Pointer to a ring-0 process handle. */ | |
| typedef RTR0PROCESS *PRTR0PROCESS; | |
| /** Nil ring-0 process handle. */ | |
| #define NIL_RTR0PROCESS (~(RTR0PROCESS)0) | |
| /** @typedef RTSEMEVENT | |
| * Event Semaphore handle. */ | |
| typedef R3R0PTRTYPE(struct RTSEMEVENTINTERNAL *) RTSEMEVENT; | |
| /** Pointer to an event semaphore handle. */ | |
| typedef RTSEMEVENT *PRTSEMEVENT; | |
| /** Nil event semaphore handle. */ | |
| #define NIL_RTSEMEVENT 0 | |
| /** @typedef RTSEMEVENTMULTI | |
| * Event Multiple Release Semaphore handle. */ | |
| typedef R3R0PTRTYPE(struct RTSEMEVENTMULTIINTERNAL *) RTSEMEVENTMULTI; | |
| /** Pointer to an event multiple release semaphore handle. */ | |
| typedef RTSEMEVENTMULTI *PRTSEMEVENTMULTI; | |
| /** Nil multiple release event semaphore handle. */ | |
| #define NIL_RTSEMEVENTMULTI 0 | |
| /** @typedef RTSEMFASTMUTEX | |
| * Fast mutex Semaphore handle. */ | |
| typedef R3R0PTRTYPE(struct RTSEMFASTMUTEXINTERNAL *) RTSEMFASTMUTEX; | |
| /** Pointer to a fast mutex semaphore handle. */ | |
| typedef RTSEMFASTMUTEX *PRTSEMFASTMUTEX; | |
| /** Nil fast mutex semaphore handle. */ | |
| #define NIL_RTSEMFASTMUTEX 0 | |
| /** @typedef RTSEMMUTEX | |
| * Mutex Semaphore handle. */ | |
| typedef R3R0PTRTYPE(struct RTSEMMUTEXINTERNAL *) RTSEMMUTEX; | |
| /** Pointer to a mutex semaphore handle. */ | |
| typedef RTSEMMUTEX *PRTSEMMUTEX; | |
| /** Nil mutex semaphore handle. */ | |
| #define NIL_RTSEMMUTEX 0 | |
| /** @typedef RTSEMSPINMUTEX | |
| * Spinning mutex Semaphore handle. */ | |
| typedef R3R0PTRTYPE(struct RTSEMSPINMUTEXINTERNAL *) RTSEMSPINMUTEX; | |
| /** Pointer to a spinning mutex semaphore handle. */ | |
| typedef RTSEMSPINMUTEX *PRTSEMSPINMUTEX; | |
| /** Nil spinning mutex semaphore handle. */ | |
| #define NIL_RTSEMSPINMUTEX 0 | |
| /** @typedef RTSEMRW | |
| * Read/Write Semaphore handle. */ | |
| typedef R3R0PTRTYPE(struct RTSEMRWINTERNAL *) RTSEMRW; | |
| /** Pointer to a read/write semaphore handle. */ | |
| typedef RTSEMRW *PRTSEMRW; | |
| /** Nil read/write semaphore handle. */ | |
| #define NIL_RTSEMRW 0 | |
| /** @typedef RTSEMXROADS | |
| * Crossroads semaphore handle. */ | |
| typedef R3R0PTRTYPE(struct RTSEMXROADSINTERNAL *) RTSEMXROADS; | |
| /** Pointer to a crossroads semaphore handle. */ | |
| typedef RTSEMXROADS *PRTSEMXROADS; | |
| /** Nil crossroads semaphore handle. */ | |
| #define NIL_RTSEMXROADS ((RTSEMXROADS)0) | |
| /** Spinlock handle. */ | |
| typedef R3R0PTRTYPE(struct RTSPINLOCKINTERNAL *) RTSPINLOCK; | |
| /** Pointer to a spinlock handle. */ | |
| typedef RTSPINLOCK *PRTSPINLOCK; | |
| /** Nil spinlock handle. */ | |
| #define NIL_RTSPINLOCK 0 | |
| /** Socket handle. */ | |
| typedef R3R0PTRTYPE(struct RTSOCKETINT *) RTSOCKET; | |
| /** Pointer to socket handle. */ | |
| typedef RTSOCKET *PRTSOCKET; | |
| /** Nil socket handle. */ | |
| #define NIL_RTSOCKET ((RTSOCKET)0) | |
| /** Pointer to a RTTCPSERVER handle. */ | |
| typedef struct RTTCPSERVER *PRTTCPSERVER; | |
| /** Pointer to a RTTCPSERVER handle. */ | |
| typedef PRTTCPSERVER *PPRTTCPSERVER; | |
| /** Nil RTTCPSERVER handle. */ | |
| #define NIL_RTTCPSERVER ((PRTTCPSERVER)0) | |
| /** Pointer to a RTUDPSERVER handle. */ | |
| typedef struct RTUDPSERVER *PRTUDPSERVER; | |
| /** Pointer to a RTUDPSERVER handle. */ | |
| typedef PRTUDPSERVER *PPRTUDPSERVER; | |
| /** Nil RTUDPSERVER handle. */ | |
| #define NIL_RTUDPSERVER ((PRTUDPSERVER)0) | |
| /** Thread handle.*/ | |
| typedef R3R0PTRTYPE(struct RTTHREADINT *) RTTHREAD; | |
| /** Pointer to thread handle. */ | |
| typedef RTTHREAD *PRTTHREAD; | |
| /** Nil thread handle. */ | |
| #define NIL_RTTHREAD 0 | |
| /** Thread context switching hook handle. */ | |
| typedef R0PTRTYPE(struct RTTHREADCTXHOOKINT *) RTTHREADCTXHOOK; | |
| /** Pointer to Thread context switching hook handle. */ | |
| typedef RTTHREADCTXHOOK *PRTTHREADCTXHOOK; | |
| /** Nil Thread context switching hook handle. */ | |
| #define NIL_RTTHREADCTXHOOK ((RTTHREADCTXHOOK)0) | |
| /** A TLS index. */ | |
| typedef RTHCINTPTR RTTLS; | |
| /** Pointer to a TLS index. */ | |
| typedef RTTLS *PRTTLS; | |
| /** Pointer to a const TLS index. */ | |
| typedef RTTLS const *PCRTTLS; | |
| /** NIL TLS index value. */ | |
| #define NIL_RTTLS ((RTTLS)-1) | |
| /** Trace buffer handle. | |
| * @remarks This is not a R3/R0 type like most other handles! | |
| */ | |
| typedef struct RTTRACEBUFINT *RTTRACEBUF; | |
| /** Pointer to a trace buffer handle. */ | |
| typedef RTTRACEBUF *PRTTRACEBUF; | |
| /** Nil trace buffer handle. */ | |
| #define NIL_RTTRACEBUF ((RTTRACEBUF)0) | |
| /** The handle of the default trace buffer. | |
| * This can be used with any of the RTTraceBufAdd APIs. */ | |
| #define RTTRACEBUF_DEFAULT ((RTTRACEBUF)-2) | |
| /** Handle to a simple heap. */ | |
| typedef R3R0PTRTYPE(struct RTHEAPSIMPLEINTERNAL *) RTHEAPSIMPLE; | |
| /** Pointer to a handle to a simple heap. */ | |
| typedef RTHEAPSIMPLE *PRTHEAPSIMPLE; | |
| /** NIL simple heap handle. */ | |
| #define NIL_RTHEAPSIMPLE ((RTHEAPSIMPLE)0) | |
| /** Handle to an offset based heap. */ | |
| typedef R3R0PTRTYPE(struct RTHEAPOFFSETINTERNAL *) RTHEAPOFFSET; | |
| /** Pointer to a handle to an offset based heap. */ | |
| typedef RTHEAPOFFSET *PRTHEAPOFFSET; | |
| /** NIL offset based heap handle. */ | |
| #define NIL_RTHEAPOFFSET ((RTHEAPOFFSET)0) | |
| /** Handle to an environment block. */ | |
| typedef R3PTRTYPE(struct RTENVINTERNAL *) RTENV; | |
| /** Pointer to a handle to an environment block. */ | |
| typedef RTENV *PRTENV; | |
| /** NIL simple heap handle. */ | |
| #define NIL_RTENV ((RTENV)0) | |
| /** A CPU identifier. | |
| * @remarks This doesn't have to correspond to the APIC ID (intel/amd). Nor | |
| * does it have to correspond to the bits in the affinity mask, at | |
| * least not until we've sorted out Windows NT. */ | |
| typedef uint32_t RTCPUID; | |
| /** Pointer to a CPU identifier. */ | |
| typedef RTCPUID *PRTCPUID; | |
| /** Pointer to a const CPU identifier. */ | |
| typedef RTCPUID const *PCRTCPUID; | |
| /** Nil CPU Id. */ | |
| #define NIL_RTCPUID ((RTCPUID)~0) | |
| /** The maximum number of CPUs a set can contain and IPRT is able | |
| * to reference. (Should be max of support arch/platforms.) | |
| * @remarks Must be a multiple of 64 (see RTCPUSET). */ | |
| #if defined(RT_ARCH_X86) || defined(RT_ARCH_AMD64) | |
| # define RTCPUSET_MAX_CPUS 256 | |
| #elif defined(RT_ARCH_SPARC) || defined(RT_ARCH_SPARC64) | |
| # define RTCPUSET_MAX_CPUS 1024 | |
| #else | |
| # define RTCPUSET_MAX_CPUS 64 | |
| #endif | |
| /** A CPU set. | |
| * @note Treat this as an opaque type and always use RTCpuSet* for | |
| * manipulating it. */ | |
| typedef struct RTCPUSET | |
| { | |
| /** The bitmap. */ | |
| uint64_t bmSet[RTCPUSET_MAX_CPUS / 64]; | |
| } RTCPUSET; | |
| /** Pointer to a CPU set. */ | |
| typedef RTCPUSET *PRTCPUSET; | |
| /** Pointer to a const CPU set. */ | |
| typedef RTCPUSET const *PCRTCPUSET; | |
| /** A handle table handle. */ | |
| typedef R3R0PTRTYPE(struct RTHANDLETABLEINT *) RTHANDLETABLE; | |
| /** A pointer to a handle table handle. */ | |
| typedef RTHANDLETABLE *PRTHANDLETABLE; | |
| /** @def NIL_RTHANDLETABLE | |
| * NIL handle table handle. */ | |
| #define NIL_RTHANDLETABLE ((RTHANDLETABLE)0) | |
| /** A handle to a low resolution timer. */ | |
| typedef R3R0PTRTYPE(struct RTTIMERLRINT *) RTTIMERLR; | |
| /** A pointer to a low resolution timer handle. */ | |
| typedef RTTIMERLR *PRTTIMERLR; | |
| /** @def NIL_RTTIMERLR | |
| * NIL low resolution timer handle value. */ | |
| #define NIL_RTTIMERLR ((RTTIMERLR)0) | |
| /** Handle to a random number generator. */ | |
| typedef R3R0PTRTYPE(struct RTRANDINT *) RTRAND; | |
| /** Pointer to a random number generator handle. */ | |
| typedef RTRAND *PRTRAND; | |
| /** NIL random number generator handle value. */ | |
| #define NIL_RTRAND ((RTRAND)0) | |
| /** Debug address space handle. */ | |
| typedef R3R0PTRTYPE(struct RTDBGASINT *) RTDBGAS; | |
| /** Pointer to a debug address space handle. */ | |
| typedef RTDBGAS *PRTDBGAS; | |
| /** NIL debug address space handle. */ | |
| #define NIL_RTDBGAS ((RTDBGAS)0) | |
| /** Debug module handle. */ | |
| typedef R3R0PTRTYPE(struct RTDBGMODINT *) RTDBGMOD; | |
| /** Pointer to a debug module handle. */ | |
| typedef RTDBGMOD *PRTDBGMOD; | |
| /** NIL debug module handle. */ | |
| #define NIL_RTDBGMOD ((RTDBGMOD)0) | |
| /** Manifest handle. */ | |
| typedef struct RTMANIFESTINT *RTMANIFEST; | |
| /** Pointer to a manifest handle. */ | |
| typedef RTMANIFEST *PRTMANIFEST; | |
| /** NIL manifest handle. */ | |
| #define NIL_RTMANIFEST ((RTMANIFEST)~(uintptr_t)0) | |
| /** Memory pool handle. */ | |
| typedef R3R0PTRTYPE(struct RTMEMPOOLINT *) RTMEMPOOL; | |
| /** Pointer to a memory pool handle. */ | |
| typedef RTMEMPOOL *PRTMEMPOOL; | |
| /** NIL memory pool handle. */ | |
| #define NIL_RTMEMPOOL ((RTMEMPOOL)0) | |
| /** The default memory pool handle. */ | |
| #define RTMEMPOOL_DEFAULT ((RTMEMPOOL)-2) | |
| /** String cache handle. */ | |
| typedef R3R0PTRTYPE(struct RTSTRCACHEINT *) RTSTRCACHE; | |
| /** Pointer to a string cache handle. */ | |
| typedef RTSTRCACHE *PRTSTRCACHE; | |
| /** NIL string cache handle. */ | |
| #define NIL_RTSTRCACHE ((RTSTRCACHE)0) | |
| /** The default string cache handle. */ | |
| #define RTSTRCACHE_DEFAULT ((RTSTRCACHE)-2) | |
| /** Virtual Filesystem handle. */ | |
| typedef struct RTVFSINTERNAL *RTVFS; | |
| /** Pointer to a VFS handle. */ | |
| typedef RTVFS *PRTVFS; | |
| /** A NIL VFS handle. */ | |
| #define NIL_RTVFS ((RTVFS)~(uintptr_t)0) | |
| /** Virtual Filesystem base object handle. */ | |
| typedef struct RTVFSOBJINTERNAL *RTVFSOBJ; | |
| /** Pointer to a VFS base object handle. */ | |
| typedef RTVFSOBJ *PRTVFSOBJ; | |
| /** A NIL VFS base object handle. */ | |
| #define NIL_RTVFSOBJ ((RTVFSOBJ)~(uintptr_t)0) | |
| /** Virtual Filesystem directory handle. */ | |
| typedef struct RTVFSDIRINTERNAL *RTVFSDIR; | |
| /** Pointer to a VFS directory handle. */ | |
| typedef RTVFSDIR *PRTVFSDIR; | |
| /** A NIL VFS directory handle. */ | |
| #define NIL_RTVFSDIR ((RTVFSDIR)~(uintptr_t)0) | |
| /** Virtual Filesystem filesystem stream handle. */ | |
| typedef struct RTVFSFSSTREAMINTERNAL *RTVFSFSSTREAM; | |
| /** Pointer to a VFS filesystem stream handle. */ | |
| typedef RTVFSFSSTREAM *PRTVFSFSSTREAM; | |
| /** A NIL VFS filesystem stream handle. */ | |
| #define NIL_RTVFSFSSTREAM ((RTVFSFSSTREAM)~(uintptr_t)0) | |
| /** Virtual Filesystem I/O stream handle. */ | |
| typedef struct RTVFSIOSTREAMINTERNAL *RTVFSIOSTREAM; | |
| /** Pointer to a VFS I/O stream handle. */ | |
| typedef RTVFSIOSTREAM *PRTVFSIOSTREAM; | |
| /** A NIL VFS I/O stream handle. */ | |
| #define NIL_RTVFSIOSTREAM ((RTVFSIOSTREAM)~(uintptr_t)0) | |
| /** Virtual Filesystem file handle. */ | |
| typedef struct RTVFSFILEINTERNAL *RTVFSFILE; | |
| /** Pointer to a VFS file handle. */ | |
| typedef RTVFSFILE *PRTVFSFILE; | |
| /** A NIL VFS file handle. */ | |
| #define NIL_RTVFSFILE ((RTVFSFILE)~(uintptr_t)0) | |
| /** Virtual Filesystem symbolic link handle. */ | |
| typedef struct RTVFSSYMLINKINTERNAL *RTVFSSYMLINK; | |
| /** Pointer to a VFS symbolic link handle. */ | |
| typedef RTVFSSYMLINK *PRTVFSSYMLINK; | |
| /** A NIL VFS symbolic link handle. */ | |
| #define NIL_RTVFSSYMLINK ((RTVFSSYMLINK)~(uintptr_t)0) | |
| /** Async I/O manager handle. */ | |
| typedef struct RTAIOMGRINT *RTAIOMGR; | |
| /** Pointer to a async I/O manager handle. */ | |
| typedef RTAIOMGR *PRTAIOMGR; | |
| /** A NIL async I/O manager handle. */ | |
| #define NIL_RTAIOMGR ((RTAIOMGR)~(uintptr_t)0) | |
| /** Async I/O manager file handle. */ | |
| typedef struct RTAIOMGRFILEINT *RTAIOMGRFILE; | |
| /** Pointer to a async I/O manager file handle. */ | |
| typedef RTAIOMGRFILE *PRTAIOMGRFILE; | |
| /** A NIL async I/O manager file handle. */ | |
| #define NIL_RTAIOMGRFILE ((RTAIOMGRFILE)~(uintptr_t)0) | |
| /** | |
| * Handle type. | |
| * | |
| * This is usually used together with RTHANDLEUNION. | |
| */ | |
| typedef enum RTHANDLETYPE | |
| { | |
| /** The invalid zero value. */ | |
| RTHANDLETYPE_INVALID = 0, | |
| /** File handle. */ | |
| RTHANDLETYPE_FILE, | |
| /** Pipe handle */ | |
| RTHANDLETYPE_PIPE, | |
| /** Socket handle. */ | |
| RTHANDLETYPE_SOCKET, | |
| /** Thread handle. */ | |
| RTHANDLETYPE_THREAD, | |
| /** The end of the valid values. */ | |
| RTHANDLETYPE_END, | |
| /** The 32-bit type blow up. */ | |
| RTHANDLETYPE_32BIT_HACK = 0x7fffffff | |
| } RTHANDLETYPE; | |
| /** Pointer to a handle type. */ | |
| typedef RTHANDLETYPE *PRTHANDLETYPE; | |
| /** | |
| * Handle union. | |
| * | |
| * This is usually used together with RTHANDLETYPE or as RTHANDLE. | |
| */ | |
| typedef union RTHANDLEUNION | |
| { | |
| RTFILE hFile; /**< File handle. */ | |
| RTPIPE hPipe; /**< Pipe handle. */ | |
| RTSOCKET hSocket; /**< Socket handle. */ | |
| RTTHREAD hThread; /**< Thread handle. */ | |
| /** Generic integer handle value. | |
| * Note that RTFILE is not yet pointer sized, so accessing it via this member | |
| * isn't necessarily safe or fully portable. */ | |
| RTHCUINTPTR uInt; | |
| } RTHANDLEUNION; | |
| /** Pointer to a handle union. */ | |
| typedef RTHANDLEUNION *PRTHANDLEUNION; | |
| /** Pointer to a const handle union. */ | |
| typedef RTHANDLEUNION const *PCRTHANDLEUNION; | |
| /** | |
| * Generic handle. | |
| */ | |
| typedef struct RTHANDLE | |
| { | |
| /** The handle type. */ | |
| RTHANDLETYPE enmType; | |
| /** The handle value. */ | |
| RTHANDLEUNION u; | |
| } RTHANDLE; | |
| /** Pointer to a generic handle. */ | |
| typedef RTHANDLE *PRTHANDLE; | |
| /** Pointer to a const generic handle. */ | |
| typedef RTHANDLE const *PCRTHANDLE; | |
| /** | |
| * Standard handles. | |
| * | |
| * @remarks These have the correct file descriptor values for unixy systems and | |
| * can be used directly in code specific to those platforms. | |
| */ | |
| typedef enum RTHANDLESTD | |
| { | |
| /** Invalid standard handle. */ | |
| RTHANDLESTD_INVALID = -1, | |
| /** The standard input handle. */ | |
| RTHANDLESTD_INPUT = 0, | |
| /** The standard output handle. */ | |
| RTHANDLESTD_OUTPUT, | |
| /** The standard error handle. */ | |
| RTHANDLESTD_ERROR, | |
| /** The typical 32-bit type hack. */ | |
| RTHANDLESTD_32BIT_HACK = 0x7fffffff | |
| } RTHANDLESTD; | |
| /** | |
| * Error info. | |
| * | |
| * See RTErrInfo*. | |
| */ | |
| typedef struct RTERRINFO | |
| { | |
| /** Flags, see RTERRINFO_FLAGS_XXX. */ | |
| uint32_t fFlags; | |
| /** The status code. */ | |
| int32_t rc; | |
| /** The size of the message */ | |
| size_t cbMsg; | |
| /** The error buffer. */ | |
| char *pszMsg; | |
| /** Reserved for future use. */ | |
| void *apvReserved[2]; | |
| } RTERRINFO; | |
| /** Pointer to an error info structure. */ | |
| typedef RTERRINFO *PRTERRINFO; | |
| /** Pointer to a const error info structure. */ | |
| typedef RTERRINFO const *PCRTERRINFO; | |
| /** | |
| * Static error info structure, see RTErrInfoInitStatic. | |
| */ | |
| typedef struct RTERRINFOSTATIC | |
| { | |
| /** The core error info. */ | |
| RTERRINFO Core; | |
| /** The static message buffer. */ | |
| char szMsg[3072]; | |
| } RTERRINFOSTATIC; | |
| /** Pointer to a error info buffer. */ | |
| typedef RTERRINFOSTATIC *PRTERRINFOSTATIC; | |
| /** Pointer to a const static error info buffer. */ | |
| typedef RTERRINFOSTATIC const *PCRTERRINFOSTATIC; | |
| /** | |
| * UUID data type. | |
| * | |
| * See RTUuid*. | |
| * | |
| * @remarks IPRT defines that the first three integers in the @c Gen struct | |
| * interpretation are in little endian representation. This is | |
| * different to many other UUID implementation, and requires | |
| * conversion if you need to achieve consistent results. | |
| */ | |
| typedef union RTUUID | |
| { | |
| /** 8-bit view. */ | |
| uint8_t au8[16]; | |
| /** 16-bit view. */ | |
| uint16_t au16[8]; | |
| /** 32-bit view. */ | |
| uint32_t au32[4]; | |
| /** 64-bit view. */ | |
| uint64_t au64[2]; | |
| /** The way the UUID is declared by the DCE specification. */ | |
| struct | |
| { | |
| uint32_t u32TimeLow; | |
| uint16_t u16TimeMid; | |
| uint16_t u16TimeHiAndVersion; | |
| uint8_t u8ClockSeqHiAndReserved; | |
| uint8_t u8ClockSeqLow; | |
| uint8_t au8Node[6]; | |
| } Gen; | |
| } RTUUID; | |
| /** Pointer to UUID data. */ | |
| typedef RTUUID *PRTUUID; | |
| /** Pointer to readonly UUID data. */ | |
| typedef const RTUUID *PCRTUUID; | |
| /** Initializes a RTUUID structure with all zeros (RTUuidIsNull() true). */ | |
| #define RTUUID_INITIALIZE_NULL { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } | |
| /** UUID string maximum length. */ | |
| #define RTUUID_STR_LENGTH 37 | |
| /** Compression handle. */ | |
| typedef struct RTZIPCOMP *PRTZIPCOMP; | |
| /** Decompressor handle. */ | |
| typedef struct RTZIPDECOMP *PRTZIPDECOMP; | |
| /** | |
| * Unicode Code Point. | |
| */ | |
| typedef uint32_t RTUNICP; | |
| /** Pointer to an Unicode Code Point. */ | |
| typedef RTUNICP *PRTUNICP; | |
| /** Pointer to an Unicode Code Point. */ | |
| typedef const RTUNICP *PCRTUNICP; | |
| /** Max value a RTUNICP type can hold. */ | |
| #define RTUNICP_MAX ( ~(RTUNICP)0 ) | |
| /** Invalid code point. | |
| * This is returned when encountered invalid encodings or invalid | |
| * unicode code points. */ | |
| #define RTUNICP_INVALID ( UINT32_C(0xfffffffe) ) | |
| /** | |
| * UTF-16 character. | |
| * @remark wchar_t is not usable since it's compiler defined. | |
| * @remark When we use the term character we're not talking about unicode code point, but | |
| * the basic unit of the string encoding. Thus cwc - count of wide chars - means | |
| * count of RTUTF16; cuc - count of unicode chars - means count of RTUNICP; | |
| * and cch means count of the typedef 'char', which is assumed to be an octet. | |
| */ | |
| typedef uint16_t RTUTF16; | |
| /** Pointer to a UTF-16 character. */ | |
| typedef RTUTF16 *PRTUTF16; | |
| /** Pointer to a const UTF-16 character. */ | |
| typedef const RTUTF16 *PCRTUTF16; | |
| /** | |
| * String tuple to go with the RT_STR_TUPLE macro. | |
| */ | |
| typedef struct RTSTRTUPLE | |
| { | |
| /** The string. */ | |
| const char *psz; | |
| /** The string length. */ | |
| size_t cch; | |
| } RTSTRTUPLE; | |
| /** Pointer to a string tuple. */ | |
| typedef RTSTRTUPLE *PRTSTRTUPLE; | |
| /** Pointer to a const string tuple. */ | |
| typedef RTSTRTUPLE const *PCRTSTRTUPLE; | |
| /** | |
| * Wait for ever if we have to. | |
| */ | |
| #define RT_INDEFINITE_WAIT (~0U) | |
| /** | |
| * Generic process callback. | |
| * | |
| * @returns VBox status code. Failure will cancel the operation. | |
| * @param uPercentage The percentage of the operation which has been completed. | |
| * @param pvUser The user specified argument. | |
| */ | |
| typedef DECLCALLBACK(int) FNRTPROGRESS(unsigned uPrecentage, void *pvUser); | |
| /** Pointer to a generic progress callback function, FNRTPROCESS(). */ | |
| typedef FNRTPROGRESS *PFNRTPROGRESS; | |
| /** | |
| * Generic vprintf-like callback function for dumpers. | |
| * | |
| * @param pvUser User argument. | |
| * @param pszFormat The format string. | |
| * @param va Arguments for the format string. | |
| */ | |
| typedef DECLCALLBACK(void) FNRTDUMPPRINTFV(void *pvUser, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(2, 0); | |
| /** Pointer to a generic printf-like function for dumping. */ | |
| typedef FNRTDUMPPRINTFV *PFNRTDUMPPRINTFV; | |
| /** | |
| * A point in a two dimentional coordinate system. | |
| */ | |
| typedef struct RTPOINT | |
| { | |
| /** X coordinate. */ | |
| int32_t x; | |
| /** Y coordinate. */ | |
| int32_t y; | |
| } RTPOINT; | |
| /** Pointer to a point. */ | |
| typedef RTPOINT *PRTPOINT; | |
| /** Pointer to a const point. */ | |
| typedef const RTPOINT *PCRTPOINT; | |
| /** | |
| * Rectangle data type, double point. | |
| */ | |
| typedef struct RTRECT | |
| { | |
| /** left X coordinate. */ | |
| int32_t xLeft; | |
| /** top Y coordinate. */ | |
| int32_t yTop; | |
| /** right X coordinate. (exclusive) */ | |
| int32_t xRight; | |
| /** bottom Y coordinate. (exclusive) */ | |
| int32_t yBottom; | |
| } RTRECT; | |
| /** Pointer to a double point rectangle. */ | |
| typedef RTRECT *PRTRECT; | |
| /** Pointer to a const double point rectangle. */ | |
| typedef const RTRECT *PCRTRECT; | |
| /** | |
| * Rectangle data type, point + size. | |
| */ | |
| typedef struct RTRECT2 | |
| { | |
| /** X coordinate. | |
| * Unless stated otherwise, this is the top left corner. */ | |
| int32_t x; | |
| /** Y coordinate. | |
| * Unless stated otherwise, this is the top left corner. */ | |
| int32_t y; | |
| /** The width. | |
| * Unless stated otherwise, this is to the right of (x,y) and will not | |
| * be a negative number. */ | |
| int32_t cx; | |
| /** The height. | |
| * Unless stated otherwise, this is down from (x,y) and will not be a | |
| * negative number. */ | |
| int32_t cy; | |
| } RTRECT2; | |
| /** Pointer to a point + size rectangle. */ | |
| typedef RTRECT2 *PRTRECT2; | |
| /** Pointer to a const point + size rectangle. */ | |
| typedef const RTRECT2 *PCRTRECT2; | |
| /** | |
| * The size of a rectangle. | |
| */ | |
| typedef struct RTRECTSIZE | |
| { | |
| /** The width (along the x-axis). */ | |
| uint32_t cx; | |
| /** The height (along the y-axis). */ | |
| uint32_t cy; | |
| } RTRECTSIZE; | |
| /** Pointer to a rectangle size. */ | |
| typedef RTRECTSIZE *PRTRECTSIZE; | |
| /** Pointer to a const rectangle size. */ | |
| typedef const RTRECTSIZE *PCRTRECTSIZE; | |
| /** | |
| * Ethernet MAC address. | |
| * | |
| * The first 24 bits make up the Organisationally Unique Identifier (OUI), | |
| * where the first bit (little endian) indicates multicast (set) / unicast, | |
| * and the second bit indicates locally (set) / global administered. If all | |
| * bits are set, it's a broadcast. | |
| */ | |
| typedef union RTMAC | |
| { | |
| /** @todo add a bitfield view of this stuff. */ | |
| /** 8-bit view. */ | |
| uint8_t au8[6]; | |
| /** 16-bit view. */ | |
| uint16_t au16[3]; | |
| } RTMAC; | |
| /** Pointer to a MAC address. */ | |
| typedef RTMAC *PRTMAC; | |
| /** Pointer to a readonly MAC address. */ | |
| typedef const RTMAC *PCRTMAC; | |
| /** Pointer to a lock validator record. | |
| * The structure definition is found in iprt/lockvalidator.h. */ | |
| typedef struct RTLOCKVALRECEXCL *PRTLOCKVALRECEXCL; | |
| /** Pointer to a record of one ownership share. | |
| * The structure definition is found in iprt/lockvalidator.h. */ | |
| typedef struct RTLOCKVALRECSHRD *PRTLOCKVALRECSHRD; | |
| /** Pointer to a lock validator source position. | |
| * The structure definition is found in iprt/lockvalidator.h. */ | |
| typedef struct RTLOCKVALSRCPOS *PRTLOCKVALSRCPOS; | |
| /** Pointer to a const lock validator source position. | |
| * The structure definition is found in iprt/lockvalidator.h. */ | |
| typedef struct RTLOCKVALSRCPOS const *PCRTLOCKVALSRCPOS; | |
| /** @name Special sub-class values. | |
| * The range 16..UINT32_MAX is available to the user, the range 0..15 is | |
| * reserved for the lock validator. In the user range the locks can only be | |
| * taking in ascending order. | |
| * @{ */ | |
| /** Invalid value. */ | |
| #define RTLOCKVAL_SUB_CLASS_INVALID UINT32_C(0) | |
| /** Not allowed to be taken with any other locks in the same class. | |
| * This is the recommended value. */ | |
| #define RTLOCKVAL_SUB_CLASS_NONE UINT32_C(1) | |
| /** Any order is allowed within the class. */ | |
| #define RTLOCKVAL_SUB_CLASS_ANY UINT32_C(2) | |
| /** The first user value. */ | |
| #define RTLOCKVAL_SUB_CLASS_USER UINT32_C(16) | |
| /** @} */ | |
| /** | |
| * Digest types. | |
| */ | |
| typedef enum RTDIGESTTYPE | |
| { | |
| /** Invalid digest value. */ | |
| RTDIGESTTYPE_INVALID = 0, | |
| /** Unknown digest type. */ | |
| RTDIGESTTYPE_UNKNOWN, | |
| /** CRC32 checksum. */ | |
| RTDIGESTTYPE_CRC32, | |
| /** CRC64 checksum. */ | |
| RTDIGESTTYPE_CRC64, | |
| /** MD2 checksum (unsafe!). */ | |
| RTDIGESTTYPE_MD2, | |
| /** MD4 checksum (unsafe!!). */ | |
| RTDIGESTTYPE_MD4, | |
| /** MD5 checksum (unsafe!). */ | |
| RTDIGESTTYPE_MD5, | |
| /** SHA-1 checksum (unsafe!). */ | |
| RTDIGESTTYPE_SHA1, | |
| /** SHA-224 checksum. */ | |
| RTDIGESTTYPE_SHA224, | |
| /** SHA-256 checksum. */ | |
| RTDIGESTTYPE_SHA256, | |
| /** SHA-384 checksum. */ | |
| RTDIGESTTYPE_SHA384, | |
| /** SHA-512 checksum. */ | |
| RTDIGESTTYPE_SHA512, | |
| /** SHA-512/224 checksum. */ | |
| RTDIGESTTYPE_SHA512T224, | |
| /** SHA-512/256 checksum. */ | |
| RTDIGESTTYPE_SHA512T256, | |
| /** End of valid types. */ | |
| RTDIGESTTYPE_END, | |
| /** Usual 32-bit type blowup. */ | |
| RTDIGESTTYPE_32BIT_HACK = 0x7fffffff | |
| } RTDIGESTTYPE; | |
| /** | |
| * Process exit codes. | |
| */ | |
| typedef enum RTEXITCODE | |
| { | |
| /** Success. */ | |
| RTEXITCODE_SUCCESS = 0, | |
| /** General failure. */ | |
| RTEXITCODE_FAILURE = 1, | |
| /** Invalid arguments. */ | |
| RTEXITCODE_SYNTAX = 2, | |
| /** Initialization failure (usually IPRT, but could be used for other | |
| * components as well). */ | |
| RTEXITCODE_INIT = 3, | |
| /** Test skipped. */ | |
| RTEXITCODE_SKIPPED = 4, | |
| /** The end of valid exit codes. */ | |
| RTEXITCODE_END, | |
| /** The usual 32-bit type hack. */ | |
| RTEXITCODE_32BIT_HACK = 0x7fffffff | |
| } RTEXITCODE; | |
| /** | |
| * Range descriptor. | |
| */ | |
| typedef struct RTRANGE | |
| { | |
| /** Start offset. */ | |
| uint64_t offStart; | |
| /** Range size. */ | |
| size_t cbRange; | |
| } RTRANGE; | |
| /** Pointer to a range descriptor. */ | |
| typedef RTRANGE *PRTRANGE; | |
| /** Pointer to a readonly range descriptor. */ | |
| typedef const RTRANGE *PCRTRANGE; | |
| /** | |
| * Generic pointer union. | |
| */ | |
| typedef union RTPTRUNION | |
| { | |
| /** Pointer into the void. */ | |
| void *pv; | |
| /** As a signed integer. */ | |
| intptr_t i; | |
| /** As an unsigned integer. */ | |
| intptr_t u; | |
| /** Pointer to char value. */ | |
| char *pch; | |
| /** Pointer to char value. */ | |
| unsigned char *puch; | |
| /** Pointer to a int value. */ | |
| int *pi; | |
| /** Pointer to a unsigned int value. */ | |
| unsigned int *pu; | |
| /** Pointer to a long value. */ | |
| long *pl; | |
| /** Pointer to a long value. */ | |
| unsigned long *pul; | |
| /** Pointer to a 8-bit unsigned value. */ | |
| uint8_t *pu8; | |
| /** Pointer to a 16-bit unsigned value. */ | |
| uint16_t *pu16; | |
| /** Pointer to a 32-bit unsigned value. */ | |
| uint32_t *pu32; | |
| /** Pointer to a 64-bit unsigned value. */ | |
| uint64_t *pu64; | |
| /** Pointer to a UTF-16 character. */ | |
| PRTUTF16 pwc; | |
| /** Pointer to a UUID character. */ | |
| PRTUUID pUuid; | |
| } RTPTRUNION; | |
| /** Pointer to a pointer union. */ | |
| typedef RTPTRUNION *PRTPTRUNION; | |
| /** | |
| * Generic const pointer union. | |
| */ | |
| typedef union RTCPTRUNION | |
| { | |
| /** Pointer into the void. */ | |
| void const *pv; | |
| /** As a signed integer. */ | |
| intptr_t i; | |
| /** As an unsigned integer. */ | |
| intptr_t u; | |
| /** Pointer to char value. */ | |
| char const *pch; | |
| /** Pointer to char value. */ | |
| unsigned char const *puch; | |
| /** Pointer to a int value. */ | |
| int const *pi; | |
| /** Pointer to a unsigned int value. */ | |
| unsigned int const *pu; | |
| /** Pointer to a long value. */ | |
| long const *pl; | |
| /** Pointer to a long value. */ | |
| unsigned long const *pul; | |
| /** Pointer to a 8-bit unsigned value. */ | |
| uint8_t const *pu8; | |
| /** Pointer to a 16-bit unsigned value. */ | |
| uint16_t const *pu16; | |
| /** Pointer to a 32-bit unsigned value. */ | |
| uint32_t const *pu32; | |
| /** Pointer to a 64-bit unsigned value. */ | |
| uint64_t const *pu64; | |
| /** Pointer to a UTF-16 character. */ | |
| PCRTUTF16 pwc; | |
| /** Pointer to a UUID character. */ | |
| PCRTUUID pUuid; | |
| } RTCPTRUNION; | |
| /** Pointer to a const pointer union. */ | |
| typedef RTCPTRUNION *PRTCPTRUNION; | |
| /** | |
| * Generic volatile pointer union. | |
| */ | |
| typedef union RTVPTRUNION | |
| { | |
| /** Pointer into the void. */ | |
| void volatile *pv; | |
| /** As a signed integer. */ | |
| intptr_t i; | |
| /** As an unsigned integer. */ | |
| intptr_t u; | |
| /** Pointer to char value. */ | |
| char volatile *pch; | |
| /** Pointer to char value. */ | |
| unsigned char volatile *puch; | |
| /** Pointer to a int value. */ | |
| int volatile *pi; | |
| /** Pointer to a unsigned int value. */ | |
| unsigned int volatile *pu; | |
| /** Pointer to a long value. */ | |
| long volatile *pl; | |
| /** Pointer to a long value. */ | |
| unsigned long volatile *pul; | |
| /** Pointer to a 8-bit unsigned value. */ | |
| uint8_t volatile *pu8; | |
| /** Pointer to a 16-bit unsigned value. */ | |
| uint16_t volatile *pu16; | |
| /** Pointer to a 32-bit unsigned value. */ | |
| uint32_t volatile *pu32; | |
| /** Pointer to a 64-bit unsigned value. */ | |
| uint64_t volatile *pu64; | |
| /** Pointer to a UTF-16 character. */ | |
| RTUTF16 volatile *pwc; | |
| /** Pointer to a UUID character. */ | |
| RTUUID volatile *pUuid; | |
| } RTVPTRUNION; | |
| /** Pointer to a const pointer union. */ | |
| typedef RTVPTRUNION *PRTVPTRUNION; | |
| /** | |
| * Generic const volatile pointer union. | |
| */ | |
| typedef union RTCVPTRUNION | |
| { | |
| /** Pointer into the void. */ | |
| void const volatile *pv; | |
| /** As a signed integer. */ | |
| intptr_t i; | |
| /** As an unsigned integer. */ | |
| intptr_t u; | |
| /** Pointer to char value. */ | |
| char const volatile *pch; | |
| /** Pointer to char value. */ | |
| unsigned char const volatile *puch; | |
| /** Pointer to a int value. */ | |
| int const volatile *pi; | |
| /** Pointer to a unsigned int value. */ | |
| unsigned int const volatile *pu; | |
| /** Pointer to a long value. */ | |
| long const volatile *pl; | |
| /** Pointer to a long value. */ | |
| unsigned long const volatile *pul; | |
| /** Pointer to a 8-bit unsigned value. */ | |
| uint8_t const volatile *pu8; | |
| /** Pointer to a 16-bit unsigned value. */ | |
| uint16_t const volatile *pu16; | |
| /** Pointer to a 32-bit unsigned value. */ | |
| uint32_t const volatile *pu32; | |
| /** Pointer to a 64-bit unsigned value. */ | |
| uint64_t const volatile *pu64; | |
| /** Pointer to a UTF-16 character. */ | |
| RTUTF16 const volatile *pwc; | |
| /** Pointer to a UUID character. */ | |
| RTUUID const volatile *pUuid; | |
| } RTCVPTRUNION; | |
| /** Pointer to a const pointer union. */ | |
| typedef RTCVPTRUNION *PRTCVPTRUNION; | |
| #ifdef __cplusplus | |
| /** | |
| * Strict type validation helper class. | |
| * | |
| * See RTErrStrictType and RT_SUCCESS_NP. | |
| */ | |
| class RTErrStrictType2 | |
| { | |
| protected: | |
| /** The status code. */ | |
| int32_t m_rc; | |
| public: | |
| /** | |
| * Constructor. | |
| * @param rc IPRT style status code. | |
| */ | |
| RTErrStrictType2(int32_t rc) : m_rc(rc) | |
| { | |
| } | |
| /** | |
| * Get the status code. | |
| * @returns IPRT style status code. | |
| */ | |
| int32_t getValue() const | |
| { | |
| return m_rc; | |
| } | |
| }; | |
| #endif /* __cplusplus */ | |
| /** @} */ | |
| #endif | |