]>
Commit | Line | Data |
---|---|---|
056a1eb7 SF |
1 | /** @file |
2 | * IPRT - Types. | |
3 | */ | |
4 | ||
5 | /* | |
6d209b23 | 6 | * Copyright (C) 2006-2017 Oracle Corporation |
056a1eb7 SF |
7 | * |
8 | * This file is part of VirtualBox Open Source Edition (OSE), as | |
9 | * available from http://www.virtualbox.org. This file is free software; | |
10 | * you can redistribute it and/or modify it under the terms of the GNU | |
11 | * General Public License (GPL) as published by the Free Software | |
12 | * Foundation, in version 2 as it comes in the "COPYING" file of the | |
13 | * VirtualBox OSE distribution. VirtualBox OSE is distributed in the | |
14 | * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. | |
15 | * | |
16 | * The contents of this file may alternatively be used under the terms | |
17 | * of the Common Development and Distribution License Version 1.0 | |
18 | * (CDDL) only, as it comes in the "COPYING.CDDL" file of the | |
19 | * VirtualBox OSE distribution, in which case the provisions of the | |
20 | * CDDL are applicable instead of those of the GPL. | |
21 | * | |
22 | * You may elect to license modified versions of this file under the | |
23 | * terms and conditions of either the GPL or the CDDL or both. | |
24 | */ | |
25 | ||
26 | #ifndef ___iprt_types_h | |
27 | #define ___iprt_types_h | |
28 | ||
29 | #include <iprt/cdefs.h> | |
30 | #include <iprt/stdint.h> | |
31 | #include <iprt/stdarg.h> | |
32 | ||
33 | /* | |
34 | * Include standard C types. | |
35 | */ | |
36 | #ifndef IPRT_NO_CRT | |
37 | ||
38 | # if defined(IN_XF86_MODULE) && !defined(NO_ANSIC) | |
39 | /* | |
40 | * Kludge for xfree86 modules: size_t and other types are redefined. | |
41 | */ | |
42 | RT_C_DECLS_BEGIN | |
43 | # include "xf86_ansic.h" | |
44 | # undef NULL | |
45 | RT_C_DECLS_END | |
46 | ||
47 | # elif defined(RT_OS_DARWIN) && defined(KERNEL) | |
48 | /* | |
49 | * Kludge for the darwin kernel: | |
50 | * stddef.h is missing IIRC. | |
51 | */ | |
52 | # ifndef _PTRDIFF_T | |
53 | # define _PTRDIFF_T | |
54 | typedef __darwin_ptrdiff_t ptrdiff_t; | |
55 | # endif | |
56 | # include <sys/types.h> | |
57 | ||
58 | # elif defined(RT_OS_FREEBSD) && defined(_KERNEL) | |
59 | /* | |
60 | * Kludge for the FreeBSD kernel: | |
61 | * stddef.h and sys/types.h have slightly different offsetof definitions | |
62 | * when compiling in kernel mode. This is just to make GCC shut up. | |
63 | */ | |
64 | # ifndef _STDDEF_H_ | |
65 | # undef offsetof | |
66 | # endif | |
67 | # include <sys/stddef.h> | |
68 | # ifndef _SYS_TYPES_H_ | |
69 | # undef offsetof | |
70 | # endif | |
71 | # include <sys/types.h> | |
72 | # ifndef offsetof | |
73 | # error "offsetof is not defined!" | |
74 | # endif | |
75 | ||
76 | # elif defined(RT_OS_FREEBSD) && HC_ARCH_BITS == 64 && defined(RT_ARCH_X86) | |
77 | /* | |
78 | * Kludge for compiling 32-bit code on a 64-bit FreeBSD: | |
79 | * FreeBSD declares uint64_t and int64_t wrong (long unsigned and long int | |
80 | * though they need to be long long unsigned and long long int). These | |
81 | * defines conflict with our declaration in stdint.h. Adding the defines | |
82 | * below omits the definitions in the system header. | |
83 | */ | |
84 | # include <stddef.h> | |
85 | # define _UINT64_T_DECLARED | |
86 | # define _INT64_T_DECLARED | |
87 | # define _UINTPTR_T_DECLARED | |
88 | # define _INTPTR_T_DECLARED | |
89 | # include <sys/types.h> | |
90 | ||
91 | # elif defined(RT_OS_NETBSD) && defined(_KERNEL) | |
92 | ||
93 | # include <sys/types.h> | |
94 | ||
95 | /* | |
96 | * Kludge for NetBSD-6.x where the definition of bool in | |
97 | * <sys/types.h> does not check for C++. | |
98 | */ | |
99 | # if defined(__cplusplus) && defined(bool) | |
100 | # undef bool | |
101 | # undef true | |
102 | # undef false | |
103 | # endif | |
104 | ||
105 | /* | |
106 | * Kludge for NetBSD-6.x where <sys/types.h> does not define | |
107 | * ptrdiff_t for the kernel code. Note that we don't worry about | |
108 | * redefinition in <stddef.h> since that header doesn't exist for | |
109 | * _KERNEL code. | |
110 | */ | |
111 | # ifdef _BSD_PTRDIFF_T_ | |
112 | typedef _BSD_PTRDIFF_T_ ptrdiff_t; | |
113 | # endif | |
114 | ||
115 | # elif defined(RT_OS_LINUX) && defined(__KERNEL__) | |
116 | /* | |
117 | * Kludge for the linux kernel: | |
118 | * 1. sys/types.h doesn't mix with the kernel. | |
119 | * 2. Starting with 2.6.19, linux/types.h typedefs bool and linux/stddef.h | |
120 | * declares false and true as enum values. | |
121 | * 3. Starting with 2.6.24, linux/types.h typedefs uintptr_t. | |
122 | * We work around these issues here and nowhere else. | |
123 | */ | |
124 | # include <stddef.h> | |
125 | # if defined(__cplusplus) | |
126 | typedef bool _Bool; | |
127 | # endif | |
128 | # define bool linux_bool | |
129 | # define true linux_true | |
130 | # define false linux_false | |
131 | # define uintptr_t linux_uintptr_t | |
132 | # include <linux/version.h> | |
133 | # if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) | |
134 | # include <generated/autoconf.h> | |
135 | # else | |
136 | # ifndef AUTOCONF_INCLUDED | |
137 | # include <linux/autoconf.h> | |
138 | # endif | |
139 | # endif | |
140 | # include <linux/compiler.h> | |
141 | # if defined(__cplusplus) | |
142 | /* | |
143 | * Starting with 3.3, <linux/compiler-gcc.h> appends 'notrace' (which | |
144 | * expands to __attribute__((no_instrument_function))) to inline, | |
145 | * __inline and __inline__. Revert that. | |
146 | */ | |
147 | # undef inline | |
148 | # define inline inline | |
149 | # undef __inline__ | |
150 | # define __inline__ __inline__ | |
151 | # undef __inline | |
152 | # define __inline __inline | |
153 | # endif | |
154 | # include <linux/types.h> | |
155 | # include <linux/stddef.h> | |
156 | /* | |
157 | * Starting with 3.4, <linux/stddef.h> defines NULL as '((void*)0)' which | |
158 | * does not work for C++ code. | |
159 | */ | |
160 | # undef NULL | |
161 | # undef uintptr_t | |
162 | # ifdef __GNUC__ | |
163 | # if !RT_GNUC_PREREQ(4, 1) | |
164 | /* | |
165 | * <linux/compiler-gcc{3,4}.h> does | |
166 | * #define __inline__ __inline__ __attribute__((always_inline)) | |
167 | * in some older Linux kernels. Forcing inlining will fail for some RTStrA* | |
168 | * functions with gcc <= 4.0 due to passing variable argument lists. | |
169 | */ | |
170 | # undef __inline__ | |
171 | # define __inline__ __inline__ | |
172 | # endif | |
173 | # endif | |
174 | # undef false | |
175 | # undef true | |
176 | # undef bool | |
177 | # else | |
178 | # include <stddef.h> | |
179 | # include <sys/types.h> | |
180 | # endif | |
181 | ||
182 | ||
183 | /* Define any types missing from sys/types.h on windows. */ | |
184 | # ifdef _MSC_VER | |
185 | # undef ssize_t | |
186 | typedef intptr_t ssize_t; | |
187 | # endif | |
188 | ||
189 | #else /* no crt */ | |
190 | # include <iprt/nocrt/compiler/compiler.h> | |
191 | #endif /* no crt */ | |
192 | ||
193 | ||
194 | ||
195 | /** @def NULL | |
196 | * NULL pointer. | |
197 | */ | |
198 | #ifndef NULL | |
199 | # ifdef __cplusplus | |
200 | # define NULL 0 | |
201 | # else | |
202 | # define NULL ((void*)0) | |
203 | # endif | |
204 | #endif | |
205 | ||
206 | ||
207 | ||
208 | /** @defgroup grp_rt_types IPRT Base Types | |
209 | * @{ | |
210 | */ | |
211 | ||
212 | /* define wchar_t, we don't wanna include all the wcsstuff to get this. */ | |
213 | #ifdef _MSC_VER | |
214 | # ifndef _WCHAR_T_DEFINED | |
215 | typedef unsigned short wchar_t; | |
216 | # define _WCHAR_T_DEFINED | |
217 | # endif | |
218 | #endif | |
219 | #ifdef __GNUC__ | |
220 | /** @todo wchar_t on GNUC */ | |
221 | #endif | |
222 | ||
223 | /* | |
224 | * C doesn't have bool, nor does VisualAge for C++ v3.08. | |
225 | */ | |
226 | #if !defined(__cplusplus) || (defined(__IBMCPP__) && defined(RT_OS_OS2)) | |
227 | # if defined(__GNUC__) | |
228 | # if defined(RT_OS_LINUX) && __GNUC__ < 3 | |
229 | typedef uint8_t bool; | |
230 | # elif defined(RT_OS_FREEBSD) | |
231 | # ifndef __bool_true_false_are_defined | |
232 | typedef _Bool bool; | |
233 | # endif | |
234 | # elif defined(RT_OS_NETBSD) | |
235 | # if !defined(_KERNEL) | |
236 | /* | |
237 | * For the kernel code <stdbool.h> is not available, but bool is | |
238 | * provided by <sys/types.h> included above. | |
239 | */ | |
240 | # include <stdbool.h> | |
241 | ||
242 | /* | |
243 | * ... but the story doesn't end here. The C standard says that | |
244 | * <stdbool.h> defines preprocessor macro "bool" that expands to | |
245 | * "_Bool", but adds that a program may undefine/redefine it | |
246 | * (this is 7.16 in C99 and 7.18 in C11). We have to play this | |
247 | * game here because X11 code uses "bool" as a struct member name | |
248 | * - so undefine "bool" and provide it as a typedef instead. We | |
249 | * still keep #include <stdbool.h> so that any code that might | |
250 | * include it later doesn't mess things up. | |
251 | */ | |
252 | # undef bool | |
253 | typedef _Bool bool; | |
254 | # endif | |
255 | # else | |
256 | # if (defined(RT_OS_DARWIN) || defined(RT_OS_HAIKU)) && (defined(_STDBOOL_H) || defined(__STDBOOL_H)) | |
257 | # undef bool | |
258 | # endif | |
259 | typedef _Bool bool; | |
260 | # endif | |
261 | # else | |
6d209b23 SF |
262 | # if RT_MSC_PREREQ(RT_MSC_VER_VC120) |
263 | # include <stdbool.h> | |
264 | # else | |
056a1eb7 | 265 | typedef unsigned char bool; |
6d209b23 | 266 | # endif |
056a1eb7 SF |
267 | # endif |
268 | # ifndef true | |
269 | # define true (1) | |
270 | # endif | |
271 | # ifndef false | |
272 | # define false (0) | |
273 | # endif | |
274 | #endif | |
275 | ||
276 | /** | |
277 | * 128-bit unsigned integer. | |
278 | */ | |
279 | #if defined(__GNUC__) && defined(RT_ARCH_AMD64) | |
280 | typedef __uint128_t uint128_t; | |
281 | #else | |
282 | typedef struct uint128_s | |
283 | { | |
284 | # ifdef RT_BIG_ENDIAN | |
285 | uint64_t Hi; | |
286 | uint64_t Lo; | |
287 | # else | |
288 | uint64_t Lo; | |
289 | uint64_t Hi; | |
290 | # endif | |
291 | } uint128_t; | |
292 | #endif | |
293 | ||
294 | ||
295 | /** | |
296 | * 128-bit signed integer. | |
297 | */ | |
298 | #if defined(__GNUC__) && defined(RT_ARCH_AMD64) | |
299 | typedef __int128_t int128_t; | |
300 | #else | |
301 | typedef struct int128_s | |
302 | { | |
303 | # ifdef RT_BIG_ENDIAN | |
304 | int64_t Hi; | |
305 | uint64_t Lo; | |
306 | # else | |
307 | uint64_t Lo; | |
308 | int64_t Hi; | |
309 | # endif | |
310 | } int128_t; | |
311 | #endif | |
312 | ||
313 | ||
314 | /** | |
315 | * 16-bit unsigned integer union. | |
316 | */ | |
317 | typedef union RTUINT16U | |
318 | { | |
319 | /** natural view. */ | |
320 | uint16_t u; | |
321 | ||
322 | /** 16-bit view. */ | |
323 | uint16_t au16[1]; | |
324 | /** 8-bit view. */ | |
325 | uint8_t au8[2]; | |
326 | /** 16-bit hi/lo view. */ | |
327 | struct | |
328 | { | |
329 | #ifdef RT_BIG_ENDIAN | |
330 | uint8_t Hi; | |
331 | uint8_t Lo; | |
332 | #else | |
333 | uint8_t Lo; | |
334 | uint8_t Hi; | |
335 | #endif | |
336 | } s; | |
337 | } RTUINT16U; | |
338 | /** Pointer to a 16-bit unsigned integer union. */ | |
6d209b23 | 339 | typedef RTUINT16U RT_FAR *PRTUINT16U; |
056a1eb7 | 340 | /** Pointer to a const 32-bit unsigned integer union. */ |
6d209b23 | 341 | typedef const RTUINT16U RT_FAR *PCRTUINT16U; |
056a1eb7 SF |
342 | |
343 | ||
344 | /** | |
345 | * 32-bit unsigned integer union. | |
346 | */ | |
347 | typedef union RTUINT32U | |
348 | { | |
349 | /** natural view. */ | |
350 | uint32_t u; | |
351 | /** Hi/Low view. */ | |
352 | struct | |
353 | { | |
354 | #ifdef RT_BIG_ENDIAN | |
355 | uint16_t Hi; | |
356 | uint16_t Lo; | |
357 | #else | |
358 | uint16_t Lo; | |
359 | uint16_t Hi; | |
360 | #endif | |
361 | } s; | |
362 | /** Word view. */ | |
363 | struct | |
364 | { | |
365 | #ifdef RT_BIG_ENDIAN | |
366 | uint16_t w1; | |
367 | uint16_t w0; | |
368 | #else | |
369 | uint16_t w0; | |
370 | uint16_t w1; | |
371 | #endif | |
372 | } Words; | |
373 | ||
374 | /** 32-bit view. */ | |
375 | uint32_t au32[1]; | |
376 | /** 16-bit view. */ | |
377 | uint16_t au16[2]; | |
378 | /** 8-bit view. */ | |
379 | uint8_t au8[4]; | |
380 | } RTUINT32U; | |
381 | /** Pointer to a 32-bit unsigned integer union. */ | |
6d209b23 | 382 | typedef RTUINT32U RT_FAR *PRTUINT32U; |
056a1eb7 | 383 | /** Pointer to a const 32-bit unsigned integer union. */ |
6d209b23 | 384 | typedef const RTUINT32U RT_FAR *PCRTUINT32U; |
056a1eb7 SF |
385 | |
386 | ||
387 | /** | |
388 | * 64-bit unsigned integer union. | |
389 | */ | |
390 | typedef union RTUINT64U | |
391 | { | |
392 | /** Natural view. */ | |
393 | uint64_t u; | |
394 | /** Hi/Low view. */ | |
395 | struct | |
396 | { | |
397 | #ifdef RT_BIG_ENDIAN | |
398 | uint32_t Hi; | |
399 | uint32_t Lo; | |
400 | #else | |
401 | uint32_t Lo; | |
402 | uint32_t Hi; | |
403 | #endif | |
404 | } s; | |
405 | /** Double-Word view. */ | |
406 | struct | |
407 | { | |
408 | #ifdef RT_BIG_ENDIAN | |
409 | uint32_t dw1; | |
410 | uint32_t dw0; | |
411 | #else | |
412 | uint32_t dw0; | |
413 | uint32_t dw1; | |
414 | #endif | |
415 | } DWords; | |
416 | /** Word view. */ | |
417 | struct | |
418 | { | |
419 | #ifdef RT_BIG_ENDIAN | |
420 | uint16_t w3; | |
421 | uint16_t w2; | |
422 | uint16_t w1; | |
423 | uint16_t w0; | |
424 | #else | |
425 | uint16_t w0; | |
426 | uint16_t w1; | |
427 | uint16_t w2; | |
428 | uint16_t w3; | |
429 | #endif | |
430 | } Words; | |
431 | ||
432 | /** 64-bit view. */ | |
433 | uint64_t au64[1]; | |
434 | /** 32-bit view. */ | |
435 | uint32_t au32[2]; | |
436 | /** 16-bit view. */ | |
437 | uint16_t au16[4]; | |
438 | /** 8-bit view. */ | |
439 | uint8_t au8[8]; | |
440 | } RTUINT64U; | |
441 | /** Pointer to a 64-bit unsigned integer union. */ | |
6d209b23 | 442 | typedef RTUINT64U RT_FAR *PRTUINT64U; |
056a1eb7 | 443 | /** Pointer to a const 64-bit unsigned integer union. */ |
6d209b23 | 444 | typedef const RTUINT64U RT_FAR *PCRTUINT64U; |
056a1eb7 SF |
445 | |
446 | ||
447 | /** | |
448 | * 128-bit unsigned integer union. | |
449 | */ | |
450 | #pragma pack(1) | |
451 | typedef union RTUINT128U | |
452 | { | |
453 | /** Hi/Low view. | |
454 | * @remarks We put this first so we can have portable initializers | |
455 | * (RTUINT128_INIT) */ | |
456 | struct | |
457 | { | |
458 | #ifdef RT_BIG_ENDIAN | |
459 | uint64_t Hi; | |
460 | uint64_t Lo; | |
461 | #else | |
462 | uint64_t Lo; | |
463 | uint64_t Hi; | |
464 | #endif | |
465 | } s; | |
466 | ||
467 | /** Natural view. | |
468 | * WARNING! This member depends on the compiler supporting 128-bit stuff. */ | |
469 | uint128_t u; | |
470 | ||
471 | /** Quad-Word view. */ | |
472 | struct | |
473 | { | |
474 | #ifdef RT_BIG_ENDIAN | |
475 | uint64_t qw1; | |
476 | uint64_t qw0; | |
477 | #else | |
478 | uint64_t qw0; | |
479 | uint64_t qw1; | |
480 | #endif | |
481 | } QWords; | |
482 | /** Double-Word view. */ | |
483 | struct | |
484 | { | |
485 | #ifdef RT_BIG_ENDIAN | |
486 | uint32_t dw3; | |
487 | uint32_t dw2; | |
488 | uint32_t dw1; | |
489 | uint32_t dw0; | |
490 | #else | |
491 | uint32_t dw0; | |
492 | uint32_t dw1; | |
493 | uint32_t dw2; | |
494 | uint32_t dw3; | |
495 | #endif | |
496 | } DWords; | |
497 | /** Word view. */ | |
498 | struct | |
499 | { | |
500 | #ifdef RT_BIG_ENDIAN | |
501 | uint16_t w7; | |
502 | uint16_t w6; | |
503 | uint16_t w5; | |
504 | uint16_t w4; | |
505 | uint16_t w3; | |
506 | uint16_t w2; | |
507 | uint16_t w1; | |
508 | uint16_t w0; | |
509 | #else | |
510 | uint16_t w0; | |
511 | uint16_t w1; | |
512 | uint16_t w2; | |
513 | uint16_t w3; | |
514 | uint16_t w4; | |
515 | uint16_t w5; | |
516 | uint16_t w6; | |
517 | uint16_t w7; | |
518 | #endif | |
519 | } Words; | |
520 | ||
521 | /** 64-bit view. */ | |
522 | uint64_t au64[2]; | |
523 | /** 32-bit view. */ | |
524 | uint32_t au32[4]; | |
525 | /** 16-bit view. */ | |
526 | uint16_t au16[8]; | |
527 | /** 8-bit view. */ | |
528 | uint8_t au8[16]; | |
529 | } RTUINT128U; | |
530 | #pragma pack() | |
531 | /** Pointer to a 128-bit unsigned integer union. */ | |
6d209b23 | 532 | typedef RTUINT128U RT_FAR *PRTUINT128U; |
056a1eb7 | 533 | /** Pointer to a const 128-bit unsigned integer union. */ |
6d209b23 | 534 | typedef const RTUINT128U RT_FAR *PCRTUINT128U; |
056a1eb7 SF |
535 | |
536 | /** @def RTUINT128_INIT | |
537 | * Portable RTUINT128U initializer. */ | |
538 | #ifdef RT_BIG_ENDIAN | |
539 | # define RTUINT128_INIT(a_Hi, a_Lo) { { a_Hi, a_Lo } } | |
540 | #else | |
541 | # define RTUINT128_INIT(a_Hi, a_Lo) { { a_Lo, a_Hi } } | |
542 | #endif | |
543 | ||
544 | /** @def RTUINT128_INIT_C | |
545 | * Portable RTUINT128U initializer for 64-bit constants. */ | |
546 | #ifdef RT_BIG_ENDIAN | |
547 | # define RTUINT128_INIT_C(a_Hi, a_Lo) { { UINT64_C(a_Hi), UINT64_C(a_Lo) } } | |
548 | #else | |
549 | # define RTUINT128_INIT_C(a_Hi, a_Lo) { { UINT64_C(a_Lo), UINT64_C(a_Hi) } } | |
550 | #endif | |
551 | ||
552 | ||
553 | /** | |
554 | * 256-bit unsigned integer union. | |
555 | */ | |
556 | #pragma pack(1) | |
557 | typedef union RTUINT256U | |
558 | { | |
559 | /** Quad-Word view (first as it's used by RTUINT256_INIT). */ | |
560 | struct | |
561 | { | |
562 | #ifdef RT_BIG_ENDIAN | |
563 | uint64_t qw3; | |
564 | uint64_t qw2; | |
565 | uint64_t qw1; | |
566 | uint64_t qw0; | |
567 | #else | |
568 | uint64_t qw0; | |
569 | uint64_t qw1; | |
570 | uint64_t qw2; | |
571 | uint64_t qw3; | |
572 | #endif | |
573 | } QWords; | |
574 | /** Double-Word view. */ | |
575 | struct | |
576 | { | |
577 | #ifdef RT_BIG_ENDIAN | |
578 | uint32_t dw7; | |
579 | uint32_t dw6; | |
580 | uint32_t dw5; | |
581 | uint32_t dw4; | |
582 | uint32_t dw3; | |
583 | uint32_t dw2; | |
584 | uint32_t dw1; | |
585 | uint32_t dw0; | |
586 | #else | |
587 | uint32_t dw0; | |
588 | uint32_t dw1; | |
589 | uint32_t dw2; | |
590 | uint32_t dw3; | |
591 | uint32_t dw4; | |
592 | uint32_t dw5; | |
593 | uint32_t dw6; | |
594 | uint32_t dw7; | |
595 | #endif | |
596 | } DWords; | |
597 | /** Word view. */ | |
598 | struct | |
599 | { | |
600 | #ifdef RT_BIG_ENDIAN | |
601 | uint16_t w15; | |
602 | uint16_t w14; | |
603 | uint16_t w13; | |
604 | uint16_t w12; | |
605 | uint16_t w11; | |
606 | uint16_t w10; | |
607 | uint16_t w9; | |
608 | uint16_t w8; | |
609 | uint16_t w7; | |
610 | uint16_t w6; | |
611 | uint16_t w5; | |
612 | uint16_t w4; | |
613 | uint16_t w3; | |
614 | uint16_t w2; | |
615 | uint16_t w1; | |
616 | uint16_t w0; | |
617 | #else | |
618 | uint16_t w0; | |
619 | uint16_t w1; | |
620 | uint16_t w2; | |
621 | uint16_t w3; | |
622 | uint16_t w4; | |
623 | uint16_t w5; | |
624 | uint16_t w6; | |
625 | uint16_t w7; | |
626 | uint16_t w8; | |
627 | uint16_t w9; | |
628 | uint16_t w10; | |
629 | uint16_t w11; | |
630 | uint16_t w12; | |
631 | uint16_t w13; | |
632 | uint16_t w14; | |
633 | uint16_t w15; | |
634 | #endif | |
635 | } Words; | |
636 | ||
637 | /** Double-Quad-Word view. */ | |
638 | struct | |
639 | { | |
640 | #ifdef RT_BIG_ENDIAN | |
641 | RTUINT128U dqw1; | |
642 | RTUINT128U dqw0; | |
643 | #else | |
644 | RTUINT128U dqw0; | |
645 | RTUINT128U dqw1; | |
646 | #endif | |
647 | } DQWords; | |
648 | ||
649 | /** 128-bit view. */ | |
650 | RTUINT128U au128[2]; | |
651 | /** 64-bit view. */ | |
652 | uint64_t au64[4]; | |
653 | /** 32-bit view. */ | |
654 | uint32_t au32[8]; | |
655 | /** 16-bit view. */ | |
656 | uint16_t au16[16]; | |
657 | /** 8-bit view. */ | |
658 | uint8_t au8[32]; | |
659 | } RTUINT256U; | |
660 | #pragma pack() | |
661 | /** Pointer to a 256-bit unsigned integer union. */ | |
6d209b23 | 662 | typedef RTUINT256U RT_FAR *PRTUINT256U; |
056a1eb7 | 663 | /** Pointer to a const 256-bit unsigned integer union. */ |
6d209b23 | 664 | typedef const RTUINT256U RT_FAR *PCRTUINT256U; |
056a1eb7 SF |
665 | |
666 | /** @def RTUINT256_INIT | |
667 | * Portable RTUINT256U initializer. */ | |
668 | #ifdef RT_BIG_ENDIAN | |
669 | # define RTUINT256_INIT(a_Qw3, a_Qw2, a_Qw1, a_Qw0) { { a_Qw3, a_Qw2, a_Qw1, a_Qw0 } } | |
670 | #else | |
671 | # define RTUINT256_INIT(a_Qw3, a_Qw2, a_Qw1, a_Qw0) { { a_Qw0, a_Qw1, a_Qw2, a_Qw3 } } | |
672 | #endif | |
673 | ||
674 | /** @def RTUINT256_INIT_C | |
675 | * Portable RTUINT256U initializer for 64-bit constants. */ | |
676 | #define RTUINT256_INIT_C(a_Qw3, a_Qw2, a_Qw1, a_Qw0) \ | |
677 | RTUINT256_INIT(UINT64_C(a_Qw3), UINT64_C(a_Qw2), UINT64_C(a_Qw1), UINT64_C(a_Qw0)) | |
678 | ||
679 | ||
680 | /** | |
681 | * 512-bit unsigned integer union. | |
682 | */ | |
683 | #pragma pack(1) | |
684 | typedef union RTUINT512U | |
685 | { | |
686 | /** Quad-Word view (first as it's used by RTUINT512_INIT). */ | |
687 | struct | |
688 | { | |
689 | #ifdef RT_BIG_ENDIAN | |
690 | uint64_t qw7; | |
691 | uint64_t qw6; | |
692 | uint64_t qw5; | |
693 | uint64_t qw4; | |
694 | uint64_t qw3; | |
695 | uint64_t qw2; | |
696 | uint64_t qw1; | |
697 | uint64_t qw0; | |
698 | #else | |
699 | uint64_t qw0; | |
700 | uint64_t qw1; | |
701 | uint64_t qw2; | |
702 | uint64_t qw3; | |
703 | uint64_t qw4; | |
704 | uint64_t qw5; | |
705 | uint64_t qw6; | |
706 | uint64_t qw7; | |
707 | #endif | |
708 | } QWords; | |
709 | /** Double-Word view. */ | |
710 | struct | |
711 | { | |
712 | #ifdef RT_BIG_ENDIAN | |
713 | uint32_t dw15; | |
714 | uint32_t dw14; | |
715 | uint32_t dw13; | |
716 | uint32_t dw12; | |
717 | uint32_t dw11; | |
718 | uint32_t dw10; | |
719 | uint32_t dw9; | |
720 | uint32_t dw8; | |
721 | uint32_t dw7; | |
722 | uint32_t dw6; | |
723 | uint32_t dw5; | |
724 | uint32_t dw4; | |
725 | uint32_t dw3; | |
726 | uint32_t dw2; | |
727 | uint32_t dw1; | |
728 | uint32_t dw0; | |
729 | #else | |
730 | uint32_t dw0; | |
731 | uint32_t dw1; | |
732 | uint32_t dw2; | |
733 | uint32_t dw3; | |
734 | uint32_t dw4; | |
735 | uint32_t dw5; | |
736 | uint32_t dw6; | |
737 | uint32_t dw7; | |
738 | uint32_t dw8; | |
739 | uint32_t dw9; | |
740 | uint32_t dw10; | |
741 | uint32_t dw11; | |
742 | uint32_t dw12; | |
743 | uint32_t dw13; | |
744 | uint32_t dw14; | |
745 | uint32_t dw15; | |
746 | #endif | |
747 | } DWords; | |
748 | /** Word view. */ | |
749 | struct | |
750 | { | |
751 | #ifdef RT_BIG_ENDIAN | |
752 | uint16_t w31; | |
753 | uint16_t w30; | |
754 | uint16_t w29; | |
755 | uint16_t w28; | |
756 | uint16_t w27; | |
757 | uint16_t w26; | |
758 | uint16_t w25; | |
759 | uint16_t w24; | |
760 | uint16_t w23; | |
761 | uint16_t w22; | |
762 | uint16_t w21; | |
763 | uint16_t w20; | |
764 | uint16_t w19; | |
765 | uint16_t w18; | |
766 | uint16_t w17; | |
767 | uint16_t w16; | |
768 | uint16_t w15; | |
769 | uint16_t w14; | |
770 | uint16_t w13; | |
771 | uint16_t w12; | |
772 | uint16_t w11; | |
773 | uint16_t w10; | |
774 | uint16_t w9; | |
775 | uint16_t w8; | |
776 | uint16_t w7; | |
777 | uint16_t w6; | |
778 | uint16_t w5; | |
779 | uint16_t w4; | |
780 | uint16_t w3; | |
781 | uint16_t w2; | |
782 | uint16_t w1; | |
783 | uint16_t w0; | |
784 | #else | |
785 | uint16_t w0; | |
786 | uint16_t w1; | |
787 | uint16_t w2; | |
788 | uint16_t w3; | |
789 | uint16_t w4; | |
790 | uint16_t w5; | |
791 | uint16_t w6; | |
792 | uint16_t w7; | |
793 | uint16_t w8; | |
794 | uint16_t w9; | |
795 | uint16_t w10; | |
796 | uint16_t w11; | |
797 | uint16_t w12; | |
798 | uint16_t w13; | |
799 | uint16_t w14; | |
800 | uint16_t w15; | |
801 | uint16_t w16; | |
802 | uint16_t w17; | |
803 | uint16_t w18; | |
804 | uint16_t w19; | |
805 | uint16_t w20; | |
806 | uint16_t w21; | |
807 | uint16_t w22; | |
808 | uint16_t w23; | |
809 | uint16_t w24; | |
810 | uint16_t w25; | |
811 | uint16_t w26; | |
812 | uint16_t w27; | |
813 | uint16_t w28; | |
814 | uint16_t w29; | |
815 | uint16_t w30; | |
816 | uint16_t w31; | |
817 | #endif | |
818 | } Words; | |
819 | ||
820 | /** Double-Quad-Word view. */ | |
821 | struct | |
822 | { | |
823 | #ifdef RT_BIG_ENDIAN | |
824 | RTUINT128U dqw3; | |
825 | RTUINT128U dqw2; | |
826 | RTUINT128U dqw1; | |
827 | RTUINT128U dqw0; | |
828 | #else | |
829 | RTUINT128U dqw0; | |
830 | RTUINT128U dqw1; | |
831 | RTUINT128U dqw2; | |
832 | RTUINT128U dqw3; | |
833 | #endif | |
834 | } DQWords; | |
835 | ||
836 | /** Octo-Word view. */ | |
837 | struct | |
838 | { | |
839 | #ifdef RT_BIG_ENDIAN | |
840 | RTUINT256U ow3; | |
841 | RTUINT256U ow2; | |
842 | RTUINT256U ow1; | |
843 | RTUINT256U ow0; | |
844 | #else | |
845 | RTUINT256U ow0; | |
846 | RTUINT256U ow1; | |
847 | RTUINT256U ow2; | |
848 | RTUINT256U ow3; | |
849 | #endif | |
850 | } OWords; | |
851 | ||
852 | /** 256-bit view. */ | |
853 | RTUINT256U au256[2]; | |
854 | /** 128-bit view. */ | |
855 | RTUINT128U au128[4]; | |
856 | /** 64-bit view. */ | |
857 | uint64_t au64[8]; | |
858 | /** 32-bit view. */ | |
859 | uint32_t au32[16]; | |
860 | /** 16-bit view. */ | |
861 | uint16_t au16[32]; | |
862 | /** 8-bit view. */ | |
863 | uint8_t au8[64]; | |
864 | } RTUINT512U; | |
865 | #pragma pack() | |
866 | /** Pointer to a 512-bit unsigned integer union. */ | |
6d209b23 | 867 | typedef RTUINT512U RT_FAR *PRTUINT512U; |
056a1eb7 | 868 | /** Pointer to a const 512-bit unsigned integer union. */ |
6d209b23 | 869 | typedef const RTUINT512U RT_FAR *PCRTUINT512U; |
056a1eb7 SF |
870 | |
871 | /** @def RTUINT512_INIT | |
872 | * Portable RTUINT512U initializer. */ | |
873 | #ifdef RT_BIG_ENDIAN | |
874 | # define RTUINT512_INIT(a_Qw7, a_Qw6, a_Qw5, a_Qw4, a_Qw3, a_Qw2, a_Qw1, a_Qw0) \ | |
875 | { { a_Qw7, a_Qw6, a_Qw5, a_Qw4, a_Qw3, a_Qw2, a_Qw1, a_Qw0 } } | |
876 | #else | |
877 | # define RTUINT512_INIT(a_Qw7, a_Qw6, a_Qw5, a_Qw4, a_Qw3, a_Qw2, a_Qw1, a_Qw0) \ | |
878 | { { a_Qw0, a_Qw1, a_Qw2, a_Qw3, a_Qw4, a_Qw5, a_Qw6, a_Qw7 } } | |
879 | #endif | |
880 | ||
881 | /** @def RTUINT512_INIT_C | |
882 | * Portable RTUINT512U initializer for 64-bit constants. */ | |
883 | #define RTUINT512_INIT_C(a_Qw7, a_Qw6, a_Qw5, a_Qw4, a_Qw3, a_Qw2, a_Qw1, a_Qw0) \ | |
884 | RTUINT512_INIT(UINT64_C(a_Qw7), UINT64_C(a_Qw6), UINT64_C(a_Qw5), UINT64_C(a_Qw4), \ | |
885 | UINT64_C(a_Qw3), UINT64_C(a_Qw2), UINT64_C(a_Qw1), UINT64_C(a_Qw0)) | |
886 | ||
887 | ||
888 | /** | |
889 | * Double precision floating point format (64-bit). | |
890 | */ | |
891 | typedef union RTFLOAT64U | |
892 | { | |
893 | #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) | |
894 | /** Double view. */ | |
895 | double rd; | |
896 | #endif | |
897 | /** Format using regular bitfields. */ | |
898 | struct | |
899 | { | |
900 | # ifdef RT_BIG_ENDIAN | |
901 | /** The sign indicator. */ | |
902 | uint32_t fSign : 1; | |
903 | /** The exponent (offseted by 1023). */ | |
904 | uint32_t uExponent : 11; | |
905 | /** The fraction, bits 32 thru 51. */ | |
906 | uint32_t u20FractionHigh : 20; | |
907 | /** The fraction, bits 0 thru 31. */ | |
908 | uint32_t u32FractionLow; | |
909 | # else | |
910 | /** The fraction, bits 0 thru 31. */ | |
911 | uint32_t u32FractionLow; | |
912 | /** The fraction, bits 32 thru 51. */ | |
913 | uint32_t u20FractionHigh : 20; | |
914 | /** The exponent (offseted by 1023). */ | |
915 | uint32_t uExponent : 11; | |
916 | /** The sign indicator. */ | |
917 | uint32_t fSign : 1; | |
918 | # endif | |
919 | } s; | |
920 | ||
921 | #ifdef RT_COMPILER_GROKS_64BIT_BITFIELDS | |
922 | /** Format using 64-bit bitfields. */ | |
923 | RT_GCC_EXTENSION struct | |
924 | { | |
925 | # ifdef RT_BIG_ENDIAN | |
926 | /** The sign indicator. */ | |
927 | RT_GCC_EXTENSION uint64_t fSign : 1; | |
928 | /** The exponent (offseted by 1023). */ | |
929 | RT_GCC_EXTENSION uint64_t uExponent : 11; | |
930 | /** The fraction. */ | |
931 | RT_GCC_EXTENSION uint64_t uFraction : 52; | |
932 | # else | |
933 | /** The fraction. */ | |
934 | RT_GCC_EXTENSION uint64_t uFraction : 52; | |
935 | /** The exponent (offseted by 1023). */ | |
936 | RT_GCC_EXTENSION uint64_t uExponent : 11; | |
937 | /** The sign indicator. */ | |
938 | RT_GCC_EXTENSION uint64_t fSign : 1; | |
939 | # endif | |
940 | } s64; | |
941 | #endif | |
942 | ||
943 | /** 64-bit view. */ | |
944 | uint64_t au64[1]; | |
945 | /** 32-bit view. */ | |
946 | uint32_t au32[2]; | |
947 | /** 16-bit view. */ | |
948 | uint16_t au16[4]; | |
949 | /** 8-bit view. */ | |
950 | uint8_t au8[8]; | |
951 | } RTFLOAT64U; | |
952 | /** Pointer to a double precision floating point format union. */ | |
6d209b23 | 953 | typedef RTFLOAT64U RT_FAR *PRTFLOAT64U; |
056a1eb7 | 954 | /** Pointer to a const double precision floating point format union. */ |
6d209b23 | 955 | typedef const RTFLOAT64U RT_FAR *PCRTFLOAT64U; |
056a1eb7 SF |
956 | |
957 | ||
958 | #if !defined(__IBMCPP__) && !defined(__IBMC__) | |
959 | ||
960 | /** | |
961 | * Extended Double precision floating point format (80-bit). | |
962 | */ | |
963 | #pragma pack(1) | |
964 | typedef union RTFLOAT80U | |
965 | { | |
966 | /** Format using bitfields. */ | |
967 | RT_GCC_EXTENSION struct | |
968 | { | |
969 | # ifdef RT_BIG_ENDIAN | |
970 | /** The sign indicator. */ | |
971 | RT_GCC_EXTENSION uint16_t fSign : 1; | |
972 | /** The exponent (offseted by 16383). */ | |
973 | RT_GCC_EXTENSION uint16_t uExponent : 15; | |
974 | /** The mantissa. */ | |
975 | uint64_t u64Mantissa; | |
976 | # else | |
977 | /** The mantissa. */ | |
978 | uint64_t u64Mantissa; | |
979 | /** The exponent (offseted by 16383). */ | |
980 | RT_GCC_EXTENSION uint16_t uExponent : 15; | |
981 | /** The sign indicator. */ | |
982 | RT_GCC_EXTENSION uint16_t fSign : 1; | |
983 | # endif | |
984 | } s; | |
985 | ||
986 | /** 64-bit view. */ | |
987 | uint64_t au64[1]; | |
988 | /** 32-bit view. */ | |
989 | uint32_t au32[2]; | |
990 | /** 16-bit view. */ | |
991 | uint16_t au16[5]; | |
992 | /** 8-bit view. */ | |
993 | uint8_t au8[10]; | |
994 | } RTFLOAT80U; | |
995 | #pragma pack() | |
996 | /** Pointer to a extended precision floating point format union. */ | |
6d209b23 | 997 | typedef RTFLOAT80U RT_FAR *PRTFLOAT80U; |
056a1eb7 | 998 | /** Pointer to a const extended precision floating point format union. */ |
6d209b23 | 999 | typedef const RTFLOAT80U RT_FAR *PCRTFLOAT80U; |
056a1eb7 SF |
1000 | |
1001 | ||
1002 | /** | |
1003 | * A variant of RTFLOAT80U that may be larger than 80-bits depending on how the | |
1004 | * compiler implements long double. | |
1005 | */ | |
1006 | #pragma pack(1) | |
1007 | typedef union RTFLOAT80U2 | |
1008 | { | |
1009 | #ifdef RT_COMPILER_WITH_80BIT_LONG_DOUBLE | |
1010 | /** Long double view. */ | |
1011 | long double lrd; | |
1012 | #endif | |
1013 | /** Format using bitfields. */ | |
1014 | RT_GCC_EXTENSION struct | |
1015 | { | |
1016 | #ifdef RT_BIG_ENDIAN | |
1017 | /** The sign indicator. */ | |
1018 | RT_GCC_EXTENSION uint16_t fSign : 1; | |
1019 | /** The exponent (offseted by 16383). */ | |
1020 | RT_GCC_EXTENSION uint16_t uExponent : 15; | |
1021 | /** The mantissa. */ | |
1022 | uint64_t u64Mantissa; | |
1023 | #else | |
1024 | /** The mantissa. */ | |
1025 | uint64_t u64Mantissa; | |
1026 | /** The exponent (offseted by 16383). */ | |
1027 | RT_GCC_EXTENSION uint16_t uExponent : 15; | |
1028 | /** The sign indicator. */ | |
1029 | RT_GCC_EXTENSION uint16_t fSign : 1; | |
1030 | #endif | |
1031 | } s; | |
1032 | ||
1033 | /** Bitfield exposing the J bit and the fraction. */ | |
1034 | RT_GCC_EXTENSION struct | |
1035 | { | |
1036 | #ifdef RT_BIG_ENDIAN | |
1037 | /** The sign indicator. */ | |
1038 | RT_GCC_EXTENSION uint16_t fSign : 1; | |
1039 | /** The exponent (offseted by 16383). */ | |
1040 | RT_GCC_EXTENSION uint16_t uExponent : 15; | |
1041 | /** The J bit, aka the integer bit. */ | |
1042 | uint32_t fInteger; | |
1043 | /** The fraction, bits 32 thru 62. */ | |
1044 | uint32_t u31FractionHigh : 31; | |
1045 | /** The fraction, bits 0 thru 31. */ | |
1046 | uint32_t u32FractionLow : 32; | |
1047 | #else | |
1048 | /** The fraction, bits 0 thru 31. */ | |
1049 | uint32_t u32FractionLow : 32; | |
1050 | /** The fraction, bits 32 thru 62. */ | |
1051 | uint32_t u31FractionHigh : 31; | |
1052 | /** The J bit, aka the integer bit. */ | |
1053 | uint32_t fInteger; | |
1054 | /** The exponent (offseted by 16383). */ | |
1055 | RT_GCC_EXTENSION uint16_t uExponent : 15; | |
1056 | /** The sign indicator. */ | |
1057 | RT_GCC_EXTENSION uint16_t fSign : 1; | |
1058 | #endif | |
1059 | } sj; | |
1060 | ||
1061 | #ifdef RT_COMPILER_GROKS_64BIT_BITFIELDS | |
1062 | /** 64-bit bitfields exposing the J bit and the fraction. */ | |
1063 | RT_GCC_EXTENSION struct | |
1064 | { | |
1065 | # ifdef RT_BIG_ENDIAN | |
1066 | /** The sign indicator. */ | |
1067 | RT_GCC_EXTENSION uint16_t fSign : 1; | |
1068 | /** The exponent (offseted by 16383). */ | |
1069 | RT_GCC_EXTENSION uint16_t uExponent : 15; | |
1070 | /** The J bit, aka the integer bit. */ | |
1071 | RT_GCC_EXTENSION uint64_t fInteger : 1; | |
1072 | /** The fraction. */ | |
1073 | RT_GCC_EXTENSION uint64_t u63Fraction : 63; | |
1074 | # else | |
1075 | /** The fraction. */ | |
1076 | RT_GCC_EXTENSION uint64_t u63Fraction : 63; | |
1077 | /** The J bit, aka the integer bit. */ | |
1078 | RT_GCC_EXTENSION uint64_t fInteger : 1; | |
1079 | /** The exponent (offseted by 16383). */ | |
1080 | RT_GCC_EXTENSION uint16_t uExponent : 15; | |
1081 | /** The sign indicator. */ | |
1082 | RT_GCC_EXTENSION uint16_t fSign : 1; | |
1083 | # endif | |
1084 | } sj64; | |
1085 | #endif | |
1086 | ||
1087 | /** 64-bit view. */ | |
1088 | uint64_t au64[1]; | |
1089 | /** 32-bit view. */ | |
1090 | uint32_t au32[2]; | |
1091 | /** 16-bit view. */ | |
1092 | uint16_t au16[5]; | |
1093 | /** 8-bit view. */ | |
1094 | uint8_t au8[10]; | |
1095 | } RTFLOAT80U2; | |
1096 | #pragma pack() | |
1097 | /** Pointer to a extended precision floating point format union, 2nd | |
1098 | * variant. */ | |
6d209b23 | 1099 | typedef RTFLOAT80U2 RT_FAR *PRTFLOAT80U2; |
056a1eb7 SF |
1100 | /** Pointer to a const extended precision floating point format union, 2nd |
1101 | * variant. */ | |
6d209b23 | 1102 | typedef const RTFLOAT80U2 RT_FAR *PCRTFLOAT80U2; |
056a1eb7 SF |
1103 | |
1104 | #endif /* uint16_t bitfields doesn't work */ | |
1105 | ||
1106 | ||
1107 | /** Generic function type. | |
1108 | * @see PFNRT | |
1109 | */ | |
1110 | typedef DECLCALLBACK(void) FNRT(void); | |
1111 | ||
1112 | /** Generic function pointer. | |
1113 | * With -pedantic, gcc-4 complains when casting a function to a data object, for | |
1114 | * example: | |
1115 | * | |
1116 | * @code | |
1117 | * void foo(void) | |
1118 | * { | |
1119 | * } | |
1120 | * | |
1121 | * void *bar = (void *)foo; | |
1122 | * @endcode | |
1123 | * | |
1124 | * The compiler would warn with "ISO C++ forbids casting between | |
1125 | * pointer-to-function and pointer-to-object". The purpose of this warning is | |
1126 | * not to bother the programmer but to point out that he is probably doing | |
1127 | * something dangerous, assigning a pointer to executable code to a data object. | |
1128 | */ | |
1129 | typedef FNRT *PFNRT; | |
1130 | ||
1131 | /** Millisecond interval. */ | |
6d209b23 | 1132 | typedef uint32_t RTMSINTERVAL; |
056a1eb7 | 1133 | /** Pointer to a millisecond interval. */ |
6d209b23 | 1134 | typedef RTMSINTERVAL RT_FAR *PRTMSINTERVAL; |
056a1eb7 | 1135 | /** Pointer to a const millisecond interval. */ |
6d209b23 | 1136 | typedef const RTMSINTERVAL RT_FAR *PCRTMSINTERVAL; |
056a1eb7 SF |
1137 | |
1138 | /** Pointer to a time spec structure. */ | |
6d209b23 | 1139 | typedef struct RTTIMESPEC RT_FAR *PRTTIMESPEC; |
056a1eb7 | 1140 | /** Pointer to a const time spec structure. */ |
6d209b23 | 1141 | typedef const struct RTTIMESPEC RT_FAR *PCRTTIMESPEC; |
056a1eb7 SF |
1142 | |
1143 | ||
1144 | ||
1145 | /** @defgroup grp_rt_types_both Common Guest and Host Context Basic Types | |
1146 | * @{ | |
1147 | */ | |
1148 | ||
1149 | /** Signed integer which can contain both GC and HC pointers. */ | |
1150 | #if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) || (HC_ARCH_BITS == 16 || GC_ARCH_BITS == 16) | |
6d209b23 | 1151 | typedef int32_t RTINTPTR; |
056a1eb7 | 1152 | #elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) |
6d209b23 | 1153 | typedef int64_t RTINTPTR; |
056a1eb7 SF |
1154 | #else |
1155 | # error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. | |
1156 | #endif | |
1157 | /** Pointer to signed integer which can contain both GC and HC pointers. */ | |
6d209b23 | 1158 | typedef RTINTPTR RT_FAR *PRTINTPTR; |
056a1eb7 | 1159 | /** Pointer const to signed integer which can contain both GC and HC pointers. */ |
6d209b23 | 1160 | typedef const RTINTPTR RT_FAR *PCRTINTPTR; |
056a1eb7 SF |
1161 | /** The maximum value the RTINTPTR type can hold. */ |
1162 | #if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) || (HC_ARCH_BITS == 16 || GC_ARCH_BITS == 16) | |
1163 | # define RTINTPTR_MAX INT32_MAX | |
1164 | #elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) | |
1165 | # define RTINTPTR_MAX INT64_MAX | |
1166 | #else | |
1167 | # error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. | |
1168 | #endif | |
1169 | /** The minimum value the RTINTPTR type can hold. */ | |
1170 | #if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) || (HC_ARCH_BITS == 16 || GC_ARCH_BITS == 16) | |
6d209b23 | 1171 | # define RTINTPTR_MIN INT32_MIN |
056a1eb7 | 1172 | #elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) |
6d209b23 | 1173 | # define RTINTPTR_MIN INT64_MIN |
056a1eb7 SF |
1174 | #else |
1175 | # error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. | |
1176 | #endif | |
1177 | ||
1178 | /** Unsigned integer which can contain both GC and HC pointers. */ | |
1179 | #if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) || (HC_ARCH_BITS == 16 || GC_ARCH_BITS == 16) | |
6d209b23 | 1180 | typedef uint32_t RTUINTPTR; |
056a1eb7 | 1181 | #elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) |
6d209b23 | 1182 | typedef uint64_t RTUINTPTR; |
056a1eb7 SF |
1183 | #else |
1184 | # error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. | |
1185 | #endif | |
1186 | /** Pointer to unsigned integer which can contain both GC and HC pointers. */ | |
6d209b23 | 1187 | typedef RTUINTPTR RT_FAR *PRTUINTPTR; |
056a1eb7 | 1188 | /** Pointer const to unsigned integer which can contain both GC and HC pointers. */ |
6d209b23 | 1189 | typedef const RTUINTPTR RT_FAR *PCRTUINTPTR; |
056a1eb7 SF |
1190 | /** The maximum value the RTUINTPTR type can hold. */ |
1191 | #if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) || (HC_ARCH_BITS == 16 || GC_ARCH_BITS == 16) | |
6d209b23 | 1192 | # define RTUINTPTR_MAX UINT32_MAX |
056a1eb7 | 1193 | #elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) |
6d209b23 | 1194 | # define RTUINTPTR_MAX UINT64_MAX |
056a1eb7 SF |
1195 | #else |
1196 | # error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. | |
1197 | #endif | |
1198 | ||
1199 | /** Signed integer. */ | |
6d209b23 | 1200 | typedef int32_t RTINT; |
056a1eb7 | 1201 | /** Pointer to signed integer. */ |
6d209b23 | 1202 | typedef RTINT RT_FAR *PRTINT; |
056a1eb7 | 1203 | /** Pointer to const signed integer. */ |
6d209b23 | 1204 | typedef const RTINT RT_FAR *PCRTINT; |
056a1eb7 SF |
1205 | |
1206 | /** Unsigned integer. */ | |
6d209b23 | 1207 | typedef uint32_t RTUINT; |
056a1eb7 | 1208 | /** Pointer to unsigned integer. */ |
6d209b23 | 1209 | typedef RTUINT RT_FAR *PRTUINT; |
056a1eb7 | 1210 | /** Pointer to const unsigned integer. */ |
6d209b23 | 1211 | typedef const RTUINT RT_FAR *PCRTUINT; |
056a1eb7 SF |
1212 | |
1213 | /** A file offset / size (off_t). */ | |
6d209b23 | 1214 | typedef int64_t RTFOFF; |
056a1eb7 | 1215 | /** Pointer to a file offset / size. */ |
6d209b23 | 1216 | typedef RTFOFF RT_FAR *PRTFOFF; |
056a1eb7 | 1217 | /** The max value for RTFOFF. */ |
6d209b23 | 1218 | #define RTFOFF_MAX INT64_MAX |
056a1eb7 | 1219 | /** The min value for RTFOFF. */ |
6d209b23 | 1220 | #define RTFOFF_MIN INT64_MIN |
056a1eb7 SF |
1221 | |
1222 | /** File mode (see iprt/fs.h). */ | |
6d209b23 | 1223 | typedef uint32_t RTFMODE; |
056a1eb7 | 1224 | /** Pointer to file mode. */ |
6d209b23 | 1225 | typedef RTFMODE RT_FAR *PRTFMODE; |
056a1eb7 SF |
1226 | |
1227 | /** Device unix number. */ | |
6d209b23 | 1228 | typedef uint32_t RTDEV; |
056a1eb7 | 1229 | /** Pointer to a device unix number. */ |
6d209b23 | 1230 | typedef RTDEV RT_FAR *PRTDEV; |
056a1eb7 SF |
1231 | |
1232 | /** @name RTDEV Macros | |
1233 | * @{ */ | |
1234 | /** | |
1235 | * Our makedev macro. | |
1236 | * @returns RTDEV | |
1237 | * @param uMajor The major device number. | |
1238 | * @param uMinor The minor device number. | |
1239 | */ | |
1240 | #define RTDEV_MAKE(uMajor, uMinor) ((RTDEV)( ((RTDEV)(uMajor) << 24) | (uMinor & UINT32_C(0x00ffffff)) )) | |
1241 | /** | |
1242 | * Get the major device node number from an RTDEV type. | |
1243 | * @returns The major device number of @a uDev | |
1244 | * @param uDev The device number. | |
1245 | */ | |
1246 | #define RTDEV_MAJOR(uDev) ((uDev) >> 24) | |
1247 | /** | |
1248 | * Get the minor device node number from an RTDEV type. | |
1249 | * @returns The minor device number of @a uDev | |
1250 | * @param uDev The device number. | |
1251 | */ | |
1252 | #define RTDEV_MINOR(uDev) ((uDev) & UINT32_C(0x00ffffff)) | |
1253 | /** @} */ | |
1254 | ||
1255 | /** i-node number. */ | |
6d209b23 | 1256 | typedef uint64_t RTINODE; |
056a1eb7 | 1257 | /** Pointer to a i-node number. */ |
6d209b23 | 1258 | typedef RTINODE RT_FAR *PRTINODE; |
056a1eb7 SF |
1259 | |
1260 | /** User id. */ | |
6d209b23 | 1261 | typedef uint32_t RTUID; |
056a1eb7 | 1262 | /** Pointer to a user id. */ |
6d209b23 | 1263 | typedef RTUID RT_FAR *PRTUID; |
056a1eb7 SF |
1264 | /** NIL user id. |
1265 | * @todo check this for portability! */ | |
6d209b23 | 1266 | #define NIL_RTUID (~(RTUID)0) |
056a1eb7 SF |
1267 | |
1268 | /** Group id. */ | |
6d209b23 | 1269 | typedef uint32_t RTGID; |
056a1eb7 | 1270 | /** Pointer to a group id. */ |
6d209b23 | 1271 | typedef RTGID RT_FAR *PRTGID; |
056a1eb7 SF |
1272 | /** NIL group id. |
1273 | * @todo check this for portability! */ | |
6d209b23 | 1274 | #define NIL_RTGID (~(RTGID)0) |
056a1eb7 SF |
1275 | |
1276 | /** I/O Port. */ | |
6d209b23 | 1277 | typedef uint16_t RTIOPORT; |
056a1eb7 | 1278 | /** Pointer to I/O Port. */ |
6d209b23 | 1279 | typedef RTIOPORT RT_FAR *PRTIOPORT; |
056a1eb7 | 1280 | /** Pointer to const I/O Port. */ |
6d209b23 | 1281 | typedef const RTIOPORT RT_FAR *PCRTIOPORT; |
056a1eb7 SF |
1282 | |
1283 | /** Selector. */ | |
6d209b23 | 1284 | typedef uint16_t RTSEL; |
056a1eb7 | 1285 | /** Pointer to selector. */ |
6d209b23 | 1286 | typedef RTSEL RT_FAR *PRTSEL; |
056a1eb7 | 1287 | /** Pointer to const selector. */ |
6d209b23 | 1288 | typedef const RTSEL RT_FAR *PCRTSEL; |
056a1eb7 | 1289 | /** Max selector value. */ |
6d209b23 | 1290 | #define RTSEL_MAX UINT16_MAX |
056a1eb7 SF |
1291 | |
1292 | /** Far 16-bit pointer. */ | |
1293 | #pragma pack(1) | |
1294 | typedef struct RTFAR16 | |
1295 | { | |
1296 | uint16_t off; | |
1297 | RTSEL sel; | |
1298 | } RTFAR16; | |
1299 | #pragma pack() | |
1300 | /** Pointer to Far 16-bit pointer. */ | |
6d209b23 | 1301 | typedef RTFAR16 RT_FAR *PRTFAR16; |
056a1eb7 | 1302 | /** Pointer to const Far 16-bit pointer. */ |
6d209b23 | 1303 | typedef const RTFAR16 RT_FAR *PCRTFAR16; |
056a1eb7 SF |
1304 | |
1305 | /** Far 32-bit pointer. */ | |
1306 | #pragma pack(1) | |
1307 | typedef struct RTFAR32 | |
1308 | { | |
1309 | uint32_t off; | |
1310 | RTSEL sel; | |
1311 | } RTFAR32; | |
1312 | #pragma pack() | |
1313 | /** Pointer to Far 32-bit pointer. */ | |
6d209b23 | 1314 | typedef RTFAR32 RT_FAR *PRTFAR32; |
056a1eb7 | 1315 | /** Pointer to const Far 32-bit pointer. */ |
6d209b23 | 1316 | typedef const RTFAR32 RT_FAR *PCRTFAR32; |
056a1eb7 SF |
1317 | |
1318 | /** Far 64-bit pointer. */ | |
1319 | #pragma pack(1) | |
1320 | typedef struct RTFAR64 | |
1321 | { | |
1322 | uint64_t off; | |
1323 | RTSEL sel; | |
1324 | } RTFAR64; | |
1325 | #pragma pack() | |
1326 | /** Pointer to Far 64-bit pointer. */ | |
6d209b23 | 1327 | typedef RTFAR64 RT_FAR *PRTFAR64; |
056a1eb7 | 1328 | /** Pointer to const Far 64-bit pointer. */ |
6d209b23 | 1329 | typedef const RTFAR64 RT_FAR *PCRTFAR64; |
056a1eb7 SF |
1330 | |
1331 | /** @} */ | |
1332 | ||
1333 | ||
1334 | /** @defgroup grp_rt_types_hc Host Context Basic Types | |
1335 | * @{ | |
1336 | */ | |
1337 | ||
1338 | /** HC Natural signed integer. | |
1339 | * @deprecated silly type. */ | |
6d209b23 | 1340 | typedef int32_t RTHCINT; |
056a1eb7 SF |
1341 | /** Pointer to HC Natural signed integer. |
1342 | * @deprecated silly type. */ | |
6d209b23 | 1343 | typedef RTHCINT RT_FAR *PRTHCINT; |
056a1eb7 SF |
1344 | /** Pointer to const HC Natural signed integer. |
1345 | * @deprecated silly type. */ | |
6d209b23 | 1346 | typedef const RTHCINT RT_FAR *PCRTHCINT; |
056a1eb7 SF |
1347 | |
1348 | /** HC Natural unsigned integer. | |
1349 | * @deprecated silly type. */ | |
6d209b23 | 1350 | typedef uint32_t RTHCUINT; |
056a1eb7 SF |
1351 | /** Pointer to HC Natural unsigned integer. |
1352 | * @deprecated silly type. */ | |
6d209b23 | 1353 | typedef RTHCUINT RT_FAR *PRTHCUINT; |
056a1eb7 SF |
1354 | /** Pointer to const HC Natural unsigned integer. |
1355 | * @deprecated silly type. */ | |
6d209b23 | 1356 | typedef const RTHCUINT RT_FAR *PCRTHCUINT; |
056a1eb7 SF |
1357 | |
1358 | ||
1359 | /** Signed integer which can contain a HC pointer. */ | |
6d209b23 SF |
1360 | #if HC_ARCH_BITS == 32 || HC_ARCH_BITS == 16 |
1361 | typedef int32_t RTHCINTPTR; | |
056a1eb7 | 1362 | #elif HC_ARCH_BITS == 64 |
6d209b23 | 1363 | typedef int64_t RTHCINTPTR; |
056a1eb7 SF |
1364 | #else |
1365 | # error Unsupported HC_ARCH_BITS value. | |
1366 | #endif | |
1367 | /** Pointer to signed integer which can contain a HC pointer. */ | |
6d209b23 | 1368 | typedef RTHCINTPTR RT_FAR *PRTHCINTPTR; |
056a1eb7 | 1369 | /** Pointer to const signed integer which can contain a HC pointer. */ |
6d209b23 | 1370 | typedef const RTHCINTPTR RT_FAR *PCRTHCINTPTR; |
056a1eb7 SF |
1371 | /** Max RTHCINTPTR value. */ |
1372 | #if HC_ARCH_BITS == 32 | |
6d209b23 | 1373 | # define RTHCINTPTR_MAX INT32_MAX |
056a1eb7 | 1374 | #elif HC_ARCH_BITS == 64 |
6d209b23 | 1375 | # define RTHCINTPTR_MAX INT64_MAX |
056a1eb7 | 1376 | #else |
6d209b23 | 1377 | # define RTHCINTPTR_MAX INT16_MAX |
056a1eb7 SF |
1378 | #endif |
1379 | /** Min RTHCINTPTR value. */ | |
1380 | #if HC_ARCH_BITS == 32 | |
6d209b23 | 1381 | # define RTHCINTPTR_MIN INT32_MIN |
056a1eb7 | 1382 | #elif HC_ARCH_BITS == 64 |
6d209b23 | 1383 | # define RTHCINTPTR_MIN INT64_MIN |
056a1eb7 | 1384 | #else |
6d209b23 | 1385 | # define RTHCINTPTR_MIN INT16_MIN |
056a1eb7 SF |
1386 | #endif |
1387 | ||
1388 | /** Signed integer which can contain a HC ring-3 pointer. */ | |
6d209b23 SF |
1389 | #if R3_ARCH_BITS == 32 || R3_ARCH_BITS == 16 |
1390 | typedef int32_t RTR3INTPTR; | |
056a1eb7 | 1391 | #elif R3_ARCH_BITS == 64 |
6d209b23 | 1392 | typedef int64_t RTR3INTPTR; |
056a1eb7 SF |
1393 | #else |
1394 | # error Unsupported R3_ARCH_BITS value. | |
1395 | #endif | |
1396 | /** Pointer to signed integer which can contain a HC ring-3 pointer. */ | |
6d209b23 | 1397 | typedef RTR3INTPTR RT_FAR *PRTR3INTPTR; |
056a1eb7 | 1398 | /** Pointer to const signed integer which can contain a HC ring-3 pointer. */ |
6d209b23 | 1399 | typedef const RTR3INTPTR RT_FAR *PCRTR3INTPTR; |
056a1eb7 | 1400 | /** Max RTR3INTPTR value. */ |
6d209b23 SF |
1401 | #if R3_ARCH_BITS == 32 || R3_ARCH_BITS == 16 |
1402 | # define RTR3INTPTR_MAX INT32_MAX | |
056a1eb7 | 1403 | #else |
6d209b23 | 1404 | # define RTR3INTPTR_MAX INT64_MAX |
056a1eb7 SF |
1405 | #endif |
1406 | /** Min RTR3INTPTR value. */ | |
6d209b23 SF |
1407 | #if R3_ARCH_BITS == 32 || R3_ARCH_BITS == 16 |
1408 | # define RTR3INTPTR_MIN INT32_MIN | |
056a1eb7 | 1409 | #else |
6d209b23 | 1410 | # define RTR3INTPTR_MIN INT64_MIN |
056a1eb7 SF |
1411 | #endif |
1412 | ||
1413 | /** Signed integer which can contain a HC ring-0 pointer. */ | |
6d209b23 SF |
1414 | #if R0_ARCH_BITS == 32 || R0_ARCH_BITS == 16 |
1415 | typedef int32_t RTR0INTPTR; | |
056a1eb7 | 1416 | #elif R0_ARCH_BITS == 64 |
6d209b23 | 1417 | typedef int64_t RTR0INTPTR; |
056a1eb7 SF |
1418 | #else |
1419 | # error Unsupported R0_ARCH_BITS value. | |
1420 | #endif | |
1421 | /** Pointer to signed integer which can contain a HC ring-0 pointer. */ | |
6d209b23 | 1422 | typedef RTR0INTPTR RT_FAR *PRTR0INTPTR; |
056a1eb7 | 1423 | /** Pointer to const signed integer which can contain a HC ring-0 pointer. */ |
6d209b23 | 1424 | typedef const RTR0INTPTR RT_FAR *PCRTR0INTPTR; |
056a1eb7 | 1425 | /** Max RTR0INTPTR value. */ |
6d209b23 SF |
1426 | #if R0_ARCH_BITS == 32 || R0_ARCH_BITS == 16 |
1427 | # define RTR0INTPTR_MAX INT32_MAX | |
056a1eb7 | 1428 | #else |
6d209b23 | 1429 | # define RTR0INTPTR_MAX INT64_MAX |
056a1eb7 SF |
1430 | #endif |
1431 | /** Min RTHCINTPTR value. */ | |
6d209b23 SF |
1432 | #if R0_ARCH_BITS == 32 || R0_ARCH_BITS == 16 |
1433 | # define RTR0INTPTR_MIN INT32_MIN | |
056a1eb7 | 1434 | #else |
6d209b23 | 1435 | # define RTR0INTPTR_MIN INT64_MIN |
056a1eb7 SF |
1436 | #endif |
1437 | ||
1438 | ||
1439 | /** Unsigned integer which can contain a HC pointer. */ | |
6d209b23 SF |
1440 | #if HC_ARCH_BITS == 32 || HC_ARCH_BITS == 16 |
1441 | typedef uint32_t RTHCUINTPTR; | |
056a1eb7 | 1442 | #elif HC_ARCH_BITS == 64 |
6d209b23 | 1443 | typedef uint64_t RTHCUINTPTR; |
056a1eb7 SF |
1444 | #else |
1445 | # error Unsupported HC_ARCH_BITS value. | |
1446 | #endif | |
1447 | /** Pointer to unsigned integer which can contain a HC pointer. */ | |
6d209b23 | 1448 | typedef RTHCUINTPTR RT_FAR *PRTHCUINTPTR; |
056a1eb7 | 1449 | /** Pointer to unsigned integer which can contain a HC pointer. */ |
6d209b23 | 1450 | typedef const RTHCUINTPTR RT_FAR *PCRTHCUINTPTR; |
056a1eb7 | 1451 | /** Max RTHCUINTTPR value. */ |
6d209b23 SF |
1452 | #if HC_ARCH_BITS == 32 || HC_ARCH_BITS == 16 |
1453 | # define RTHCUINTPTR_MAX UINT32_MAX | |
056a1eb7 | 1454 | #else |
6d209b23 | 1455 | # define RTHCUINTPTR_MAX UINT64_MAX |
056a1eb7 SF |
1456 | #endif |
1457 | ||
1458 | /** Unsigned integer which can contain a HC ring-3 pointer. */ | |
6d209b23 SF |
1459 | #if R3_ARCH_BITS == 32 || R3_ARCH_BITS == 16 |
1460 | typedef uint32_t RTR3UINTPTR; | |
056a1eb7 | 1461 | #elif R3_ARCH_BITS == 64 |
6d209b23 | 1462 | typedef uint64_t RTR3UINTPTR; |
056a1eb7 SF |
1463 | #else |
1464 | # error Unsupported R3_ARCH_BITS value. | |
1465 | #endif | |
1466 | /** Pointer to unsigned integer which can contain a HC ring-3 pointer. */ | |
6d209b23 | 1467 | typedef RTR3UINTPTR RT_FAR *PRTR3UINTPTR; |
056a1eb7 | 1468 | /** Pointer to unsigned integer which can contain a HC ring-3 pointer. */ |
6d209b23 | 1469 | typedef const RTR3UINTPTR RT_FAR *PCRTR3UINTPTR; |
056a1eb7 | 1470 | /** Max RTHCUINTTPR value. */ |
6d209b23 SF |
1471 | #if R3_ARCH_BITS == 32 || R3_ARCH_BITS == 16 |
1472 | # define RTR3UINTPTR_MAX UINT32_MAX | |
056a1eb7 | 1473 | #else |
6d209b23 | 1474 | # define RTR3UINTPTR_MAX UINT64_MAX |
056a1eb7 SF |
1475 | #endif |
1476 | ||
1477 | /** Unsigned integer which can contain a HC ring-0 pointer. */ | |
6d209b23 SF |
1478 | #if R0_ARCH_BITS == 32 || R0_ARCH_BITS == 16 |
1479 | typedef uint32_t RTR0UINTPTR; | |
056a1eb7 | 1480 | #elif R0_ARCH_BITS == 64 |
6d209b23 | 1481 | typedef uint64_t RTR0UINTPTR; |
056a1eb7 SF |
1482 | #else |
1483 | # error Unsupported R0_ARCH_BITS value. | |
1484 | #endif | |
1485 | /** Pointer to unsigned integer which can contain a HC ring-0 pointer. */ | |
6d209b23 | 1486 | typedef RTR0UINTPTR RT_FAR *PRTR0UINTPTR; |
056a1eb7 | 1487 | /** Pointer to unsigned integer which can contain a HC ring-0 pointer. */ |
6d209b23 | 1488 | typedef const RTR0UINTPTR RT_FAR *PCRTR0UINTPTR; |
056a1eb7 | 1489 | /** Max RTR0UINTTPR value. */ |
6d209b23 SF |
1490 | #if R0_ARCH_BITS == 32 || R0_ARCH_BITS == 16 |
1491 | # define RTR0UINTPTR_MAX UINT32_MAX | |
056a1eb7 | 1492 | #else |
6d209b23 | 1493 | # define RTR0UINTPTR_MAX UINT64_MAX |
056a1eb7 SF |
1494 | #endif |
1495 | ||
1496 | ||
1497 | /** Host Physical Memory Address. */ | |
6d209b23 | 1498 | typedef uint64_t RTHCPHYS; |
056a1eb7 | 1499 | /** Pointer to Host Physical Memory Address. */ |
6d209b23 | 1500 | typedef RTHCPHYS RT_FAR *PRTHCPHYS; |
056a1eb7 | 1501 | /** Pointer to const Host Physical Memory Address. */ |
6d209b23 | 1502 | typedef const RTHCPHYS RT_FAR *PCRTHCPHYS; |
056a1eb7 SF |
1503 | /** @def NIL_RTHCPHYS |
1504 | * NIL HC Physical Address. | |
1505 | * NIL_RTHCPHYS is used to signal an invalid physical address, similar | |
1506 | * to the NULL pointer. | |
1507 | */ | |
6d209b23 | 1508 | #define NIL_RTHCPHYS (~(RTHCPHYS)0) |
056a1eb7 | 1509 | /** Max RTHCPHYS value. */ |
6d209b23 | 1510 | #define RTHCPHYS_MAX UINT64_MAX |
056a1eb7 SF |
1511 | |
1512 | ||
1513 | /** HC pointer. */ | |
1514 | #ifndef IN_RC | |
6d209b23 | 1515 | typedef void RT_FAR *RTHCPTR; |
056a1eb7 | 1516 | #else |
6d209b23 | 1517 | typedef RTHCUINTPTR RTHCPTR; |
056a1eb7 SF |
1518 | #endif |
1519 | /** Pointer to HC pointer. */ | |
6d209b23 | 1520 | typedef RTHCPTR RT_FAR *PRTHCPTR; |
056a1eb7 | 1521 | /** Pointer to const HC pointer. */ |
6d209b23 | 1522 | typedef const RTHCPTR *PCRTHCPTR; |
056a1eb7 SF |
1523 | /** @def NIL_RTHCPTR |
1524 | * NIL HC pointer. | |
1525 | */ | |
6d209b23 | 1526 | #define NIL_RTHCPTR ((RTHCPTR)0) |
056a1eb7 | 1527 | /** Max RTHCPTR value. */ |
6d209b23 | 1528 | #define RTHCPTR_MAX ((RTHCPTR)RTHCUINTPTR_MAX) |
056a1eb7 SF |
1529 | |
1530 | ||
1531 | /** HC ring-3 pointer. */ | |
1532 | #ifdef IN_RING3 | |
6d209b23 | 1533 | typedef void RT_FAR *RTR3PTR; |
056a1eb7 | 1534 | #else |
6d209b23 | 1535 | typedef RTR3UINTPTR RTR3PTR; |
056a1eb7 SF |
1536 | #endif |
1537 | /** Pointer to HC ring-3 pointer. */ | |
6d209b23 | 1538 | typedef RTR3PTR RT_FAR *PRTR3PTR; |
056a1eb7 | 1539 | /** Pointer to const HC ring-3 pointer. */ |
6d209b23 | 1540 | typedef const RTR3PTR *PCRTR3PTR; |
056a1eb7 SF |
1541 | /** @def NIL_RTR3PTR |
1542 | * NIL HC ring-3 pointer. | |
1543 | */ | |
1544 | #ifndef IN_RING3 | |
6d209b23 | 1545 | # define NIL_RTR3PTR ((RTR3PTR)0) |
056a1eb7 | 1546 | #else |
6d209b23 | 1547 | # define NIL_RTR3PTR (NULL) |
056a1eb7 SF |
1548 | #endif |
1549 | /** Max RTR3PTR value. */ | |
6d209b23 | 1550 | #define RTR3PTR_MAX ((RTR3PTR)RTR3UINTPTR_MAX) |
056a1eb7 SF |
1551 | |
1552 | /** HC ring-0 pointer. */ | |
1553 | #ifdef IN_RING0 | |
6d209b23 | 1554 | typedef void RT_FAR *RTR0PTR; |
056a1eb7 | 1555 | #else |
6d209b23 | 1556 | typedef RTR0UINTPTR RTR0PTR; |
056a1eb7 SF |
1557 | #endif |
1558 | /** Pointer to HC ring-0 pointer. */ | |
6d209b23 | 1559 | typedef RTR0PTR RT_FAR *PRTR0PTR; |
056a1eb7 | 1560 | /** Pointer to const HC ring-0 pointer. */ |
6d209b23 | 1561 | typedef const RTR0PTR *PCRTR0PTR; |
056a1eb7 SF |
1562 | /** @def NIL_RTR0PTR |
1563 | * NIL HC ring-0 pointer. | |
1564 | */ | |
1565 | #ifndef IN_RING0 | |
6d209b23 | 1566 | # define NIL_RTR0PTR ((RTR0PTR)0) |
056a1eb7 | 1567 | #else |
6d209b23 | 1568 | # define NIL_RTR0PTR (NULL) |
056a1eb7 SF |
1569 | #endif |
1570 | /** Max RTR3PTR value. */ | |
6d209b23 | 1571 | #define RTR0PTR_MAX ((RTR0PTR)RTR0UINTPTR_MAX) |
056a1eb7 SF |
1572 | |
1573 | ||
1574 | /** Unsigned integer register in the host context. */ | |
1575 | #if HC_ARCH_BITS == 32 | |
6d209b23 | 1576 | typedef uint32_t RTHCUINTREG; |
056a1eb7 | 1577 | #elif HC_ARCH_BITS == 64 |
6d209b23 | 1578 | typedef uint64_t RTHCUINTREG; |
056a1eb7 | 1579 | #elif HC_ARCH_BITS == 16 |
6d209b23 | 1580 | typedef uint16_t RTHCUINTREG; |
056a1eb7 SF |
1581 | #else |
1582 | # error "Unsupported HC_ARCH_BITS!" | |
1583 | #endif | |
1584 | /** Pointer to an unsigned integer register in the host context. */ | |
6d209b23 | 1585 | typedef RTHCUINTREG RT_FAR *PRTHCUINTREG; |
056a1eb7 | 1586 | /** Pointer to a const unsigned integer register in the host context. */ |
6d209b23 | 1587 | typedef const RTHCUINTREG RT_FAR *PCRTHCUINTREG; |
056a1eb7 SF |
1588 | |
1589 | /** Unsigned integer register in the host ring-3 context. */ | |
1590 | #if R3_ARCH_BITS == 32 | |
6d209b23 | 1591 | typedef uint32_t RTR3UINTREG; |
056a1eb7 | 1592 | #elif R3_ARCH_BITS == 64 |
6d209b23 | 1593 | typedef uint64_t RTR3UINTREG; |
056a1eb7 | 1594 | #elif R3_ARCH_BITS == 16 |
6d209b23 | 1595 | typedef uint16_t RTR3UINTREG; |
056a1eb7 SF |
1596 | #else |
1597 | # error "Unsupported R3_ARCH_BITS!" | |
1598 | #endif | |
1599 | /** Pointer to an unsigned integer register in the host ring-3 context. */ | |
6d209b23 | 1600 | typedef RTR3UINTREG RT_FAR *PRTR3UINTREG; |
056a1eb7 | 1601 | /** Pointer to a const unsigned integer register in the host ring-3 context. */ |
6d209b23 | 1602 | typedef const RTR3UINTREG RT_FAR *PCRTR3UINTREG; |
056a1eb7 SF |
1603 | |
1604 | /** Unsigned integer register in the host ring-3 context. */ | |
1605 | #if R0_ARCH_BITS == 32 | |
6d209b23 | 1606 | typedef uint32_t RTR0UINTREG; |
056a1eb7 | 1607 | #elif R0_ARCH_BITS == 64 |
6d209b23 | 1608 | typedef uint64_t RTR0UINTREG; |
056a1eb7 | 1609 | #elif R0_ARCH_BITS == 16 |
6d209b23 | 1610 | typedef uint16_t RTR0UINTREG; |
056a1eb7 SF |
1611 | #else |
1612 | # error "Unsupported R3_ARCH_BITS!" | |
1613 | #endif | |
1614 | /** Pointer to an unsigned integer register in the host ring-3 context. */ | |
6d209b23 | 1615 | typedef RTR0UINTREG RT_FAR *PRTR0UINTREG; |
056a1eb7 | 1616 | /** Pointer to a const unsigned integer register in the host ring-3 context. */ |
6d209b23 | 1617 | typedef const RTR0UINTREG RT_FAR *PCRTR0UINTREG; |
056a1eb7 SF |
1618 | |
1619 | /** @} */ | |
1620 | ||
1621 | ||
1622 | /** @defgroup grp_rt_types_gc Guest Context Basic Types | |
1623 | * @{ | |
1624 | */ | |
1625 | ||
1626 | /** Natural signed integer in the GC. | |
1627 | * @deprecated silly type. */ | |
1628 | #if GC_ARCH_BITS == 32 | |
6d209b23 | 1629 | typedef int32_t RTGCINT; |
056a1eb7 | 1630 | #elif GC_ARCH_BITS == 64 /** @todo this isn't right, natural int is 32-bit, see RTHCINT. */ |
6d209b23 | 1631 | typedef int64_t RTGCINT; |
056a1eb7 SF |
1632 | #endif |
1633 | /** Pointer to natural signed integer in GC. | |
1634 | * @deprecated silly type. */ | |
6d209b23 | 1635 | typedef RTGCINT RT_FAR *PRTGCINT; |
056a1eb7 SF |
1636 | /** Pointer to const natural signed integer in GC. |
1637 | * @deprecated silly type. */ | |
6d209b23 | 1638 | typedef const RTGCINT RT_FAR *PCRTGCINT; |
056a1eb7 SF |
1639 | |
1640 | /** Natural unsigned integer in the GC. | |
1641 | * @deprecated silly type. */ | |
1642 | #if GC_ARCH_BITS == 32 | |
6d209b23 | 1643 | typedef uint32_t RTGCUINT; |
056a1eb7 | 1644 | #elif GC_ARCH_BITS == 64 /** @todo this isn't right, natural int is 32-bit, see RTHCUINT. */ |
6d209b23 | 1645 | typedef uint64_t RTGCUINT; |
056a1eb7 SF |
1646 | #endif |
1647 | /** Pointer to natural unsigned integer in GC. | |
1648 | * @deprecated silly type. */ | |
6d209b23 | 1649 | typedef RTGCUINT RT_FAR *PRTGCUINT; |
056a1eb7 SF |
1650 | /** Pointer to const natural unsigned integer in GC. |
1651 | * @deprecated silly type. */ | |
6d209b23 | 1652 | typedef const RTGCUINT RT_FAR *PCRTGCUINT; |
056a1eb7 SF |
1653 | |
1654 | /** Signed integer which can contain a GC pointer. */ | |
1655 | #if GC_ARCH_BITS == 32 | |
6d209b23 | 1656 | typedef int32_t RTGCINTPTR; |
056a1eb7 | 1657 | #elif GC_ARCH_BITS == 64 |
6d209b23 | 1658 | typedef int64_t RTGCINTPTR; |
056a1eb7 SF |
1659 | #endif |
1660 | /** Pointer to signed integer which can contain a GC pointer. */ | |
6d209b23 | 1661 | typedef RTGCINTPTR RT_FAR *PRTGCINTPTR; |
056a1eb7 | 1662 | /** Pointer to const signed integer which can contain a GC pointer. */ |
6d209b23 | 1663 | typedef const RTGCINTPTR RT_FAR *PCRTGCINTPTR; |
056a1eb7 SF |
1664 | |
1665 | /** Unsigned integer which can contain a GC pointer. */ | |
1666 | #if GC_ARCH_BITS == 32 | |
6d209b23 | 1667 | typedef uint32_t RTGCUINTPTR; |
056a1eb7 | 1668 | #elif GC_ARCH_BITS == 64 |
6d209b23 | 1669 | typedef uint64_t RTGCUINTPTR; |
056a1eb7 SF |
1670 | #else |
1671 | # error Unsupported GC_ARCH_BITS value. | |
1672 | #endif | |
1673 | /** Pointer to unsigned integer which can contain a GC pointer. */ | |
6d209b23 | 1674 | typedef RTGCUINTPTR RT_FAR *PRTGCUINTPTR; |
056a1eb7 | 1675 | /** Pointer to unsigned integer which can contain a GC pointer. */ |
6d209b23 | 1676 | typedef const RTGCUINTPTR RT_FAR *PCRTGCUINTPTR; |
056a1eb7 SF |
1677 | |
1678 | /** Unsigned integer which can contain a 32 bits GC pointer. */ | |
6d209b23 | 1679 | typedef uint32_t RTGCUINTPTR32; |
056a1eb7 | 1680 | /** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ |
6d209b23 | 1681 | typedef RTGCUINTPTR32 RT_FAR *PRTGCUINTPTR32; |
056a1eb7 | 1682 | /** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ |
6d209b23 | 1683 | typedef const RTGCUINTPTR32 RT_FAR *PCRTGCUINTPTR32; |
056a1eb7 SF |
1684 | |
1685 | /** Unsigned integer which can contain a 64 bits GC pointer. */ | |
6d209b23 | 1686 | typedef uint64_t RTGCUINTPTR64; |
056a1eb7 | 1687 | /** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ |
6d209b23 | 1688 | typedef RTGCUINTPTR64 RT_FAR *PRTGCUINTPTR64; |
056a1eb7 | 1689 | /** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ |
6d209b23 | 1690 | typedef const RTGCUINTPTR64 RT_FAR *PCRTGCUINTPTR64; |
056a1eb7 SF |
1691 | |
1692 | /** Guest Physical Memory Address.*/ | |
6d209b23 | 1693 | typedef uint64_t RTGCPHYS; |
056a1eb7 | 1694 | /** Pointer to Guest Physical Memory Address. */ |
6d209b23 | 1695 | typedef RTGCPHYS RT_FAR *PRTGCPHYS; |
056a1eb7 | 1696 | /** Pointer to const Guest Physical Memory Address. */ |
6d209b23 | 1697 | typedef const RTGCPHYS RT_FAR *PCRTGCPHYS; |
056a1eb7 SF |
1698 | /** @def NIL_RTGCPHYS |
1699 | * NIL GC Physical Address. | |
1700 | * NIL_RTGCPHYS is used to signal an invalid physical address, similar | |
1701 | * to the NULL pointer. Note that this value may actually be valid in | |
1702 | * some contexts. | |
1703 | */ | |
6d209b23 | 1704 | #define NIL_RTGCPHYS (~(RTGCPHYS)0U) |
056a1eb7 | 1705 | /** Max guest physical memory address value. */ |
6d209b23 | 1706 | #define RTGCPHYS_MAX UINT64_MAX |
056a1eb7 SF |
1707 | |
1708 | ||
1709 | /** Guest Physical Memory Address; limited to 32 bits.*/ | |
6d209b23 | 1710 | typedef uint32_t RTGCPHYS32; |
056a1eb7 | 1711 | /** Pointer to Guest Physical Memory Address. */ |
6d209b23 | 1712 | typedef RTGCPHYS32 RT_FAR *PRTGCPHYS32; |
056a1eb7 | 1713 | /** Pointer to const Guest Physical Memory Address. */ |
6d209b23 | 1714 | typedef const RTGCPHYS32 RT_FAR *PCRTGCPHYS32; |
056a1eb7 SF |
1715 | /** @def NIL_RTGCPHYS32 |
1716 | * NIL GC Physical Address. | |
1717 | * NIL_RTGCPHYS32 is used to signal an invalid physical address, similar | |
1718 | * to the NULL pointer. Note that this value may actually be valid in | |
1719 | * some contexts. | |
1720 | */ | |
6d209b23 | 1721 | #define NIL_RTGCPHYS32 (~(RTGCPHYS32)0) |
056a1eb7 SF |
1722 | |
1723 | ||
1724 | /** Guest Physical Memory Address; limited to 64 bits.*/ | |
6d209b23 | 1725 | typedef uint64_t RTGCPHYS64; |
056a1eb7 | 1726 | /** Pointer to Guest Physical Memory Address. */ |
6d209b23 | 1727 | typedef RTGCPHYS64 RT_FAR *PRTGCPHYS64; |
056a1eb7 | 1728 | /** Pointer to const Guest Physical Memory Address. */ |
6d209b23 | 1729 | typedef const RTGCPHYS64 RT_FAR *PCRTGCPHYS64; |
056a1eb7 SF |
1730 | /** @def NIL_RTGCPHYS64 |
1731 | * NIL GC Physical Address. | |
1732 | * NIL_RTGCPHYS64 is used to signal an invalid physical address, similar | |
1733 | * to the NULL pointer. Note that this value may actually be valid in | |
1734 | * some contexts. | |
1735 | */ | |
6d209b23 | 1736 | #define NIL_RTGCPHYS64 (~(RTGCPHYS64)0) |
056a1eb7 SF |
1737 | |
1738 | /** Guest context pointer, 32 bits. | |
1739 | * Keep in mind that this type is an unsigned integer in | |
1740 | * HC and void pointer in GC. | |
1741 | */ | |
6d209b23 | 1742 | typedef RTGCUINTPTR32 RTGCPTR32; |
056a1eb7 | 1743 | /** Pointer to a guest context pointer. */ |
6d209b23 | 1744 | typedef RTGCPTR32 RT_FAR *PRTGCPTR32; |
056a1eb7 | 1745 | /** Pointer to a const guest context pointer. */ |
6d209b23 | 1746 | typedef const RTGCPTR32 RT_FAR *PCRTGCPTR32; |
056a1eb7 SF |
1747 | /** @def NIL_RTGCPTR32 |
1748 | * NIL GC pointer. | |
1749 | */ | |
6d209b23 | 1750 | #define NIL_RTGCPTR32 ((RTGCPTR32)0) |
056a1eb7 SF |
1751 | |
1752 | /** Guest context pointer, 64 bits. | |
1753 | */ | |
6d209b23 | 1754 | typedef RTGCUINTPTR64 RTGCPTR64; |
056a1eb7 | 1755 | /** Pointer to a guest context pointer. */ |
6d209b23 | 1756 | typedef RTGCPTR64 RT_FAR *PRTGCPTR64; |
056a1eb7 | 1757 | /** Pointer to a const guest context pointer. */ |
6d209b23 | 1758 | typedef const RTGCPTR64 RT_FAR *PCRTGCPTR64; |
056a1eb7 SF |
1759 | /** @def NIL_RTGCPTR64 |
1760 | * NIL GC pointer. | |
1761 | */ | |
6d209b23 | 1762 | #define NIL_RTGCPTR64 ((RTGCPTR64)0) |
056a1eb7 SF |
1763 | |
1764 | /** Guest context pointer. | |
1765 | * Keep in mind that this type is an unsigned integer in | |
1766 | * HC and void pointer in GC. | |
1767 | */ | |
1768 | #if GC_ARCH_BITS == 64 | |
6d209b23 | 1769 | typedef RTGCPTR64 RTGCPTR; |
056a1eb7 | 1770 | /** Pointer to a guest context pointer. */ |
6d209b23 | 1771 | typedef PRTGCPTR64 PRTGCPTR; |
056a1eb7 | 1772 | /** Pointer to a const guest context pointer. */ |
6d209b23 | 1773 | typedef PCRTGCPTR64 PCRTGCPTR; |
056a1eb7 SF |
1774 | /** @def NIL_RTGCPTR |
1775 | * NIL GC pointer. | |
1776 | */ | |
1777 | # define NIL_RTGCPTR NIL_RTGCPTR64 | |
1778 | /** Max RTGCPTR value. */ | |
6d209b23 | 1779 | # define RTGCPTR_MAX UINT64_MAX |
056a1eb7 | 1780 | #elif GC_ARCH_BITS == 32 |
6d209b23 | 1781 | typedef RTGCPTR32 RTGCPTR; |
056a1eb7 | 1782 | /** Pointer to a guest context pointer. */ |
6d209b23 | 1783 | typedef PRTGCPTR32 PRTGCPTR; |
056a1eb7 | 1784 | /** Pointer to a const guest context pointer. */ |
6d209b23 | 1785 | typedef PCRTGCPTR32 PCRTGCPTR; |
056a1eb7 SF |
1786 | /** @def NIL_RTGCPTR |
1787 | * NIL GC pointer. | |
1788 | */ | |
6d209b23 | 1789 | # define NIL_RTGCPTR NIL_RTGCPTR32 |
056a1eb7 | 1790 | /** Max RTGCPTR value. */ |
6d209b23 | 1791 | # define RTGCPTR_MAX UINT32_MAX |
056a1eb7 SF |
1792 | #else |
1793 | # error "Unsupported GC_ARCH_BITS!" | |
1794 | #endif | |
1795 | ||
1796 | /** Unsigned integer register in the guest context. */ | |
6d209b23 | 1797 | typedef uint32_t RTGCUINTREG32; |
056a1eb7 | 1798 | /** Pointer to an unsigned integer register in the guest context. */ |
6d209b23 | 1799 | typedef RTGCUINTREG32 RT_FAR *PRTGCUINTREG32; |
056a1eb7 | 1800 | /** Pointer to a const unsigned integer register in the guest context. */ |
6d209b23 | 1801 | typedef const RTGCUINTREG32 RT_FAR *PCRTGCUINTREG32; |
056a1eb7 | 1802 | |
6d209b23 | 1803 | typedef uint64_t RTGCUINTREG64; |
056a1eb7 | 1804 | /** Pointer to an unsigned integer register in the guest context. */ |
6d209b23 | 1805 | typedef RTGCUINTREG64 RT_FAR *PRTGCUINTREG64; |
056a1eb7 | 1806 | /** Pointer to a const unsigned integer register in the guest context. */ |
6d209b23 | 1807 | typedef const RTGCUINTREG64 RT_FAR *PCRTGCUINTREG64; |
056a1eb7 SF |
1808 | |
1809 | #if GC_ARCH_BITS == 64 | |
1810 | typedef RTGCUINTREG64 RTGCUINTREG; | |
1811 | #elif GC_ARCH_BITS == 32 | |
1812 | typedef RTGCUINTREG32 RTGCUINTREG; | |
1813 | #else | |
1814 | # error "Unsupported GC_ARCH_BITS!" | |
1815 | #endif | |
1816 | /** Pointer to an unsigned integer register in the guest context. */ | |
6d209b23 | 1817 | typedef RTGCUINTREG RT_FAR *PRTGCUINTREG; |
056a1eb7 | 1818 | /** Pointer to a const unsigned integer register in the guest context. */ |
6d209b23 | 1819 | typedef const RTGCUINTREG RT_FAR *PCRTGCUINTREG; |
056a1eb7 SF |
1820 | |
1821 | /** @} */ | |
1822 | ||
1823 | /** @defgroup grp_rt_types_rc Raw mode Context Basic Types | |
1824 | * @{ | |
1825 | */ | |
1826 | ||
1827 | /** Raw mode context pointer; a 32 bits guest context pointer. | |
1828 | * Keep in mind that this type is an unsigned integer in | |
1829 | * HC and void pointer in RC. | |
1830 | */ | |
1831 | #ifdef IN_RC | |
6d209b23 | 1832 | typedef void RT_FAR *RTRCPTR; |
056a1eb7 | 1833 | #else |
6d209b23 | 1834 | typedef uint32_t RTRCPTR; |
056a1eb7 SF |
1835 | #endif |
1836 | /** Pointer to a raw mode context pointer. */ | |
6d209b23 | 1837 | typedef RTRCPTR RT_FAR *PRTRCPTR; |
056a1eb7 | 1838 | /** Pointer to a const raw mode context pointer. */ |
6d209b23 | 1839 | typedef const RTRCPTR RT_FAR *PCRTRCPTR; |
056a1eb7 SF |
1840 | /** @def NIL_RTGCPTR |
1841 | * NIL RC pointer. | |
1842 | */ | |
1843 | #ifndef IN_RC | |
6d209b23 | 1844 | # define NIL_RTRCPTR ((RTRCPTR)0) |
056a1eb7 | 1845 | #else |
6d209b23 | 1846 | # define NIL_RTRCPTR (NULL) |
056a1eb7 SF |
1847 | #endif |
1848 | /** @def RTRCPTR_MAX | |
1849 | * The maximum value a RTRCPTR can have. Mostly used as INVALID value. | |
1850 | */ | |
6d209b23 | 1851 | #define RTRCPTR_MAX ((RTRCPTR)UINT32_MAX) |
056a1eb7 SF |
1852 | |
1853 | /** Raw mode context pointer, unsigned integer variant. */ | |
6d209b23 | 1854 | typedef int32_t RTRCINTPTR; |
056a1eb7 SF |
1855 | /** @def RTRCUINTPTR_MAX |
1856 | * The maximum value a RTRCUINPTR can have. | |
1857 | */ | |
6d209b23 | 1858 | #define RTRCUINTPTR_MAX ((RTRCUINTPTR)UINT32_MAX) |
056a1eb7 SF |
1859 | |
1860 | /** Raw mode context pointer, signed integer variant. */ | |
6d209b23 | 1861 | typedef uint32_t RTRCUINTPTR; |
056a1eb7 SF |
1862 | /** @def RTRCINTPTR_MIN |
1863 | * The minimum value a RTRCINPTR can have. | |
1864 | */ | |
6d209b23 | 1865 | #define RTRCINTPTR_MIN ((RTRCINTPTR)INT32_MIN) |
056a1eb7 SF |
1866 | /** @def RTRCINTPTR_MAX |
1867 | * The maximum value a RTRCINPTR can have. | |
1868 | */ | |
6d209b23 | 1869 | #define RTRCINTPTR_MAX ((RTRCINTPTR)INT32_MAX) |
056a1eb7 SF |
1870 | |
1871 | /** @} */ | |
1872 | ||
1873 | ||
1874 | /** @defgroup grp_rt_types_cc Current Context Basic Types | |
1875 | * @{ | |
1876 | */ | |
1877 | ||
1878 | /** Current Context Physical Memory Address.*/ | |
1879 | #ifdef IN_RC | |
1880 | typedef RTGCPHYS RTCCPHYS; | |
1881 | #else | |
1882 | typedef RTHCPHYS RTCCPHYS; | |
1883 | #endif | |
1884 | /** Pointer to Current Context Physical Memory Address. */ | |
6d209b23 | 1885 | typedef RTCCPHYS RT_FAR *PRTCCPHYS; |
056a1eb7 | 1886 | /** Pointer to const Current Context Physical Memory Address. */ |
6d209b23 | 1887 | typedef const RTCCPHYS RT_FAR *PCRTCCPHYS; |
056a1eb7 SF |
1888 | /** @def NIL_RTCCPHYS |
1889 | * NIL CC Physical Address. | |
1890 | * NIL_RTCCPHYS is used to signal an invalid physical address, similar | |
1891 | * to the NULL pointer. | |
1892 | */ | |
1893 | #ifdef IN_RC | |
6d209b23 | 1894 | # define NIL_RTCCPHYS NIL_RTGCPHYS |
056a1eb7 | 1895 | #else |
6d209b23 | 1896 | # define NIL_RTCCPHYS NIL_RTHCPHYS |
056a1eb7 SF |
1897 | #endif |
1898 | ||
1899 | /** Unsigned integer register in the current context. */ | |
1900 | #if ARCH_BITS == 32 | |
1901 | typedef uint32_t RTCCUINTREG; | |
1902 | #elif ARCH_BITS == 64 | |
1903 | typedef uint64_t RTCCUINTREG; | |
1904 | #elif ARCH_BITS == 16 | |
1905 | typedef uint16_t RTCCUINTREG; | |
1906 | #else | |
1907 | # error "Unsupported ARCH_BITS!" | |
1908 | #endif | |
1909 | /** Pointer to an unsigned integer register in the current context. */ | |
6d209b23 | 1910 | typedef RTCCUINTREG RT_FAR *PRTCCUINTREG; |
056a1eb7 | 1911 | /** Pointer to a const unsigned integer register in the current context. */ |
6d209b23 | 1912 | typedef RTCCUINTREG const RT_FAR *PCRTCCUINTREG; |
056a1eb7 SF |
1913 | |
1914 | /** Signed integer register in the current context. */ | |
1915 | #if ARCH_BITS == 32 | |
1916 | typedef int32_t RTCCINTREG; | |
1917 | #elif ARCH_BITS == 64 | |
1918 | typedef int64_t RTCCINTREG; | |
1919 | #elif ARCH_BITS == 16 | |
1920 | typedef int16_t RTCCINTREG; | |
1921 | #endif | |
1922 | /** Pointer to a signed integer register in the current context. */ | |
6d209b23 | 1923 | typedef RTCCINTREG RT_FAR *PRTCCINTREG; |
056a1eb7 | 1924 | /** Pointer to a const signed integer register in the current context. */ |
6d209b23 | 1925 | typedef RTCCINTREG const RT_FAR *PCRTCCINTREG; |
056a1eb7 SF |
1926 | |
1927 | /** Unsigned integer register in the current context. | |
1928 | * @remarks This is for dealing with EAX in 16-bit mode. */ | |
1929 | #if ARCH_BITS == 16 && defined(RT_ARCH_X86) | |
1930 | typedef uint32_t RTCCUINTXREG; | |
1931 | #else | |
1932 | typedef RTCCUINTREG RTCCUINTXREG; | |
1933 | #endif | |
1934 | /** Pointer to an unsigned integer register in the current context. */ | |
6d209b23 | 1935 | typedef RTCCUINTREG RT_FAR *PRTCCUINTXREG; |
056a1eb7 | 1936 | /** Pointer to a const unsigned integer register in the current context. */ |
6d209b23 | 1937 | typedef RTCCUINTREG const RT_FAR *PCRTCCUINTXREG; |
056a1eb7 SF |
1938 | |
1939 | /** Signed integer extended register in the current context. | |
1940 | * @remarks This is for dealing with EAX in 16-bit mode. */ | |
1941 | #if ARCH_BITS == 16 && defined(RT_ARCH_X86) | |
1942 | typedef int32_t RTCCINTXREG; | |
1943 | #else | |
1944 | typedef RTCCINTREG RTCCINTXREG; | |
1945 | #endif | |
1946 | /** Pointer to a signed integer extended register in the current context. */ | |
6d209b23 | 1947 | typedef RTCCINTXREG RT_FAR *PRTCCINTXREG; |
056a1eb7 SF |
1948 | /** Pointer to a const signed integer extended register in the current |
1949 | * context. */ | |
6d209b23 | 1950 | typedef RTCCINTXREG const RT_FAR *PCRTCCINTXREG; |
056a1eb7 SF |
1951 | |
1952 | /** @def RTCCUINTREG_C | |
1953 | * Defines a constant of RTCCUINTREG type. | |
1954 | * @param a_Value Constant value */ | |
1955 | /** @def RTCCUINTREG_MAX | |
1956 | * Max value that RTCCUINTREG can hold. */ | |
1957 | /** @def RTCCUINTREG_FMT | |
1958 | * Generic IPRT format specifier for RTCCUINTREG. */ | |
1959 | /** @def RTCCUINTREG_XFMT | |
1960 | * Generic IPRT format specifier for RTCCUINTREG, hexadecimal. */ | |
1961 | /** @def RTCCINTREG_C | |
1962 | * Defines a constant of RTCCINTREG type. | |
1963 | * @param a_Value Constant value */ | |
1964 | /** @def RTCCINTREG_MAX | |
1965 | * Max value that RTCCINTREG can hold. */ | |
1966 | /** @def RTCCINTREG_MIN | |
1967 | * Min value that RTCCINTREG can hold. */ | |
1968 | /** @def RTCCINTREG_XFMT | |
1969 | * Generic IPRT format specifier for RTCCINTREG, hexadecimal. */ | |
1970 | #if ARCH_BITS == 32 | |
1971 | # define RTCCUINTREG_C(a_Value) UINT32_C(a_Value) | |
1972 | # define RTCCUINTREG_MAX UINT32_MAX | |
1973 | # define RTCCUINTREG_FMT "RU32" | |
1974 | # define RTCCUINTREG_XFMT "RX32" | |
1975 | # define RTCCINTREG_C(a_Value) INT32_C(a_Value) | |
1976 | # define RTCCINTREG_MAX INT32_MAX | |
1977 | # define RTCCINTREG_MIN INT32_MIN | |
1978 | # define RTCCINTREG_FMT "RI32" | |
1979 | # define RTCCINTREG_XFMT "RX32" | |
1980 | #elif ARCH_BITS == 64 | |
1981 | # define RTCCUINTREG_C(a_Value) UINT64_C(a_Value) | |
1982 | # define RTCCUINTREG_MAX UINT64_MAX | |
1983 | # define RTCCUINTREG_FMT "RU64" | |
1984 | # define RTCCUINTREG_XFMT "RX64" | |
1985 | # define RTCCINTREG_C(a_Value) INT64_C(a_Value) | |
1986 | # define RTCCINTREG_MAX INT64_MAX | |
1987 | # define RTCCINTREG_MIN INT64_MIN | |
1988 | # define RTCCINTREG_FMT "RI64" | |
1989 | # define RTCCINTREG_XFMT "RX64" | |
1990 | #elif ARCH_BITS == 16 | |
1991 | # define RTCCUINTREG_C(a_Value) UINT16_C(a_Value) | |
1992 | # define RTCCUINTREG_MAX UINT16_MAX | |
1993 | # define RTCCUINTREG_FMT "RU16" | |
1994 | # define RTCCUINTREG_XFMT "RX16" | |
1995 | # define RTCCINTREG_C(a_Value) INT16_C(a_Value) | |
1996 | # define RTCCINTREG_MAX INT16_MAX | |
1997 | # define RTCCINTREG_MIN INT16_MIN | |
1998 | # define RTCCINTREG_FMT "RI16" | |
1999 | # define RTCCINTREG_XFMT "RX16" | |
2000 | #else | |
2001 | # error "Unsupported ARCH_BITS!" | |
2002 | #endif | |
2003 | /** @def RTCCUINTXREG_C | |
2004 | * Defines a constant of RTCCUINTXREG type. | |
2005 | * @param a_Value Constant value */ | |
2006 | /** @def RTCCUINTXREG_MAX | |
2007 | * Max value that RTCCUINTXREG can hold. */ | |
2008 | /** @def RTCCUINTXREG_FMT | |
2009 | * Generic IPRT format specifier for RTCCUINTXREG. */ | |
2010 | /** @def RTCCUINTXREG_XFMT | |
2011 | * Generic IPRT format specifier for RTCCUINTXREG, hexadecimal. */ | |
2012 | /** @def RTCCINTXREG_C | |
2013 | * Defines a constant of RTCCINTXREG type. | |
2014 | * @param a_Value Constant value */ | |
2015 | /** @def RTCCINTXREG_MAX | |
2016 | * Max value that RTCCINTXREG can hold. */ | |
2017 | /** @def RTCCINTXREG_MIN | |
2018 | * Min value that RTCCINTXREG can hold. */ | |
2019 | /** @def RTCCINTXREG_FMT | |
2020 | * Generic IPRT format specifier for RTCCINTXREG. */ | |
2021 | /** @def RTCCINTXREG_XFMT | |
2022 | * Generic IPRT format specifier for RTCCINTXREG, hexadecimal. */ | |
2023 | #if ARCH_BITS == 16 && defined(RT_ARCH_X86) | |
2024 | # define RTCCUINTXREG_C(a_Value) UINT32_C(a_Value) | |
2025 | # define RTCCUINTXREG_MAX UINT32_MAX | |
2026 | # define RTCCUINTXREG_FMT "RU32" | |
2027 | # define RTCCUINTXREG_XFMT "RX32" | |
2028 | # define RTCCINTXREG_C(a_Value) INT32_C(a_Value) | |
2029 | # define RTCCINTXREG_MAX INT32_MAX | |
2030 | # define RTCCINTXREG_MIN INT32_MIN | |
2031 | # define RTCCINTXREG_FMT "RI32" | |
2032 | # define RTCCINTXREG_XFMT "RX32" | |
2033 | #else | |
2034 | # define RTCCUINTXREG_C(a_Value) RTCCUINTREG_C(a_Value) | |
2035 | # define RTCCUINTXREG_MAX RTCCUINTREG_MAX | |
2036 | # define RTCCUINTXREG_FMT RTCCUINTREG_FMT | |
2037 | # define RTCCUINTXREG_XFMT RTCCUINTREG_XFMT | |
2038 | # define RTCCINTXREG_C(a_Value) RTCCINTREG_C(a_Value) | |
2039 | # define RTCCINTXREG_MAX RTCCINTREG_MAX | |
2040 | # define RTCCINTXREG_MIN RTCCINTREG_MIN | |
2041 | # define RTCCINTXREG_FMT RTCCINTREG_FMT | |
2042 | # define RTCCINTXREG_XFMT RTCCINTREG_XFMT | |
2043 | #endif | |
2044 | /** @} */ | |
2045 | ||
2046 | ||
2047 | ||
2048 | /** Pointer to a big integer number. */ | |
6d209b23 | 2049 | typedef struct RTBIGNUM RT_FAR *PRTBIGNUM; |
056a1eb7 | 2050 | /** Pointer to a const big integer number. */ |
6d209b23 | 2051 | typedef struct RTBIGNUM const RT_FAR *PCRTBIGNUM; |
056a1eb7 SF |
2052 | |
2053 | ||
2054 | /** Pointer to a critical section. */ | |
6d209b23 | 2055 | typedef struct RTCRITSECT RT_FAR *PRTCRITSECT; |
056a1eb7 | 2056 | /** Pointer to a const critical section. */ |
6d209b23 | 2057 | typedef const struct RTCRITSECT RT_FAR *PCRTCRITSECT; |
056a1eb7 SF |
2058 | |
2059 | /** Pointer to a read/write critical section. */ | |
6d209b23 | 2060 | typedef struct RTCRITSECTRW RT_FAR *PRTCRITSECTRW; |
056a1eb7 | 2061 | /** Pointer to a const read/write critical section. */ |
6d209b23 | 2062 | typedef const struct RTCRITSECTRW RT_FAR *PCRTCRITSECTRW; |
056a1eb7 SF |
2063 | |
2064 | ||
2065 | /** Condition variable handle. */ | |
6d209b23 | 2066 | typedef R3PTRTYPE(struct RTCONDVARINTERNAL RT_FAR *) RTCONDVAR; |
056a1eb7 | 2067 | /** Pointer to a condition variable handle. */ |
6d209b23 | 2068 | typedef RTCONDVAR RT_FAR *PRTCONDVAR; |
056a1eb7 SF |
2069 | /** Nil condition variable handle. */ |
2070 | #define NIL_RTCONDVAR 0 | |
2071 | ||
2072 | /** Cryptographic (certificate) store handle. */ | |
6d209b23 | 2073 | typedef R3R0PTRTYPE(struct RTCRSTOREINT RT_FAR *) RTCRSTORE; |
056a1eb7 | 2074 | /** Pointer to a Cryptographic (certificate) store handle. */ |
6d209b23 | 2075 | typedef RTCRSTORE RT_FAR *PRTCRSTORE; |
056a1eb7 SF |
2076 | /** Nil Cryptographic (certificate) store handle. */ |
2077 | #define NIL_RTCRSTORE 0 | |
2078 | ||
2079 | /** Pointer to a const (store) certificate context. */ | |
6d209b23 | 2080 | typedef struct RTCRCERTCTX const RT_FAR *PCRTCRCERTCTX; |
056a1eb7 SF |
2081 | |
2082 | /** Cryptographic message digest handle. */ | |
6d209b23 | 2083 | typedef R3R0PTRTYPE(struct RTCRDIGESTINT RT_FAR *) RTCRDIGEST; |
056a1eb7 | 2084 | /** Pointer to a cryptographic message digest handle. */ |
6d209b23 | 2085 | typedef RTCRDIGEST RT_FAR *PRTCRDIGEST; |
056a1eb7 SF |
2086 | /** NIL cryptographic message digest handle. */ |
2087 | #define NIL_RTCRDIGEST (0) | |
2088 | ||
2089 | /** Public key encryption schema handle. */ | |
6d209b23 | 2090 | typedef R3R0PTRTYPE(struct RTCRPKIXENCRYPTIONINT RT_FAR *) RTCRPKIXENCRYPTION; |
056a1eb7 | 2091 | /** Pointer to a public key encryption schema handle. */ |
6d209b23 | 2092 | typedef RTCRPKIXENCRYPTION RT_FAR *PRTCRPKIXENCRYPTION; |
056a1eb7 SF |
2093 | /** NIL public key encryption schema handle */ |
2094 | #define NIL_RTCRPKIXENCRYPTION (0) | |
2095 | ||
2096 | /** Public key signature schema handle. */ | |
6d209b23 | 2097 | typedef R3R0PTRTYPE(struct RTCRPKIXSIGNATUREINT RT_FAR *) RTCRPKIXSIGNATURE; |
056a1eb7 | 2098 | /** Pointer to a public key signature schema handle. */ |
6d209b23 | 2099 | typedef RTCRPKIXSIGNATURE RT_FAR *PRTCRPKIXSIGNATURE; |
056a1eb7 SF |
2100 | /** NIL public key signature schema handle */ |
2101 | #define NIL_RTCRPKIXSIGNATURE (0) | |
2102 | ||
2103 | /** X.509 certificate paths builder & validator handle. */ | |
6d209b23 | 2104 | typedef R3R0PTRTYPE(struct RTCRX509CERTPATHSINT RT_FAR *) RTCRX509CERTPATHS; |
056a1eb7 | 2105 | /** Pointer to a certificate paths builder & validator handle. */ |
6d209b23 | 2106 | typedef RTCRX509CERTPATHS RT_FAR *PRTCRX509CERTPATHS; |
056a1eb7 SF |
2107 | /** Nil certificate paths builder & validator handle. */ |
2108 | #define NIL_RTCRX509CERTPATHS 0 | |
2109 | ||
26894aac SF |
2110 | /** Directory handle. */ |
2111 | typedef struct RTDIRINTERNAL *RTDIR; | |
2112 | /** Pointer to directory handle. */ | |
2113 | typedef RTDIR *PRTDIR; | |
2114 | /** NIL directory handle. */ | |
2115 | #define NIL_RTDIR ((RTDIR)0) | |
2116 | ||
056a1eb7 | 2117 | /** File handle. */ |
6d209b23 | 2118 | typedef R3R0PTRTYPE(struct RTFILEINT RT_FAR *) RTFILE; |
056a1eb7 | 2119 | /** Pointer to file handle. */ |
6d209b23 | 2120 | typedef RTFILE RT_FAR *PRTFILE; |
056a1eb7 SF |
2121 | /** Nil file handle. */ |
2122 | #define NIL_RTFILE ((RTFILE)~(RTHCINTPTR)0) | |
2123 | ||
2124 | /** Async I/O request handle. */ | |
6d209b23 | 2125 | typedef R3PTRTYPE(struct RTFILEAIOREQINTERNAL RT_FAR *) RTFILEAIOREQ; |
056a1eb7 | 2126 | /** Pointer to an async I/O request handle. */ |
6d209b23 | 2127 | typedef RTFILEAIOREQ RT_FAR *PRTFILEAIOREQ; |
056a1eb7 SF |
2128 | /** Nil request handle. */ |
2129 | #define NIL_RTFILEAIOREQ 0 | |
2130 | ||
2131 | /** Async I/O completion context handle. */ | |
6d209b23 | 2132 | typedef R3PTRTYPE(struct RTFILEAIOCTXINTERNAL RT_FAR *) RTFILEAIOCTX; |
056a1eb7 | 2133 | /** Pointer to an async I/O completion context handle. */ |
6d209b23 | 2134 | typedef RTFILEAIOCTX RT_FAR *PRTFILEAIOCTX; |
056a1eb7 SF |
2135 | /** Nil context handle. */ |
2136 | #define NIL_RTFILEAIOCTX 0 | |
2137 | ||
6d209b23 SF |
2138 | /** ISO image maker handle. */ |
2139 | typedef struct RTFSISOMAKERINT RT_FAR *RTFSISOMAKER; | |
2140 | /** Pointer to an ISO image maker handle. */ | |
2141 | typedef RTFSISOMAKER RT_FAR *PRTFSISOMAKER; | |
2142 | /** NIL ISO maker handle. */ | |
2143 | #define NIL_RTFSISOMAKER ((RTFSISOMAKER)0) | |
2144 | ||
2145 | /** INI-file handle. */ | |
2146 | typedef struct RTINIFILEINT RT_FAR *RTINIFILE; | |
2147 | /** Pointer to an INI-file handle. */ | |
2148 | typedef RTINIFILE RT_FAR *PRTINIFILE; | |
2149 | /** NIL INI-file handle. */ | |
2150 | #define NIL_RTINIFILE ((RTINIFILE)0) | |
2151 | ||
056a1eb7 | 2152 | /** Loader module handle. */ |
6d209b23 | 2153 | typedef R3R0PTRTYPE(struct RTLDRMODINTERNAL RT_FAR *) RTLDRMOD; |
056a1eb7 | 2154 | /** Pointer to a loader module handle. */ |
6d209b23 | 2155 | typedef RTLDRMOD RT_FAR *PRTLDRMOD; |
056a1eb7 SF |
2156 | /** Nil loader module handle. */ |
2157 | #define NIL_RTLDRMOD 0 | |
2158 | ||
2159 | /** Lock validator class handle. */ | |
6d209b23 | 2160 | typedef R3R0PTRTYPE(struct RTLOCKVALCLASSINT RT_FAR *) RTLOCKVALCLASS; |
056a1eb7 | 2161 | /** Pointer to a lock validator class handle. */ |
6d209b23 | 2162 | typedef RTLOCKVALCLASS RT_FAR *PRTLOCKVALCLASS; |
056a1eb7 SF |
2163 | /** Nil lock validator class handle. */ |
2164 | #define NIL_RTLOCKVALCLASS ((RTLOCKVALCLASS)0) | |
2165 | ||
2166 | /** Ring-0 memory object handle. */ | |
6d209b23 | 2167 | typedef R0PTRTYPE(struct RTR0MEMOBJINTERNAL RT_FAR *) RTR0MEMOBJ; |
056a1eb7 | 2168 | /** Pointer to a Ring-0 memory object handle. */ |
6d209b23 | 2169 | typedef RTR0MEMOBJ RT_FAR *PRTR0MEMOBJ; |
056a1eb7 SF |
2170 | /** Nil ring-0 memory object handle. */ |
2171 | #define NIL_RTR0MEMOBJ 0 | |
2172 | ||
2173 | /** Native thread handle. */ | |
2174 | typedef RTHCUINTPTR RTNATIVETHREAD; | |
2175 | /** Pointer to an native thread handle. */ | |
6d209b23 | 2176 | typedef RTNATIVETHREAD RT_FAR *PRTNATIVETHREAD; |
056a1eb7 SF |
2177 | /** Nil native thread handle. */ |
2178 | #define NIL_RTNATIVETHREAD (~(RTNATIVETHREAD)0) | |
2179 | ||
2180 | /** Pipe handle. */ | |
6d209b23 | 2181 | typedef R3R0PTRTYPE(struct RTPIPEINTERNAL RT_FAR *) RTPIPE; |
056a1eb7 | 2182 | /** Pointer to a pipe handle. */ |
6d209b23 | 2183 | typedef RTPIPE RT_FAR *PRTPIPE; |
056a1eb7 SF |
2184 | /** Nil pipe handle. |
2185 | * @remarks This is not 0 because of UNIX and OS/2 handle values. Take care! */ | |
2186 | #define NIL_RTPIPE ((RTPIPE)RTHCUINTPTR_MAX) | |
2187 | ||
2188 | /** @typedef RTPOLLSET | |
2189 | * Poll set handle. */ | |
6d209b23 | 2190 | typedef R3R0PTRTYPE(struct RTPOLLSETINTERNAL RT_FAR *) RTPOLLSET; |
056a1eb7 | 2191 | /** Pointer to a poll set handle. */ |
6d209b23 | 2192 | typedef RTPOLLSET RT_FAR *PRTPOLLSET; |
056a1eb7 SF |
2193 | /** Nil poll set handle handle. */ |
2194 | #define NIL_RTPOLLSET ((RTPOLLSET)0) | |
2195 | ||
2196 | /** Process identifier. */ | |
2197 | typedef uint32_t RTPROCESS; | |
2198 | /** Pointer to a process identifier. */ | |
6d209b23 | 2199 | typedef RTPROCESS RT_FAR *PRTPROCESS; |
056a1eb7 SF |
2200 | /** Nil process identifier. */ |
2201 | #define NIL_RTPROCESS (~(RTPROCESS)0) | |
2202 | ||
2203 | /** Process ring-0 handle. */ | |
2204 | typedef RTR0UINTPTR RTR0PROCESS; | |
2205 | /** Pointer to a ring-0 process handle. */ | |
6d209b23 | 2206 | typedef RTR0PROCESS RT_FAR *PRTR0PROCESS; |
056a1eb7 SF |
2207 | /** Nil ring-0 process handle. */ |
2208 | #define NIL_RTR0PROCESS (~(RTR0PROCESS)0) | |
2209 | ||
2210 | /** @typedef RTSEMEVENT | |
2211 | * Event Semaphore handle. */ | |
6d209b23 | 2212 | typedef R3R0PTRTYPE(struct RTSEMEVENTINTERNAL RT_FAR *) RTSEMEVENT; |
056a1eb7 | 2213 | /** Pointer to an event semaphore handle. */ |
6d209b23 | 2214 | typedef RTSEMEVENT RT_FAR *PRTSEMEVENT; |
056a1eb7 SF |
2215 | /** Nil event semaphore handle. */ |
2216 | #define NIL_RTSEMEVENT 0 | |
2217 | ||
2218 | /** @typedef RTSEMEVENTMULTI | |
2219 | * Event Multiple Release Semaphore handle. */ | |
6d209b23 | 2220 | typedef R3R0PTRTYPE(struct RTSEMEVENTMULTIINTERNAL RT_FAR *) RTSEMEVENTMULTI; |
056a1eb7 | 2221 | /** Pointer to an event multiple release semaphore handle. */ |
6d209b23 | 2222 | typedef RTSEMEVENTMULTI RT_FAR *PRTSEMEVENTMULTI; |
056a1eb7 SF |
2223 | /** Nil multiple release event semaphore handle. */ |
2224 | #define NIL_RTSEMEVENTMULTI 0 | |
2225 | ||
2226 | /** @typedef RTSEMFASTMUTEX | |
2227 | * Fast mutex Semaphore handle. */ | |
6d209b23 | 2228 | typedef R3R0PTRTYPE(struct RTSEMFASTMUTEXINTERNAL RT_FAR *) RTSEMFASTMUTEX; |
056a1eb7 | 2229 | /** Pointer to a fast mutex semaphore handle. */ |
6d209b23 | 2230 | typedef RTSEMFASTMUTEX RT_FAR *PRTSEMFASTMUTEX; |
056a1eb7 SF |
2231 | /** Nil fast mutex semaphore handle. */ |
2232 | #define NIL_RTSEMFASTMUTEX 0 | |
2233 | ||
2234 | /** @typedef RTSEMMUTEX | |
2235 | * Mutex Semaphore handle. */ | |
6d209b23 | 2236 | typedef R3R0PTRTYPE(struct RTSEMMUTEXINTERNAL RT_FAR *) RTSEMMUTEX; |
056a1eb7 | 2237 | /** Pointer to a mutex semaphore handle. */ |
6d209b23 | 2238 | typedef RTSEMMUTEX RT_FAR *PRTSEMMUTEX; |
056a1eb7 SF |
2239 | /** Nil mutex semaphore handle. */ |
2240 | #define NIL_RTSEMMUTEX 0 | |
2241 | ||
2242 | /** @typedef RTSEMSPINMUTEX | |
2243 | * Spinning mutex Semaphore handle. */ | |
6d209b23 | 2244 | typedef R3R0PTRTYPE(struct RTSEMSPINMUTEXINTERNAL RT_FAR *) RTSEMSPINMUTEX; |
056a1eb7 | 2245 | /** Pointer to a spinning mutex semaphore handle. */ |
6d209b23 | 2246 | typedef RTSEMSPINMUTEX RT_FAR *PRTSEMSPINMUTEX; |
056a1eb7 SF |
2247 | /** Nil spinning mutex semaphore handle. */ |
2248 | #define NIL_RTSEMSPINMUTEX 0 | |
2249 | ||
2250 | /** @typedef RTSEMRW | |
2251 | * Read/Write Semaphore handle. */ | |
6d209b23 | 2252 | typedef R3R0PTRTYPE(struct RTSEMRWINTERNAL RT_FAR *) RTSEMRW; |
056a1eb7 | 2253 | /** Pointer to a read/write semaphore handle. */ |
6d209b23 | 2254 | typedef RTSEMRW RT_FAR *PRTSEMRW; |
056a1eb7 SF |
2255 | /** Nil read/write semaphore handle. */ |
2256 | #define NIL_RTSEMRW 0 | |
2257 | ||
2258 | /** @typedef RTSEMXROADS | |
2259 | * Crossroads semaphore handle. */ | |
6d209b23 | 2260 | typedef R3R0PTRTYPE(struct RTSEMXROADSINTERNAL RT_FAR *) RTSEMXROADS; |
056a1eb7 | 2261 | /** Pointer to a crossroads semaphore handle. */ |
6d209b23 | 2262 | typedef RTSEMXROADS RT_FAR *PRTSEMXROADS; |
056a1eb7 SF |
2263 | /** Nil crossroads semaphore handle. */ |
2264 | #define NIL_RTSEMXROADS ((RTSEMXROADS)0) | |
2265 | ||
2266 | /** Spinlock handle. */ | |
6d209b23 | 2267 | typedef R3R0PTRTYPE(struct RTSPINLOCKINTERNAL RT_FAR *) RTSPINLOCK; |
056a1eb7 | 2268 | /** Pointer to a spinlock handle. */ |
6d209b23 | 2269 | typedef RTSPINLOCK RT_FAR *PRTSPINLOCK; |
056a1eb7 SF |
2270 | /** Nil spinlock handle. */ |
2271 | #define NIL_RTSPINLOCK 0 | |
2272 | ||
2273 | /** Socket handle. */ | |
6d209b23 | 2274 | typedef R3R0PTRTYPE(struct RTSOCKETINT RT_FAR *) RTSOCKET; |
056a1eb7 | 2275 | /** Pointer to socket handle. */ |
6d209b23 | 2276 | typedef RTSOCKET RT_FAR *PRTSOCKET; |
056a1eb7 SF |
2277 | /** Nil socket handle. */ |
2278 | #define NIL_RTSOCKET ((RTSOCKET)0) | |
2279 | ||
2280 | /** Pointer to a RTTCPSERVER handle. */ | |
6d209b23 | 2281 | typedef struct RTTCPSERVER RT_FAR *PRTTCPSERVER; |
056a1eb7 | 2282 | /** Pointer to a RTTCPSERVER handle. */ |
6d209b23 | 2283 | typedef PRTTCPSERVER RT_FAR *PPRTTCPSERVER; |
056a1eb7 SF |
2284 | /** Nil RTTCPSERVER handle. */ |
2285 | #define NIL_RTTCPSERVER ((PRTTCPSERVER)0) | |
2286 | ||
2287 | /** Pointer to a RTUDPSERVER handle. */ | |
6d209b23 | 2288 | typedef struct RTUDPSERVER RT_FAR *PRTUDPSERVER; |
056a1eb7 | 2289 | /** Pointer to a RTUDPSERVER handle. */ |
6d209b23 | 2290 | typedef PRTUDPSERVER RT_FAR *PPRTUDPSERVER; |
056a1eb7 SF |
2291 | /** Nil RTUDPSERVER handle. */ |
2292 | #define NIL_RTUDPSERVER ((PRTUDPSERVER)0) | |
2293 | ||
2294 | /** Thread handle.*/ | |
6d209b23 | 2295 | typedef R3R0PTRTYPE(struct RTTHREADINT RT_FAR *) RTTHREAD; |
056a1eb7 | 2296 | /** Pointer to thread handle. */ |
6d209b23 | 2297 | typedef RTTHREAD RT_FAR *PRTTHREAD; |
056a1eb7 SF |
2298 | /** Nil thread handle. */ |
2299 | #define NIL_RTTHREAD 0 | |
2300 | ||
2301 | /** Thread context switching hook handle. */ | |
6d209b23 | 2302 | typedef R0PTRTYPE(struct RTTHREADCTXHOOKINT RT_FAR *) RTTHREADCTXHOOK; |
056a1eb7 | 2303 | /** Pointer to Thread context switching hook handle. */ |
6d209b23 | 2304 | typedef RTTHREADCTXHOOK RT_FAR *PRTTHREADCTXHOOK; |
056a1eb7 SF |
2305 | /** Nil Thread context switching hook handle. */ |
2306 | #define NIL_RTTHREADCTXHOOK ((RTTHREADCTXHOOK)0) | |
2307 | ||
2308 | /** A TLS index. */ | |
2309 | typedef RTHCINTPTR RTTLS; | |
2310 | /** Pointer to a TLS index. */ | |
6d209b23 | 2311 | typedef RTTLS RT_FAR *PRTTLS; |
056a1eb7 | 2312 | /** Pointer to a const TLS index. */ |
6d209b23 | 2313 | typedef RTTLS const RT_FAR *PCRTTLS; |
056a1eb7 SF |
2314 | /** NIL TLS index value. */ |
2315 | #define NIL_RTTLS ((RTTLS)-1) | |
2316 | ||
2317 | /** Trace buffer handle. | |
2318 | * @remarks This is not a R3/R0 type like most other handles! | |
2319 | */ | |
6d209b23 | 2320 | typedef struct RTTRACEBUFINT RT_FAR *RTTRACEBUF; |
056a1eb7 | 2321 | /** Pointer to a trace buffer handle. */ |
6d209b23 | 2322 | typedef RTTRACEBUF RT_FAR *PRTTRACEBUF; |
056a1eb7 SF |
2323 | /** Nil trace buffer handle. */ |
2324 | #define NIL_RTTRACEBUF ((RTTRACEBUF)0) | |
2325 | /** The handle of the default trace buffer. | |
2326 | * This can be used with any of the RTTraceBufAdd APIs. */ | |
2327 | #define RTTRACEBUF_DEFAULT ((RTTRACEBUF)-2) | |
2328 | ||
2329 | /** Handle to a simple heap. */ | |
6d209b23 | 2330 | typedef R3R0PTRTYPE(struct RTHEAPSIMPLEINTERNAL RT_FAR *) RTHEAPSIMPLE; |
056a1eb7 | 2331 | /** Pointer to a handle to a simple heap. */ |
6d209b23 | 2332 | typedef RTHEAPSIMPLE RT_FAR *PRTHEAPSIMPLE; |
056a1eb7 SF |
2333 | /** NIL simple heap handle. */ |
2334 | #define NIL_RTHEAPSIMPLE ((RTHEAPSIMPLE)0) | |
2335 | ||
2336 | /** Handle to an offset based heap. */ | |
6d209b23 | 2337 | typedef R3R0PTRTYPE(struct RTHEAPOFFSETINTERNAL RT_FAR *) RTHEAPOFFSET; |
056a1eb7 | 2338 | /** Pointer to a handle to an offset based heap. */ |
6d209b23 | 2339 | typedef RTHEAPOFFSET RT_FAR *PRTHEAPOFFSET; |
056a1eb7 SF |
2340 | /** NIL offset based heap handle. */ |
2341 | #define NIL_RTHEAPOFFSET ((RTHEAPOFFSET)0) | |
2342 | ||
2343 | /** Handle to an environment block. */ | |
6d209b23 | 2344 | typedef R3PTRTYPE(struct RTENVINTERNAL RT_FAR *) RTENV; |
056a1eb7 | 2345 | /** Pointer to a handle to an environment block. */ |
6d209b23 | 2346 | typedef RTENV RT_FAR *PRTENV; |
056a1eb7 SF |
2347 | /** NIL simple heap handle. */ |
2348 | #define NIL_RTENV ((RTENV)0) | |
2349 | ||
2350 | /** A CPU identifier. | |
2351 | * @remarks This doesn't have to correspond to the APIC ID (intel/amd). Nor | |
2352 | * does it have to correspond to the bits in the affinity mask, at | |
2353 | * least not until we've sorted out Windows NT. */ | |
2354 | typedef uint32_t RTCPUID; | |
2355 | /** Pointer to a CPU identifier. */ | |
6d209b23 | 2356 | typedef RTCPUID RT_FAR *PRTCPUID; |
056a1eb7 | 2357 | /** Pointer to a const CPU identifier. */ |
6d209b23 | 2358 | typedef RTCPUID const RT_FAR *PCRTCPUID; |
056a1eb7 SF |
2359 | /** Nil CPU Id. */ |
2360 | #define NIL_RTCPUID ((RTCPUID)~0) | |
2361 | ||
2362 | /** The maximum number of CPUs a set can contain and IPRT is able | |
2363 | * to reference. (Should be max of support arch/platforms.) | |
2364 | * @remarks Must be a multiple of 64 (see RTCPUSET). */ | |
2365 | #if defined(RT_ARCH_X86) || defined(RT_ARCH_AMD64) | |
2366 | # define RTCPUSET_MAX_CPUS 256 | |
2367 | #elif defined(RT_ARCH_SPARC) || defined(RT_ARCH_SPARC64) | |
2368 | # define RTCPUSET_MAX_CPUS 1024 | |
2369 | #else | |
2370 | # define RTCPUSET_MAX_CPUS 64 | |
2371 | #endif | |
2372 | /** A CPU set. | |
2373 | * @note Treat this as an opaque type and always use RTCpuSet* for | |
2374 | * manipulating it. */ | |
2375 | typedef struct RTCPUSET | |
2376 | { | |
2377 | /** The bitmap. */ | |
2378 | uint64_t bmSet[RTCPUSET_MAX_CPUS / 64]; | |
2379 | } RTCPUSET; | |
2380 | /** Pointer to a CPU set. */ | |
6d209b23 | 2381 | typedef RTCPUSET RT_FAR *PRTCPUSET; |
056a1eb7 | 2382 | /** Pointer to a const CPU set. */ |
6d209b23 | 2383 | typedef RTCPUSET const RT_FAR *PCRTCPUSET; |
056a1eb7 SF |
2384 | |
2385 | /** A handle table handle. */ | |
6d209b23 | 2386 | typedef R3R0PTRTYPE(struct RTHANDLETABLEINT RT_FAR *) RTHANDLETABLE; |
056a1eb7 | 2387 | /** A pointer to a handle table handle. */ |
6d209b23 | 2388 | typedef RTHANDLETABLE RT_FAR *PRTHANDLETABLE; |
056a1eb7 SF |
2389 | /** @def NIL_RTHANDLETABLE |
2390 | * NIL handle table handle. */ | |
2391 | #define NIL_RTHANDLETABLE ((RTHANDLETABLE)0) | |
2392 | ||
2393 | /** A handle to a low resolution timer. */ | |
6d209b23 | 2394 | typedef R3R0PTRTYPE(struct RTTIMERLRINT RT_FAR *) RTTIMERLR; |
056a1eb7 | 2395 | /** A pointer to a low resolution timer handle. */ |
6d209b23 | 2396 | typedef RTTIMERLR RT_FAR *PRTTIMERLR; |
056a1eb7 SF |
2397 | /** @def NIL_RTTIMERLR |
2398 | * NIL low resolution timer handle value. */ | |
2399 | #define NIL_RTTIMERLR ((RTTIMERLR)0) | |
2400 | ||
2401 | /** Handle to a random number generator. */ | |
6d209b23 | 2402 | typedef R3R0PTRTYPE(struct RTRANDINT RT_FAR *) RTRAND; |
056a1eb7 | 2403 | /** Pointer to a random number generator handle. */ |
6d209b23 | 2404 | typedef RTRAND RT_FAR *PRTRAND; |
056a1eb7 SF |
2405 | /** NIL random number generator handle value. */ |
2406 | #define NIL_RTRAND ((RTRAND)0) | |
2407 | ||
2408 | /** Debug address space handle. */ | |
6d209b23 | 2409 | typedef R3R0PTRTYPE(struct RTDBGASINT RT_FAR *) RTDBGAS; |
056a1eb7 | 2410 | /** Pointer to a debug address space handle. */ |
6d209b23 | 2411 | typedef RTDBGAS RT_FAR *PRTDBGAS; |
056a1eb7 SF |
2412 | /** NIL debug address space handle. */ |
2413 | #define NIL_RTDBGAS ((RTDBGAS)0) | |
2414 | ||
2415 | /** Debug module handle. */ | |
6d209b23 | 2416 | typedef R3R0PTRTYPE(struct RTDBGMODINT RT_FAR *) RTDBGMOD; |
056a1eb7 | 2417 | /** Pointer to a debug module handle. */ |
6d209b23 | 2418 | typedef RTDBGMOD RT_FAR *PRTDBGMOD; |
056a1eb7 SF |
2419 | /** NIL debug module handle. */ |
2420 | #define NIL_RTDBGMOD ((RTDBGMOD)0) | |
2421 | ||
2422 | /** Manifest handle. */ | |
6d209b23 | 2423 | typedef struct RTMANIFESTINT RT_FAR *RTMANIFEST; |
056a1eb7 | 2424 | /** Pointer to a manifest handle. */ |
6d209b23 | 2425 | typedef RTMANIFEST RT_FAR *PRTMANIFEST; |
056a1eb7 SF |
2426 | /** NIL manifest handle. */ |
2427 | #define NIL_RTMANIFEST ((RTMANIFEST)~(uintptr_t)0) | |
2428 | ||
2429 | /** Memory pool handle. */ | |
6d209b23 | 2430 | typedef R3R0PTRTYPE(struct RTMEMPOOLINT RT_FAR *) RTMEMPOOL; |
056a1eb7 | 2431 | /** Pointer to a memory pool handle. */ |
6d209b23 | 2432 | typedef RTMEMPOOL RT_FAR *PRTMEMPOOL; |
056a1eb7 SF |
2433 | /** NIL memory pool handle. */ |
2434 | #define NIL_RTMEMPOOL ((RTMEMPOOL)0) | |
2435 | /** The default memory pool handle. */ | |
2436 | #define RTMEMPOOL_DEFAULT ((RTMEMPOOL)-2) | |
2437 | ||
2438 | /** String cache handle. */ | |
6d209b23 | 2439 | typedef R3R0PTRTYPE(struct RTSTRCACHEINT RT_FAR *) RTSTRCACHE; |
056a1eb7 | 2440 | /** Pointer to a string cache handle. */ |
6d209b23 | 2441 | typedef RTSTRCACHE RT_FAR *PRTSTRCACHE; |
056a1eb7 SF |
2442 | /** NIL string cache handle. */ |
2443 | #define NIL_RTSTRCACHE ((RTSTRCACHE)0) | |
2444 | /** The default string cache handle. */ | |
2445 | #define RTSTRCACHE_DEFAULT ((RTSTRCACHE)-2) | |
2446 | ||
2447 | ||
2448 | /** Virtual Filesystem handle. */ | |
6d209b23 | 2449 | typedef struct RTVFSINTERNAL RT_FAR *RTVFS; |
056a1eb7 | 2450 | /** Pointer to a VFS handle. */ |
6d209b23 | 2451 | typedef RTVFS RT_FAR *PRTVFS; |
056a1eb7 SF |
2452 | /** A NIL VFS handle. */ |
2453 | #define NIL_RTVFS ((RTVFS)~(uintptr_t)0) | |
2454 | ||
2455 | /** Virtual Filesystem base object handle. */ | |
6d209b23 | 2456 | typedef struct RTVFSOBJINTERNAL RT_FAR *RTVFSOBJ; |
056a1eb7 | 2457 | /** Pointer to a VFS base object handle. */ |
6d209b23 | 2458 | typedef RTVFSOBJ RT_FAR *PRTVFSOBJ; |
056a1eb7 SF |
2459 | /** A NIL VFS base object handle. */ |
2460 | #define NIL_RTVFSOBJ ((RTVFSOBJ)~(uintptr_t)0) | |
2461 | ||
2462 | /** Virtual Filesystem directory handle. */ | |
6d209b23 | 2463 | typedef struct RTVFSDIRINTERNAL RT_FAR *RTVFSDIR; |
056a1eb7 | 2464 | /** Pointer to a VFS directory handle. */ |
6d209b23 | 2465 | typedef RTVFSDIR RT_FAR *PRTVFSDIR; |
056a1eb7 SF |
2466 | /** A NIL VFS directory handle. */ |
2467 | #define NIL_RTVFSDIR ((RTVFSDIR)~(uintptr_t)0) | |
2468 | ||
2469 | /** Virtual Filesystem filesystem stream handle. */ | |
6d209b23 | 2470 | typedef struct RTVFSFSSTREAMINTERNAL RT_FAR *RTVFSFSSTREAM; |
056a1eb7 | 2471 | /** Pointer to a VFS filesystem stream handle. */ |
6d209b23 | 2472 | typedef RTVFSFSSTREAM RT_FAR *PRTVFSFSSTREAM; |
056a1eb7 SF |
2473 | /** A NIL VFS filesystem stream handle. */ |
2474 | #define NIL_RTVFSFSSTREAM ((RTVFSFSSTREAM)~(uintptr_t)0) | |
2475 | ||
2476 | /** Virtual Filesystem I/O stream handle. */ | |
6d209b23 | 2477 | typedef struct RTVFSIOSTREAMINTERNAL RT_FAR *RTVFSIOSTREAM; |
056a1eb7 | 2478 | /** Pointer to a VFS I/O stream handle. */ |
6d209b23 | 2479 | typedef RTVFSIOSTREAM RT_FAR *PRTVFSIOSTREAM; |
056a1eb7 SF |
2480 | /** A NIL VFS I/O stream handle. */ |
2481 | #define NIL_RTVFSIOSTREAM ((RTVFSIOSTREAM)~(uintptr_t)0) | |
2482 | ||
2483 | /** Virtual Filesystem file handle. */ | |
6d209b23 | 2484 | typedef struct RTVFSFILEINTERNAL RT_FAR *RTVFSFILE; |
056a1eb7 | 2485 | /** Pointer to a VFS file handle. */ |
6d209b23 | 2486 | typedef RTVFSFILE RT_FAR *PRTVFSFILE; |
056a1eb7 SF |
2487 | /** A NIL VFS file handle. */ |
2488 | #define NIL_RTVFSFILE ((RTVFSFILE)~(uintptr_t)0) | |
2489 | ||
2490 | /** Virtual Filesystem symbolic link handle. */ | |
6d209b23 | 2491 | typedef struct RTVFSSYMLINKINTERNAL RT_FAR *RTVFSSYMLINK; |
056a1eb7 | 2492 | /** Pointer to a VFS symbolic link handle. */ |
6d209b23 | 2493 | typedef RTVFSSYMLINK RT_FAR *PRTVFSSYMLINK; |
056a1eb7 SF |
2494 | /** A NIL VFS symbolic link handle. */ |
2495 | #define NIL_RTVFSSYMLINK ((RTVFSSYMLINK)~(uintptr_t)0) | |
2496 | ||
2497 | /** Async I/O manager handle. */ | |
6d209b23 | 2498 | typedef struct RTAIOMGRINT RT_FAR *RTAIOMGR; |
056a1eb7 | 2499 | /** Pointer to a async I/O manager handle. */ |
6d209b23 | 2500 | typedef RTAIOMGR RT_FAR *PRTAIOMGR; |
056a1eb7 SF |
2501 | /** A NIL async I/O manager handle. */ |
2502 | #define NIL_RTAIOMGR ((RTAIOMGR)~(uintptr_t)0) | |
2503 | ||
2504 | /** Async I/O manager file handle. */ | |
6d209b23 | 2505 | typedef struct RTAIOMGRFILEINT RT_FAR *RTAIOMGRFILE; |
056a1eb7 | 2506 | /** Pointer to a async I/O manager file handle. */ |
6d209b23 | 2507 | typedef RTAIOMGRFILE RT_FAR *PRTAIOMGRFILE; |
056a1eb7 SF |
2508 | /** A NIL async I/O manager file handle. */ |
2509 | #define NIL_RTAIOMGRFILE ((RTAIOMGRFILE)~(uintptr_t)0) | |
2510 | ||
6d209b23 SF |
2511 | /** Kernel module information record handle. */ |
2512 | typedef struct RTKRNLMODINFOINT RT_FAR *RTKRNLMODINFO; | |
2513 | /** Pointer to a kernel information record handle. */ | |
2514 | typedef RTKRNLMODINFO RT_FAR *PRTKRNLMODINFO; | |
2515 | /** A NIL kernel module information record handle. */ | |
2516 | #define NIL_RTKRNLMODINFO ((RTKRNLMODINFO)~(uintptr_t)0); | |
2517 | ||
056a1eb7 SF |
2518 | /** |
2519 | * Handle type. | |
2520 | * | |
2521 | * This is usually used together with RTHANDLEUNION. | |
2522 | */ | |
2523 | typedef enum RTHANDLETYPE | |
2524 | { | |
2525 | /** The invalid zero value. */ | |
2526 | RTHANDLETYPE_INVALID = 0, | |
2527 | /** File handle. */ | |
2528 | RTHANDLETYPE_FILE, | |
2529 | /** Pipe handle */ | |
2530 | RTHANDLETYPE_PIPE, | |
2531 | /** Socket handle. */ | |
2532 | RTHANDLETYPE_SOCKET, | |
2533 | /** Thread handle. */ | |
2534 | RTHANDLETYPE_THREAD, | |
2535 | /** The end of the valid values. */ | |
2536 | RTHANDLETYPE_END, | |
2537 | /** The 32-bit type blow up. */ | |
2538 | RTHANDLETYPE_32BIT_HACK = 0x7fffffff | |
2539 | } RTHANDLETYPE; | |
2540 | /** Pointer to a handle type. */ | |
6d209b23 | 2541 | typedef RTHANDLETYPE RT_FAR *PRTHANDLETYPE; |
056a1eb7 SF |
2542 | |
2543 | /** | |
2544 | * Handle union. | |
2545 | * | |
2546 | * This is usually used together with RTHANDLETYPE or as RTHANDLE. | |
2547 | */ | |
2548 | typedef union RTHANDLEUNION | |
2549 | { | |
2550 | RTFILE hFile; /**< File handle. */ | |
2551 | RTPIPE hPipe; /**< Pipe handle. */ | |
2552 | RTSOCKET hSocket; /**< Socket handle. */ | |
2553 | RTTHREAD hThread; /**< Thread handle. */ | |
2554 | /** Generic integer handle value. | |
2555 | * Note that RTFILE is not yet pointer sized, so accessing it via this member | |
2556 | * isn't necessarily safe or fully portable. */ | |
2557 | RTHCUINTPTR uInt; | |
2558 | } RTHANDLEUNION; | |
2559 | /** Pointer to a handle union. */ | |
6d209b23 | 2560 | typedef RTHANDLEUNION RT_FAR *PRTHANDLEUNION; |
056a1eb7 | 2561 | /** Pointer to a const handle union. */ |
6d209b23 | 2562 | typedef RTHANDLEUNION const RT_FAR *PCRTHANDLEUNION; |
056a1eb7 SF |
2563 | |
2564 | /** | |
2565 | * Generic handle. | |
2566 | */ | |
2567 | typedef struct RTHANDLE | |
2568 | { | |
2569 | /** The handle type. */ | |
2570 | RTHANDLETYPE enmType; | |
2571 | /** The handle value. */ | |
2572 | RTHANDLEUNION u; | |
2573 | } RTHANDLE; | |
2574 | /** Pointer to a generic handle. */ | |
6d209b23 | 2575 | typedef RTHANDLE RT_FAR *PRTHANDLE; |
056a1eb7 | 2576 | /** Pointer to a const generic handle. */ |
6d209b23 | 2577 | typedef RTHANDLE const RT_FAR *PCRTHANDLE; |
056a1eb7 SF |
2578 | |
2579 | ||
2580 | /** | |
2581 | * Standard handles. | |
2582 | * | |
2583 | * @remarks These have the correct file descriptor values for unixy systems and | |
2584 | * can be used directly in code specific to those platforms. | |
2585 | */ | |
2586 | typedef enum RTHANDLESTD | |
2587 | { | |
2588 | /** Invalid standard handle. */ | |
2589 | RTHANDLESTD_INVALID = -1, | |
2590 | /** The standard input handle. */ | |
2591 | RTHANDLESTD_INPUT = 0, | |
2592 | /** The standard output handle. */ | |
2593 | RTHANDLESTD_OUTPUT, | |
2594 | /** The standard error handle. */ | |
2595 | RTHANDLESTD_ERROR, | |
2596 | /** The typical 32-bit type hack. */ | |
2597 | RTHANDLESTD_32BIT_HACK = 0x7fffffff | |
2598 | } RTHANDLESTD; | |
2599 | ||
2600 | ||
2601 | /** | |
2602 | * Error info. | |
2603 | * | |
2604 | * See RTErrInfo*. | |
2605 | */ | |
2606 | typedef struct RTERRINFO | |
2607 | { | |
2608 | /** Flags, see RTERRINFO_FLAGS_XXX. */ | |
2609 | uint32_t fFlags; | |
2610 | /** The status code. */ | |
2611 | int32_t rc; | |
2612 | /** The size of the message */ | |
2613 | size_t cbMsg; | |
2614 | /** The error buffer. */ | |
2615 | char *pszMsg; | |
2616 | /** Reserved for future use. */ | |
2617 | void *apvReserved[2]; | |
2618 | } RTERRINFO; | |
2619 | /** Pointer to an error info structure. */ | |
6d209b23 | 2620 | typedef RTERRINFO RT_FAR *PRTERRINFO; |
056a1eb7 | 2621 | /** Pointer to a const error info structure. */ |
6d209b23 | 2622 | typedef RTERRINFO const RT_FAR *PCRTERRINFO; |
056a1eb7 SF |
2623 | |
2624 | /** | |
2625 | * Static error info structure, see RTErrInfoInitStatic. | |
2626 | */ | |
2627 | typedef struct RTERRINFOSTATIC | |
2628 | { | |
2629 | /** The core error info. */ | |
2630 | RTERRINFO Core; | |
2631 | /** The static message buffer. */ | |
2632 | char szMsg[3072]; | |
2633 | } RTERRINFOSTATIC; | |
2634 | /** Pointer to a error info buffer. */ | |
6d209b23 | 2635 | typedef RTERRINFOSTATIC RT_FAR *PRTERRINFOSTATIC; |
056a1eb7 | 2636 | /** Pointer to a const static error info buffer. */ |
6d209b23 | 2637 | typedef RTERRINFOSTATIC const RT_FAR *PCRTERRINFOSTATIC; |
056a1eb7 SF |
2638 | |
2639 | ||
2640 | /** | |
2641 | * UUID data type. | |
2642 | * | |
2643 | * See RTUuid*. | |
2644 | * | |
2645 | * @remarks IPRT defines that the first three integers in the @c Gen struct | |
2646 | * interpretation are in little endian representation. This is | |
2647 | * different to many other UUID implementation, and requires | |
2648 | * conversion if you need to achieve consistent results. | |
2649 | */ | |
2650 | typedef union RTUUID | |
2651 | { | |
2652 | /** 8-bit view. */ | |
2653 | uint8_t au8[16]; | |
2654 | /** 16-bit view. */ | |
2655 | uint16_t au16[8]; | |
2656 | /** 32-bit view. */ | |
2657 | uint32_t au32[4]; | |
2658 | /** 64-bit view. */ | |
2659 | uint64_t au64[2]; | |
2660 | /** The way the UUID is declared by the DCE specification. */ | |
2661 | struct | |
2662 | { | |
2663 | uint32_t u32TimeLow; | |
2664 | uint16_t u16TimeMid; | |
2665 | uint16_t u16TimeHiAndVersion; | |
2666 | uint8_t u8ClockSeqHiAndReserved; | |
2667 | uint8_t u8ClockSeqLow; | |
2668 | uint8_t au8Node[6]; | |
2669 | } Gen; | |
2670 | } RTUUID; | |
2671 | /** Pointer to UUID data. */ | |
6d209b23 | 2672 | typedef RTUUID RT_FAR *PRTUUID; |
056a1eb7 | 2673 | /** Pointer to readonly UUID data. */ |
6d209b23 | 2674 | typedef const RTUUID RT_FAR *PCRTUUID; |
056a1eb7 SF |
2675 | |
2676 | /** Initializes a RTUUID structure with all zeros (RTUuidIsNull() true). */ | |
2677 | #define RTUUID_INITIALIZE_NULL { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } | |
2678 | ||
2679 | /** UUID string maximum length. */ | |
2680 | #define RTUUID_STR_LENGTH 37 | |
2681 | ||
2682 | ||
2683 | /** Compression handle. */ | |
6d209b23 | 2684 | typedef struct RTZIPCOMP RT_FAR *PRTZIPCOMP; |
056a1eb7 | 2685 | /** Decompressor handle. */ |
6d209b23 | 2686 | typedef struct RTZIPDECOMP RT_FAR *PRTZIPDECOMP; |
056a1eb7 SF |
2687 | |
2688 | ||
2689 | /** | |
2690 | * Unicode Code Point. | |
2691 | */ | |
6d209b23 | 2692 | typedef uint32_t RTUNICP; |
056a1eb7 | 2693 | /** Pointer to an Unicode Code Point. */ |
6d209b23 | 2694 | typedef RTUNICP RT_FAR *PRTUNICP; |
056a1eb7 | 2695 | /** Pointer to an Unicode Code Point. */ |
6d209b23 | 2696 | typedef const RTUNICP RT_FAR *PCRTUNICP; |
056a1eb7 | 2697 | /** Max value a RTUNICP type can hold. */ |
6d209b23 | 2698 | #define RTUNICP_MAX ( ~(RTUNICP)0 ) |
056a1eb7 SF |
2699 | /** Invalid code point. |
2700 | * This is returned when encountered invalid encodings or invalid | |
2701 | * unicode code points. */ | |
6d209b23 | 2702 | #define RTUNICP_INVALID ( UINT32_C(0xfffffffe) ) |
056a1eb7 SF |
2703 | |
2704 | ||
2705 | /** | |
2706 | * UTF-16 character. | |
2707 | * @remark wchar_t is not usable since it's compiler defined. | |
2708 | * @remark When we use the term character we're not talking about unicode code point, but | |
2709 | * the basic unit of the string encoding. Thus cwc - count of wide chars - means | |
2710 | * count of RTUTF16; cuc - count of unicode chars - means count of RTUNICP; | |
2711 | * and cch means count of the typedef 'char', which is assumed to be an octet. | |
2712 | */ | |
6d209b23 | 2713 | typedef uint16_t RTUTF16; |
056a1eb7 | 2714 | /** Pointer to a UTF-16 character. */ |
6d209b23 | 2715 | typedef RTUTF16 RT_FAR *PRTUTF16; |
056a1eb7 | 2716 | /** Pointer to a const UTF-16 character. */ |
6d209b23 | 2717 | typedef const RTUTF16 RT_FAR *PCRTUTF16; |
056a1eb7 SF |
2718 | |
2719 | ||
2720 | /** | |
2721 | * String tuple to go with the RT_STR_TUPLE macro. | |
2722 | */ | |
2723 | typedef struct RTSTRTUPLE | |
2724 | { | |
2725 | /** The string. */ | |
2726 | const char *psz; | |
2727 | /** The string length. */ | |
2728 | size_t cch; | |
2729 | } RTSTRTUPLE; | |
2730 | /** Pointer to a string tuple. */ | |
6d209b23 | 2731 | typedef RTSTRTUPLE RT_FAR *PRTSTRTUPLE; |
056a1eb7 | 2732 | /** Pointer to a const string tuple. */ |
6d209b23 | 2733 | typedef RTSTRTUPLE const RT_FAR *PCRTSTRTUPLE; |
056a1eb7 SF |
2734 | |
2735 | /** | |
2736 | * Wait for ever if we have to. | |
2737 | */ | |
2738 | #define RT_INDEFINITE_WAIT (~0U) | |
2739 | ||
2740 | ||
2741 | /** | |
2742 | * Generic process callback. | |
2743 | * | |
2744 | * @returns VBox status code. Failure will cancel the operation. | |
2745 | * @param uPercentage The percentage of the operation which has been completed. | |
2746 | * @param pvUser The user specified argument. | |
2747 | */ | |
2748 | typedef DECLCALLBACK(int) FNRTPROGRESS(unsigned uPrecentage, void *pvUser); | |
2749 | /** Pointer to a generic progress callback function, FNRTPROCESS(). */ | |
2750 | typedef FNRTPROGRESS *PFNRTPROGRESS; | |
2751 | ||
2752 | /** | |
2753 | * Generic vprintf-like callback function for dumpers. | |
2754 | * | |
2755 | * @param pvUser User argument. | |
2756 | * @param pszFormat The format string. | |
2757 | * @param va Arguments for the format string. | |
2758 | */ | |
2759 | typedef DECLCALLBACK(void) FNRTDUMPPRINTFV(void *pvUser, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(2, 0); | |
2760 | /** Pointer to a generic printf-like function for dumping. */ | |
2761 | typedef FNRTDUMPPRINTFV *PFNRTDUMPPRINTFV; | |
2762 | ||
2763 | ||
2764 | /** | |
2765 | * A point in a two dimentional coordinate system. | |
2766 | */ | |
2767 | typedef struct RTPOINT | |
2768 | { | |
2769 | /** X coordinate. */ | |
2770 | int32_t x; | |
2771 | /** Y coordinate. */ | |
2772 | int32_t y; | |
2773 | } RTPOINT; | |
2774 | /** Pointer to a point. */ | |
6d209b23 | 2775 | typedef RTPOINT RT_FAR *PRTPOINT; |
056a1eb7 | 2776 | /** Pointer to a const point. */ |
6d209b23 | 2777 | typedef const RTPOINT RT_FAR *PCRTPOINT; |
056a1eb7 SF |
2778 | |
2779 | ||
2780 | /** | |
2781 | * Rectangle data type, double point. | |
2782 | */ | |
2783 | typedef struct RTRECT | |
2784 | { | |
2785 | /** left X coordinate. */ | |
2786 | int32_t xLeft; | |
2787 | /** top Y coordinate. */ | |
2788 | int32_t yTop; | |
2789 | /** right X coordinate. (exclusive) */ | |
2790 | int32_t xRight; | |
2791 | /** bottom Y coordinate. (exclusive) */ | |
2792 | int32_t yBottom; | |
2793 | } RTRECT; | |
2794 | /** Pointer to a double point rectangle. */ | |
6d209b23 | 2795 | typedef RTRECT RT_FAR *PRTRECT; |
056a1eb7 | 2796 | /** Pointer to a const double point rectangle. */ |
6d209b23 | 2797 | typedef const RTRECT RT_FAR *PCRTRECT; |
056a1eb7 SF |
2798 | |
2799 | ||
2800 | /** | |
2801 | * Rectangle data type, point + size. | |
2802 | */ | |
2803 | typedef struct RTRECT2 | |
2804 | { | |
2805 | /** X coordinate. | |
2806 | * Unless stated otherwise, this is the top left corner. */ | |
2807 | int32_t x; | |
2808 | /** Y coordinate. | |
2809 | * Unless stated otherwise, this is the top left corner. */ | |
2810 | int32_t y; | |
2811 | /** The width. | |
2812 | * Unless stated otherwise, this is to the right of (x,y) and will not | |
2813 | * be a negative number. */ | |
2814 | int32_t cx; | |
2815 | /** The height. | |
2816 | * Unless stated otherwise, this is down from (x,y) and will not be a | |
2817 | * negative number. */ | |
2818 | int32_t cy; | |
2819 | } RTRECT2; | |
2820 | /** Pointer to a point + size rectangle. */ | |
6d209b23 | 2821 | typedef RTRECT2 RT_FAR *PRTRECT2; |
056a1eb7 | 2822 | /** Pointer to a const point + size rectangle. */ |
6d209b23 | 2823 | typedef const RTRECT2 RT_FAR *PCRTRECT2; |
056a1eb7 SF |
2824 | |
2825 | ||
2826 | /** | |
2827 | * The size of a rectangle. | |
2828 | */ | |
2829 | typedef struct RTRECTSIZE | |
2830 | { | |
2831 | /** The width (along the x-axis). */ | |
2832 | uint32_t cx; | |
2833 | /** The height (along the y-axis). */ | |
2834 | uint32_t cy; | |
2835 | } RTRECTSIZE; | |
2836 | /** Pointer to a rectangle size. */ | |
6d209b23 | 2837 | typedef RTRECTSIZE RT_FAR *PRTRECTSIZE; |
056a1eb7 | 2838 | /** Pointer to a const rectangle size. */ |
6d209b23 | 2839 | typedef const RTRECTSIZE RT_FAR *PCRTRECTSIZE; |
056a1eb7 SF |
2840 | |
2841 | ||
2842 | /** | |
2843 | * Ethernet MAC address. | |
2844 | * | |
2845 | * The first 24 bits make up the Organisationally Unique Identifier (OUI), | |
2846 | * where the first bit (little endian) indicates multicast (set) / unicast, | |
2847 | * and the second bit indicates locally (set) / global administered. If all | |
2848 | * bits are set, it's a broadcast. | |
2849 | */ | |
2850 | typedef union RTMAC | |
2851 | { | |
2852 | /** @todo add a bitfield view of this stuff. */ | |
2853 | /** 8-bit view. */ | |
2854 | uint8_t au8[6]; | |
2855 | /** 16-bit view. */ | |
2856 | uint16_t au16[3]; | |
2857 | } RTMAC; | |
2858 | /** Pointer to a MAC address. */ | |
6d209b23 | 2859 | typedef RTMAC RT_FAR *PRTMAC; |
056a1eb7 | 2860 | /** Pointer to a readonly MAC address. */ |
6d209b23 | 2861 | typedef const RTMAC RT_FAR *PCRTMAC; |
056a1eb7 SF |
2862 | |
2863 | ||
2864 | /** Pointer to a lock validator record. | |
2865 | * The structure definition is found in iprt/lockvalidator.h. */ | |
6d209b23 | 2866 | typedef struct RTLOCKVALRECEXCL RT_FAR *PRTLOCKVALRECEXCL; |
056a1eb7 SF |
2867 | /** Pointer to a record of one ownership share. |
2868 | * The structure definition is found in iprt/lockvalidator.h. */ | |
6d209b23 | 2869 | typedef struct RTLOCKVALRECSHRD RT_FAR *PRTLOCKVALRECSHRD; |
056a1eb7 SF |
2870 | /** Pointer to a lock validator source position. |
2871 | * The structure definition is found in iprt/lockvalidator.h. */ | |
6d209b23 | 2872 | typedef struct RTLOCKVALSRCPOS RT_FAR *PRTLOCKVALSRCPOS; |
056a1eb7 SF |
2873 | /** Pointer to a const lock validator source position. |
2874 | * The structure definition is found in iprt/lockvalidator.h. */ | |
6d209b23 | 2875 | typedef struct RTLOCKVALSRCPOS const RT_FAR *PCRTLOCKVALSRCPOS; |
056a1eb7 SF |
2876 | |
2877 | /** @name Special sub-class values. | |
2878 | * The range 16..UINT32_MAX is available to the user, the range 0..15 is | |
2879 | * reserved for the lock validator. In the user range the locks can only be | |
2880 | * taking in ascending order. | |
2881 | * @{ */ | |
2882 | /** Invalid value. */ | |
2883 | #define RTLOCKVAL_SUB_CLASS_INVALID UINT32_C(0) | |
2884 | /** Not allowed to be taken with any other locks in the same class. | |
2885 | * This is the recommended value. */ | |
2886 | #define RTLOCKVAL_SUB_CLASS_NONE UINT32_C(1) | |
2887 | /** Any order is allowed within the class. */ | |
2888 | #define RTLOCKVAL_SUB_CLASS_ANY UINT32_C(2) | |
2889 | /** The first user value. */ | |
2890 | #define RTLOCKVAL_SUB_CLASS_USER UINT32_C(16) | |
2891 | /** @} */ | |
2892 | ||
2893 | ||
2894 | /** | |
2895 | * Digest types. | |
2896 | */ | |
2897 | typedef enum RTDIGESTTYPE | |
2898 | { | |
2899 | /** Invalid digest value. */ | |
2900 | RTDIGESTTYPE_INVALID = 0, | |
2901 | /** Unknown digest type. */ | |
2902 | RTDIGESTTYPE_UNKNOWN, | |
2903 | /** CRC32 checksum. */ | |
2904 | RTDIGESTTYPE_CRC32, | |
2905 | /** CRC64 checksum. */ | |
2906 | RTDIGESTTYPE_CRC64, | |
2907 | /** MD2 checksum (unsafe!). */ | |
2908 | RTDIGESTTYPE_MD2, | |
2909 | /** MD4 checksum (unsafe!!). */ | |
2910 | RTDIGESTTYPE_MD4, | |
2911 | /** MD5 checksum (unsafe!). */ | |
2912 | RTDIGESTTYPE_MD5, | |
2913 | /** SHA-1 checksum (unsafe!). */ | |
2914 | RTDIGESTTYPE_SHA1, | |
2915 | /** SHA-224 checksum. */ | |
2916 | RTDIGESTTYPE_SHA224, | |
2917 | /** SHA-256 checksum. */ | |
2918 | RTDIGESTTYPE_SHA256, | |
2919 | /** SHA-384 checksum. */ | |
2920 | RTDIGESTTYPE_SHA384, | |
2921 | /** SHA-512 checksum. */ | |
2922 | RTDIGESTTYPE_SHA512, | |
2923 | /** SHA-512/224 checksum. */ | |
2924 | RTDIGESTTYPE_SHA512T224, | |
2925 | /** SHA-512/256 checksum. */ | |
2926 | RTDIGESTTYPE_SHA512T256, | |
2927 | /** End of valid types. */ | |
2928 | RTDIGESTTYPE_END, | |
2929 | /** Usual 32-bit type blowup. */ | |
2930 | RTDIGESTTYPE_32BIT_HACK = 0x7fffffff | |
2931 | } RTDIGESTTYPE; | |
2932 | ||
2933 | /** | |
2934 | * Process exit codes. | |
2935 | */ | |
2936 | typedef enum RTEXITCODE | |
2937 | { | |
2938 | /** Success. */ | |
2939 | RTEXITCODE_SUCCESS = 0, | |
2940 | /** General failure. */ | |
2941 | RTEXITCODE_FAILURE = 1, | |
2942 | /** Invalid arguments. */ | |
2943 | RTEXITCODE_SYNTAX = 2, | |
2944 | /** Initialization failure (usually IPRT, but could be used for other | |
2945 | * components as well). */ | |
2946 | RTEXITCODE_INIT = 3, | |
2947 | /** Test skipped. */ | |
2948 | RTEXITCODE_SKIPPED = 4, | |
2949 | /** The end of valid exit codes. */ | |
2950 | RTEXITCODE_END, | |
2951 | /** The usual 32-bit type hack. */ | |
2952 | RTEXITCODE_32BIT_HACK = 0x7fffffff | |
2953 | } RTEXITCODE; | |
2954 | ||
2955 | /** | |
2956 | * Range descriptor. | |
2957 | */ | |
2958 | typedef struct RTRANGE | |
2959 | { | |
2960 | /** Start offset. */ | |
2961 | uint64_t offStart; | |
2962 | /** Range size. */ | |
2963 | size_t cbRange; | |
2964 | } RTRANGE; | |
2965 | /** Pointer to a range descriptor. */ | |
6d209b23 | 2966 | typedef RTRANGE RT_FAR *PRTRANGE; |
056a1eb7 | 2967 | /** Pointer to a readonly range descriptor. */ |
6d209b23 | 2968 | typedef const RTRANGE RT_FAR *PCRTRANGE; |
056a1eb7 SF |
2969 | |
2970 | ||
2971 | /** | |
2972 | * Generic pointer union. | |
2973 | */ | |
2974 | typedef union RTPTRUNION | |
2975 | { | |
2976 | /** Pointer into the void. */ | |
6d209b23 | 2977 | void RT_FAR *pv; |
056a1eb7 SF |
2978 | /** As a signed integer. */ |
2979 | intptr_t i; | |
2980 | /** As an unsigned integer. */ | |
2981 | intptr_t u; | |
2982 | /** Pointer to char value. */ | |
6d209b23 | 2983 | char RT_FAR *pch; |
056a1eb7 | 2984 | /** Pointer to char value. */ |
6d209b23 | 2985 | unsigned char RT_FAR *puch; |
056a1eb7 | 2986 | /** Pointer to a int value. */ |
6d209b23 | 2987 | int RT_FAR *pi; |
056a1eb7 | 2988 | /** Pointer to a unsigned int value. */ |
6d209b23 | 2989 | unsigned int RT_FAR *pu; |
056a1eb7 | 2990 | /** Pointer to a long value. */ |
6d209b23 | 2991 | long RT_FAR *pl; |
056a1eb7 | 2992 | /** Pointer to a long value. */ |
6d209b23 | 2993 | unsigned long RT_FAR *pul; |
056a1eb7 | 2994 | /** Pointer to a 8-bit unsigned value. */ |
6d209b23 | 2995 | uint8_t RT_FAR *pu8; |
056a1eb7 | 2996 | /** Pointer to a 16-bit unsigned value. */ |
6d209b23 | 2997 | uint16_t RT_FAR *pu16; |
056a1eb7 | 2998 | /** Pointer to a 32-bit unsigned value. */ |
6d209b23 | 2999 | uint32_t RT_FAR *pu32; |
056a1eb7 | 3000 | /** Pointer to a 64-bit unsigned value. */ |
6d209b23 | 3001 | uint64_t RT_FAR *pu64; |
056a1eb7 SF |
3002 | /** Pointer to a UTF-16 character. */ |
3003 | PRTUTF16 pwc; | |
3004 | /** Pointer to a UUID character. */ | |
3005 | PRTUUID pUuid; | |
3006 | } RTPTRUNION; | |
3007 | /** Pointer to a pointer union. */ | |
6d209b23 | 3008 | typedef RTPTRUNION RT_FAR *PRTPTRUNION; |
056a1eb7 SF |
3009 | |
3010 | /** | |
3011 | * Generic const pointer union. | |
3012 | */ | |
3013 | typedef union RTCPTRUNION | |
3014 | { | |
3015 | /** Pointer into the void. */ | |
6d209b23 | 3016 | void const RT_FAR *pv; |
056a1eb7 SF |
3017 | /** As a signed integer. */ |
3018 | intptr_t i; | |
3019 | /** As an unsigned integer. */ | |
3020 | intptr_t u; | |
3021 | /** Pointer to char value. */ | |
6d209b23 | 3022 | char const RT_FAR *pch; |
056a1eb7 | 3023 | /** Pointer to char value. */ |
6d209b23 | 3024 | unsigned char const RT_FAR *puch; |
056a1eb7 | 3025 | /** Pointer to a int value. */ |
6d209b23 | 3026 | int const RT_FAR *pi; |
056a1eb7 | 3027 | /** Pointer to a unsigned int value. */ |
6d209b23 | 3028 | unsigned int const RT_FAR *pu; |
056a1eb7 | 3029 | /** Pointer to a long value. */ |
6d209b23 | 3030 | long const RT_FAR *pl; |
056a1eb7 | 3031 | /** Pointer to a long value. */ |
6d209b23 | 3032 | unsigned long const RT_FAR *pul; |
056a1eb7 | 3033 | /** Pointer to a 8-bit unsigned value. */ |
6d209b23 | 3034 | uint8_t const RT_FAR *pu8; |
056a1eb7 | 3035 | /** Pointer to a 16-bit unsigned value. */ |
6d209b23 | 3036 | uint16_t const RT_FAR *pu16; |
056a1eb7 | 3037 | /** Pointer to a 32-bit unsigned value. */ |
6d209b23 | 3038 | uint32_t const RT_FAR *pu32; |
056a1eb7 | 3039 | /** Pointer to a 64-bit unsigned value. */ |
6d209b23 | 3040 | uint64_t const RT_FAR *pu64; |
056a1eb7 SF |
3041 | /** Pointer to a UTF-16 character. */ |
3042 | PCRTUTF16 pwc; | |
3043 | /** Pointer to a UUID character. */ | |
3044 | PCRTUUID pUuid; | |
3045 | } RTCPTRUNION; | |
3046 | /** Pointer to a const pointer union. */ | |
6d209b23 | 3047 | typedef RTCPTRUNION RT_FAR *PRTCPTRUNION; |
056a1eb7 SF |
3048 | |
3049 | /** | |
3050 | * Generic volatile pointer union. | |
3051 | */ | |
3052 | typedef union RTVPTRUNION | |
3053 | { | |
3054 | /** Pointer into the void. */ | |
6d209b23 | 3055 | void volatile RT_FAR *pv; |
056a1eb7 SF |
3056 | /** As a signed integer. */ |
3057 | intptr_t i; | |
3058 | /** As an unsigned integer. */ | |
3059 | intptr_t u; | |
3060 | /** Pointer to char value. */ | |
6d209b23 | 3061 | char volatile RT_FAR *pch; |
056a1eb7 | 3062 | /** Pointer to char value. */ |
6d209b23 | 3063 | unsigned char volatile RT_FAR *puch; |
056a1eb7 | 3064 | /** Pointer to a int value. */ |
6d209b23 | 3065 | int volatile RT_FAR *pi; |
056a1eb7 | 3066 | /** Pointer to a unsigned int value. */ |
6d209b23 | 3067 | unsigned int volatile RT_FAR *pu; |
056a1eb7 | 3068 | /** Pointer to a long value. */ |
6d209b23 | 3069 | long volatile RT_FAR *pl; |
056a1eb7 | 3070 | /** Pointer to a long value. */ |
6d209b23 | 3071 | unsigned long volatile RT_FAR *pul; |
056a1eb7 | 3072 | /** Pointer to a 8-bit unsigned value. */ |
6d209b23 | 3073 | uint8_t volatile RT_FAR *pu8; |
056a1eb7 | 3074 | /** Pointer to a 16-bit unsigned value. */ |
6d209b23 | 3075 | uint16_t volatile RT_FAR *pu16; |
056a1eb7 | 3076 | /** Pointer to a 32-bit unsigned value. */ |
6d209b23 | 3077 | uint32_t volatile RT_FAR *pu32; |
056a1eb7 | 3078 | /** Pointer to a 64-bit unsigned value. */ |
6d209b23 | 3079 | uint64_t volatile RT_FAR *pu64; |
056a1eb7 | 3080 | /** Pointer to a UTF-16 character. */ |
6d209b23 | 3081 | RTUTF16 volatile RT_FAR *pwc; |
056a1eb7 | 3082 | /** Pointer to a UUID character. */ |
6d209b23 | 3083 | RTUUID volatile RT_FAR *pUuid; |
056a1eb7 SF |
3084 | } RTVPTRUNION; |
3085 | /** Pointer to a const pointer union. */ | |
6d209b23 | 3086 | typedef RTVPTRUNION RT_FAR *PRTVPTRUNION; |
056a1eb7 SF |
3087 | |
3088 | /** | |
3089 | * Generic const volatile pointer union. | |
3090 | */ | |
3091 | typedef union RTCVPTRUNION | |
3092 | { | |
3093 | /** Pointer into the void. */ | |
6d209b23 | 3094 | void const volatile RT_FAR *pv; |
056a1eb7 | 3095 | /** As a signed integer. */ |
6d209b23 | 3096 | intptr_t i; |
056a1eb7 | 3097 | /** As an unsigned integer. */ |
6d209b23 | 3098 | intptr_t u; |
056a1eb7 | 3099 | /** Pointer to char value. */ |
6d209b23 | 3100 | char const volatile RT_FAR *pch; |
056a1eb7 | 3101 | /** Pointer to char value. */ |
6d209b23 | 3102 | unsigned char const volatile RT_FAR *puch; |
056a1eb7 | 3103 | /** Pointer to a int value. */ |
6d209b23 | 3104 | int const volatile RT_FAR *pi; |
056a1eb7 | 3105 | /** Pointer to a unsigned int value. */ |
6d209b23 | 3106 | unsigned int const volatile RT_FAR *pu; |
056a1eb7 | 3107 | /** Pointer to a long value. */ |
6d209b23 | 3108 | long const volatile RT_FAR *pl; |
056a1eb7 | 3109 | /** Pointer to a long value. */ |
6d209b23 | 3110 | unsigned long const volatile RT_FAR *pul; |
056a1eb7 | 3111 | /** Pointer to a 8-bit unsigned value. */ |
6d209b23 | 3112 | uint8_t const volatile RT_FAR *pu8; |
056a1eb7 | 3113 | /** Pointer to a 16-bit unsigned value. */ |
6d209b23 | 3114 | uint16_t const volatile RT_FAR *pu16; |
056a1eb7 | 3115 | /** Pointer to a 32-bit unsigned value. */ |
6d209b23 | 3116 | uint32_t const volatile RT_FAR *pu32; |
056a1eb7 | 3117 | /** Pointer to a 64-bit unsigned value. */ |
6d209b23 | 3118 | uint64_t const volatile RT_FAR *pu64; |
056a1eb7 | 3119 | /** Pointer to a UTF-16 character. */ |
6d209b23 | 3120 | RTUTF16 const volatile RT_FAR *pwc; |
056a1eb7 | 3121 | /** Pointer to a UUID character. */ |
6d209b23 | 3122 | RTUUID const volatile RT_FAR *pUuid; |
056a1eb7 SF |
3123 | } RTCVPTRUNION; |
3124 | /** Pointer to a const pointer union. */ | |
6d209b23 | 3125 | typedef RTCVPTRUNION RT_FAR *PRTCVPTRUNION; |
056a1eb7 SF |
3126 | |
3127 | ||
3128 | ||
3129 | #ifdef __cplusplus | |
3130 | /** | |
3131 | * Strict type validation helper class. | |
3132 | * | |
3133 | * See RTErrStrictType and RT_SUCCESS_NP. | |
3134 | */ | |
3135 | class RTErrStrictType2 | |
3136 | { | |
3137 | protected: | |
3138 | /** The status code. */ | |
3139 | int32_t m_rc; | |
3140 | ||
3141 | public: | |
3142 | /** | |
3143 | * Constructor. | |
3144 | * @param rc IPRT style status code. | |
3145 | */ | |
3146 | RTErrStrictType2(int32_t rc) : m_rc(rc) | |
3147 | { | |
3148 | } | |
3149 | ||
3150 | /** | |
3151 | * Get the status code. | |
3152 | * @returns IPRT style status code. | |
3153 | */ | |
3154 | int32_t getValue() const | |
3155 | { | |
3156 | return m_rc; | |
3157 | } | |
3158 | }; | |
3159 | #endif /* __cplusplus */ | |
3160 | /** @} */ | |
3161 | ||
3162 | #endif | |
3163 |