1 /** 2 * WinPR: Windows Portable Runtime 3 * Compiler Specification Strings 4 * 5 * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com> 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 */ 19 20 #ifndef WINPR_SPEC_H 21 #define WINPR_SPEC_H 22 23 #include <winpr/platform.h> 24 25 #ifdef _WIN32 26 27 #include <specstrings.h> 28 #ifndef _COM_Outptr_ 29 #define _COM_Outptr_ 30 #endif 31 32 #else 33 34 #define DUMMYUNIONNAME u 35 #define DUMMYUNIONNAME1 u1 36 #define DUMMYUNIONNAME2 u2 37 #define DUMMYUNIONNAME3 u3 38 #define DUMMYUNIONNAME4 u4 39 #define DUMMYUNIONNAME5 u5 40 #define DUMMYUNIONNAME6 u6 41 #define DUMMYUNIONNAME7 u7 42 #define DUMMYUNIONNAME8 u8 43 44 #define DUMMYSTRUCTNAME s 45 #define DUMMYSTRUCTNAME1 s1 46 #define DUMMYSTRUCTNAME2 s2 47 #define DUMMYSTRUCTNAME3 s3 48 #define DUMMYSTRUCTNAME4 s4 49 #define DUMMYSTRUCTNAME5 s5 50 51 #if (defined(_M_AMD64) || defined(_M_ARM)) && !defined(_WIN32) 52 #define _UNALIGNED __unaligned 53 #else 54 #define _UNALIGNED 55 #endif 56 57 #ifndef DECLSPEC_ALIGN 58 #if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS) 59 #define DECLSPEC_ALIGN(x) __declspec(align(x)) 60 #elif defined(__GNUC__) 61 #define DECLSPEC_ALIGN(x) __attribute__((__aligned__(x))) 62 #else 63 #define DECLSPEC_ALIGN(x) 64 #endif 65 #endif /* DECLSPEC_ALIGN */ 66 67 #ifdef _M_AMD64 68 #define MEMORY_ALLOCATION_ALIGNMENT 16 69 #else 70 #define MEMORY_ALLOCATION_ALIGNMENT 8 71 #endif 72 73 #ifdef __GNUC__ 74 #ifndef __declspec 75 #define __declspec(e) __attribute__((e)) 76 #endif 77 #endif 78 79 #ifndef DECLSPEC_NORETURN 80 #if (defined(__GNUC__) || defined(_MSC_VER) || defined(__clang__)) 81 #define DECLSPEC_NORETURN __declspec(noreturn) 82 #else 83 #define DECLSPEC_NORETURN 84 #endif 85 #endif /* DECLSPEC_NORETURN */ 86 87 /** 88 * Header Annotations: 89 * http://msdn.microsoft.com/en-us/library/windows/desktop/aa383701/ 90 */ 91 92 #define __field_bcount(size) __notnull __byte_writableTo(size) 93 #define __field_ecount(size) __notnull __elem_writableTo(size) 94 #define __post_invalid _Post_ __notvalid 95 96 #define __deref_in 97 #define __deref_in_ecount(size) 98 #define __deref_in_bcount(size) 99 #define __deref_in_opt 100 #define __deref_in_ecount_opt(size) 101 #define __deref_in_bcount_opt(size) 102 #define __deref_opt_in 103 #define __deref_opt_in_ecount(size) 104 #define __deref_opt_in_bcount(size) 105 #define __deref_opt_in_opt 106 #define __deref_opt_in_ecount_opt(size) 107 #define __deref_opt_in_bcount_opt(size) 108 #define __out_awcount(expr, size) 109 #define __in_awcount(expr, size) 110 #define __nullnullterminated 111 #define __in_data_source(src_sym) 112 #define __kernel_entry 113 #define __out_data_source(src_sym) 114 #define __analysis_noreturn 115 #define _Check_return_opt_ 116 #define _Check_return_wat_ 117 118 #define __inner_exceptthat 119 #define __inner_typefix(ctype) 120 #define _Always_(annos) 121 #define _Analysis_noreturn_ 122 #define _Analysis_assume_(expr) 123 #define _At_(target, annos) 124 #define _At_buffer_(target, iter, bound, annos) 125 #define _Check_return_ 126 #define _COM_Outptr_ 127 #define _COM_Outptr_opt_ 128 #define _COM_Outptr_opt_result_maybenull_ 129 #define _COM_Outptr_result_maybenull_ 130 #define _Const_ 131 #define _Deref_in_bound_ 132 #define _Deref_in_range_(lb, ub) 133 #define _Deref_inout_bound_ 134 #define _Deref_inout_z_ 135 #define _Deref_inout_z_bytecap_c_(size) 136 #define _Deref_inout_z_cap_c_(size) 137 #define _Deref_opt_out_ 138 #define _Deref_opt_out_opt_ 139 #define _Deref_opt_out_opt_z_ 140 #define _Deref_opt_out_z_ 141 #define _Deref_out_ 142 #define _Deref_out_bound_ 143 #define _Deref_out_opt_ 144 #define _Deref_out_opt_z_ 145 #define _Deref_out_range_(lb, ub) 146 #define _Deref_out_z_ 147 #define _Deref_out_z_bytecap_c_(size) 148 #define _Deref_out_z_cap_c_(size) 149 #define _Deref_post_bytecap_(size) 150 #define _Deref_post_bytecap_c_(size) 151 #define _Deref_post_bytecap_x_(size) 152 #define _Deref_post_bytecount_(size) 153 #define _Deref_post_bytecount_c_(size) 154 #define _Deref_post_bytecount_x_(size) 155 #define _Deref_post_cap_(size) 156 #define _Deref_post_cap_c_(size) 157 #define _Deref_post_cap_x_(size) 158 #define _Deref_post_count_(size) 159 #define _Deref_post_count_c_(size) 160 #define _Deref_post_count_x_(size) 161 #define _Deref_post_maybenull_ 162 #define _Deref_post_notnull_ 163 #define _Deref_post_null_ 164 #define _Deref_post_opt_bytecap_(size) 165 #define _Deref_post_opt_bytecap_c_(size) 166 #define _Deref_post_opt_bytecap_x_(size) 167 #define _Deref_post_opt_bytecount_(size) 168 #define _Deref_post_opt_bytecount_c_(size) 169 #define _Deref_post_opt_bytecount_x_(size) 170 #define _Deref_post_opt_cap_(size) 171 #define _Deref_post_opt_cap_c_(size) 172 #define _Deref_post_opt_cap_x_(size) 173 #define _Deref_post_opt_count_(size) 174 #define _Deref_post_opt_count_c_(size) 175 #define _Deref_post_opt_count_x_(size) 176 #define _Deref_post_opt_valid_ 177 #define _Deref_post_opt_valid_bytecap_(size) 178 #define _Deref_post_opt_valid_bytecap_c_(size) 179 #define _Deref_post_opt_valid_bytecap_x_(size) 180 #define _Deref_post_opt_valid_cap_(size) 181 #define _Deref_post_opt_valid_cap_c_(size) 182 #define _Deref_post_opt_valid_cap_x_(size) 183 #define _Deref_post_opt_z_ 184 #define _Deref_post_opt_z_bytecap_(size) 185 #define _Deref_post_opt_z_bytecap_c_(size) 186 #define _Deref_post_opt_z_bytecap_x_(size) 187 #define _Deref_post_opt_z_cap_(size) 188 #define _Deref_post_opt_z_cap_c_(size) 189 #define _Deref_post_opt_z_cap_x_(size) 190 #define _Deref_post_valid_ 191 #define _Deref_post_valid_bytecap_(size) 192 #define _Deref_post_valid_bytecap_c_(size) 193 #define _Deref_post_valid_bytecap_x_(size) 194 #define _Deref_post_valid_cap_(size) 195 #define _Deref_post_valid_cap_c_(size) 196 #define _Deref_post_valid_cap_x_(size) 197 #define _Deref_post_z_ 198 #define _Deref_post_z_bytecap_(size) 199 #define _Deref_post_z_bytecap_c_(size) 200 #define _Deref_post_z_bytecap_x_(size) 201 #define _Deref_post_z_cap_(size) 202 #define _Deref_post_z_cap_c_(size) 203 #define _Deref_post_z_cap_x_(size) 204 #define _Deref_pre_bytecap_(size) 205 #define _Deref_pre_bytecap_c_(size) 206 #define _Deref_pre_bytecap_x_(size) 207 #define _Deref_pre_bytecount_(size) 208 #define _Deref_pre_bytecount_c_(size) 209 #define _Deref_pre_bytecount_x_(size) 210 #define _Deref_pre_cap_(size) 211 #define _Deref_pre_cap_c_(size) 212 #define _Deref_pre_cap_x_(size) 213 #define _Deref_pre_count_(size) 214 #define _Deref_pre_count_c_(size) 215 #define _Deref_pre_count_x_(size) 216 #define _Deref_pre_invalid_ 217 #define _Deref_pre_maybenull_ 218 #define _Deref_pre_notnull_ 219 #define _Deref_pre_null_ 220 #define _Deref_pre_opt_bytecap_(size) 221 #define _Deref_pre_opt_bytecap_c_(size) 222 #define _Deref_pre_opt_bytecap_x_(size) 223 #define _Deref_pre_opt_bytecount_(size) 224 #define _Deref_pre_opt_bytecount_c_(size) 225 #define _Deref_pre_opt_bytecount_x_(size) 226 #define _Deref_pre_opt_cap_(size) 227 #define _Deref_pre_opt_cap_c_(size) 228 #define _Deref_pre_opt_cap_x_(size) 229 #define _Deref_pre_opt_count_(size) 230 #define _Deref_pre_opt_count_c_(size) 231 #define _Deref_pre_opt_count_x_(size) 232 #define _Deref_pre_opt_valid_ 233 #define _Deref_pre_opt_valid_bytecap_(size) 234 #define _Deref_pre_opt_valid_bytecap_c_(size) 235 #define _Deref_pre_opt_valid_bytecap_x_(size) 236 #define _Deref_pre_opt_valid_cap_(size) 237 #define _Deref_pre_opt_valid_cap_c_(size) 238 #define _Deref_pre_opt_valid_cap_x_(size) 239 #define _Deref_pre_opt_z_ 240 #define _Deref_pre_opt_z_bytecap_(size) 241 #define _Deref_pre_opt_z_bytecap_c_(size) 242 #define _Deref_pre_opt_z_bytecap_x_(size) 243 #define _Deref_pre_opt_z_cap_(size) 244 #define _Deref_pre_opt_z_cap_c_(size) 245 #define _Deref_pre_opt_z_cap_x_(size) 246 #define _Deref_pre_readonly_ 247 #define _Deref_pre_valid_ 248 #define _Deref_pre_valid_bytecap_(size) 249 #define _Deref_pre_valid_bytecap_c_(size) 250 #define _Deref_pre_valid_bytecap_x_(size) 251 #define _Deref_pre_valid_cap_(size) 252 #define _Deref_pre_valid_cap_c_(size) 253 #define _Deref_pre_valid_cap_x_(size) 254 #define _Deref_pre_writeonly_ 255 #define _Deref_pre_z_ 256 #define _Deref_pre_z_bytecap_(size) 257 #define _Deref_pre_z_bytecap_c_(size) 258 #define _Deref_pre_z_bytecap_x_(size) 259 #define _Deref_pre_z_cap_(size) 260 #define _Deref_pre_z_cap_c_(size) 261 #define _Deref_pre_z_cap_x_(size) 262 #define _Deref_prepost_bytecap_(size) 263 #define _Deref_prepost_bytecap_x_(size) 264 #define _Deref_prepost_bytecount_(size) 265 #define _Deref_prepost_bytecount_x_(size) 266 #define _Deref_prepost_cap_(size) 267 #define _Deref_prepost_cap_x_(size) 268 #define _Deref_prepost_count_(size) 269 #define _Deref_prepost_count_x_(size) 270 #define _Deref_prepost_opt_bytecap_(size) 271 #define _Deref_prepost_opt_bytecap_x_(size) 272 #define _Deref_prepost_opt_bytecount_(size) 273 #define _Deref_prepost_opt_bytecount_x_(size) 274 #define _Deref_prepost_opt_cap_(size) 275 #define _Deref_prepost_opt_cap_x_(size) 276 #define _Deref_prepost_opt_count_(size) 277 #define _Deref_prepost_opt_count_x_(size) 278 #define _Deref_prepost_opt_valid_ 279 #define _Deref_prepost_opt_valid_bytecap_(size) 280 #define _Deref_prepost_opt_valid_bytecap_x_(size) 281 #define _Deref_prepost_opt_valid_cap_(size) 282 #define _Deref_prepost_opt_valid_cap_x_(size) 283 #define _Deref_prepost_opt_z_ 284 #define _Deref_prepost_opt_z_bytecap_(size) 285 #define _Deref_prepost_opt_z_cap_(size) 286 #define _Deref_prepost_valid_ 287 #define _Deref_prepost_valid_bytecap_(size) 288 #define _Deref_prepost_valid_bytecap_x_(size) 289 #define _Deref_prepost_valid_cap_(size) 290 #define _Deref_prepost_valid_cap_x_(size) 291 #define _Deref_prepost_z_ 292 #define _Deref_prepost_z_bytecap_(size) 293 #define _Deref_prepost_z_cap_(size) 294 #define _Deref_ret_bound_ 295 #define _Deref_ret_opt_z_ 296 #define _Deref_ret_range_(lb, ub) 297 #define _Deref_ret_z_ 298 #define _Deref2_pre_readonly_ 299 #define _Field_range_(min, max) 300 #define _Field_size_(size) 301 #define _Field_size_bytes_(size) 302 #define _Field_size_bytes_full_(size) 303 #define _Field_size_bytes_full_opt_(size) 304 #define _Field_size_bytes_opt_(size) 305 #define _Field_size_bytes_part_(size, count) 306 #define _Field_size_bytes_part_opt_(size, count) 307 #define _Field_size_full_(size) 308 #define _Field_size_full_opt_(size) 309 #define _Field_size_opt_(size) 310 #define _Field_size_part_(size, count) 311 #define _Field_size_part_opt_(size, count) 312 #define _Field_z_ 313 #define _Function_class_(x) 314 #define _Group_(annos) 315 #define _In_ 316 #define _In_bound_ 317 #define _In_bytecount_(size) 318 #define _In_bytecount_c_(size) 319 #define _In_bytecount_x_(size) 320 #define _In_count_(size) 321 #define _In_count_c_(size) 322 #define _In_count_x_(size) 323 #define _In_defensive_(annotes) 324 #define _In_opt_ 325 #define _In_opt_bytecount_(size) 326 #define _In_opt_bytecount_c_(size) 327 #define _In_opt_bytecount_x_(size) 328 #define _In_opt_count_(size) 329 #define _In_opt_count_c_(size) 330 #define _In_opt_count_x_(size) 331 #define _In_opt_ptrdiff_count_(size) 332 #define _In_opt_z_ 333 #define _In_opt_z_bytecount_(size) 334 #define _In_opt_z_bytecount_c_(size) 335 #define _In_opt_z_count_(size) 336 #define _In_opt_z_count_c_(size) 337 #define _In_ptrdiff_count_(size) 338 #define _In_range_(lb, ub) 339 #define _In_reads_(size) 340 #define _In_reads_bytes_(size) 341 #define _In_reads_bytes_opt_(size) 342 #define _In_reads_opt_(size) 343 #define _In_reads_opt_z_(size) 344 #define _In_reads_or_z_(size) 345 #define _In_reads_to_ptr_(ptr) 346 #define _In_reads_to_ptr_opt_(ptr) 347 #define _In_reads_to_ptr_opt_z_(ptr) 348 #define _In_reads_to_ptr_z_(ptr) 349 #define _In_reads_z_(size) 350 #define _In_z_ 351 #define _In_z_bytecount_(size) 352 #define _In_z_bytecount_c_(size) 353 #define _In_z_count_(size) 354 #define _In_z_count_c_(size) 355 #define _Inout_ 356 #define _Inout_bytecap_(size) 357 #define _Inout_bytecap_c_(size) 358 #define _Inout_bytecap_x_(size) 359 #define _Inout_bytecount_(size) 360 #define _Inout_bytecount_c_(size) 361 #define _Inout_bytecount_x_(size) 362 #define _Inout_cap_(size) 363 #define _Inout_cap_c_(size) 364 #define _Inout_cap_x_(size) 365 #define _Inout_count_(size) 366 #define _Inout_count_c_(size) 367 #define _Inout_count_x_(size) 368 #define _Inout_defensive_(annotes) 369 #define _Inout_opt_ 370 #define _Inout_opt_bytecap_(size) 371 #define _Inout_opt_bytecap_c_(size) 372 #define _Inout_opt_bytecap_x_(size) 373 #define _Inout_opt_bytecount_(size) 374 #define _Inout_opt_bytecount_c_(size) 375 #define _Inout_opt_bytecount_x_(size) 376 #define _Inout_opt_cap_(size) 377 #define _Inout_opt_cap_c_(size) 378 #define _Inout_opt_cap_x_(size) 379 #define _Inout_opt_count_(size) 380 #define _Inout_opt_count_c_(size) 381 #define _Inout_opt_count_x_(size) 382 #define _Inout_opt_ptrdiff_count_(size) 383 #define _Inout_opt_z_ 384 #define _Inout_opt_z_bytecap_(size) 385 #define _Inout_opt_z_bytecap_c_(size) 386 #define _Inout_opt_z_bytecap_x_(size) 387 #define _Inout_opt_z_bytecount_(size) 388 #define _Inout_opt_z_bytecount_c_(size) 389 #define _Inout_opt_z_cap_(size) 390 #define _Inout_opt_z_cap_c_(size) 391 #define _Inout_opt_z_cap_x_(size) 392 #define _Inout_opt_z_count_(size) 393 #define _Inout_opt_z_count_c_(size) 394 #define _Inout_ptrdiff_count_(size) 395 #define _Inout_updates_(size) 396 #define _Inout_updates_all_(size) 397 #define _Inout_updates_all_opt_(size) 398 #define _Inout_updates_bytes_(size) 399 #define _Inout_updates_bytes_all_(size) 400 #define _Inout_updates_bytes_all_opt_(size) 401 #define _Inout_updates_bytes_opt_(size) 402 #define _Inout_updates_bytes_to_(size, count) 403 #define _Inout_updates_bytes_to_opt_(size, count) 404 #define _Inout_updates_opt_(size) 405 #define _Inout_updates_opt_z_(size) 406 #define _Inout_updates_to_(size, count) 407 #define _Inout_updates_to_opt_(size, count) 408 #define _Inout_updates_z_(size) 409 #define _Inout_z_ 410 #define _Inout_z_bytecap_(size) 411 #define _Inout_z_bytecap_c_(size) 412 #define _Inout_z_bytecap_x_(size) 413 #define _Inout_z_bytecount_(size) 414 #define _Inout_z_bytecount_c_(size) 415 #define _Inout_z_cap_(size) 416 #define _Inout_z_cap_c_(size) 417 #define _Inout_z_cap_x_(size) 418 #define _Inout_z_count_(size) 419 #define _Inout_z_count_c_(size) 420 #define _Interlocked_operand_ 421 #define _Literal_ 422 #define _Maybenull_ 423 #define _Maybevalid_ 424 #define _Maybe_raises_SEH_exception 425 #define _Must_inspect_result_ 426 #define _Notliteral_ 427 #define _Notnull_ 428 #define _Notref_ 429 #define _Notvalid_ 430 #define _Null_ 431 #define _Null_terminated_ 432 #define _NullNull_terminated_ 433 #define _On_failure_(annos) 434 #define _Out_ 435 #define _Out_bound_ 436 #define _Out_bytecap_(size) 437 #define _Out_bytecap_c_(size) 438 #define _Out_bytecap_post_bytecount_(cap, count) 439 #define _Out_bytecap_x_(size) 440 #define _Out_bytecapcount_(capcount) 441 #define _Out_bytecapcount_x_(capcount) 442 #define _Out_cap_(size) 443 #define _Out_cap_c_(size) 444 #define _Out_cap_m_(mult, size) 445 #define _Out_cap_post_count_(cap, count) 446 #define _Out_cap_x_(size) 447 #define _Out_capcount_(capcount) 448 #define _Out_capcount_x_(capcount) 449 #define _Out_defensive_(annotes) 450 #define _Out_opt_ 451 #define _Out_opt_bytecap_(size) 452 #define _Out_opt_bytecap_c_(size) 453 #define _Out_opt_bytecap_post_bytecount_(cap, count) 454 #define _Out_opt_bytecap_x_(size) 455 #define _Out_opt_bytecapcount_(capcount) 456 #define _Out_opt_bytecapcount_x_(capcount) 457 #define _Out_opt_cap_(size) 458 #define _Out_opt_cap_c_(size) 459 #define _Out_opt_cap_m_(mult, size) 460 #define _Out_opt_cap_post_count_(cap, count) 461 #define _Out_opt_cap_x_(size) 462 #define _Out_opt_capcount_(capcount) 463 #define _Out_opt_capcount_x_(capcount) 464 #define _Out_opt_ptrdiff_cap_(size) 465 #define _Out_opt_z_bytecap_(size) 466 #define _Out_opt_z_bytecap_c_(size) 467 #define _Out_opt_z_bytecap_post_bytecount_(cap, count) 468 #define _Out_opt_z_bytecap_x_(size) 469 #define _Out_opt_z_bytecapcount_(capcount) 470 #define _Out_opt_z_cap_(size) 471 #define _Out_opt_z_cap_c_(size) 472 #define _Out_opt_z_cap_m_(mult, size) 473 #define _Out_opt_z_cap_post_count_(cap, count) 474 #define _Out_opt_z_cap_x_(size) 475 #define _Out_opt_z_capcount_(capcount) 476 #define _Out_ptrdiff_cap_(size) 477 #define _Out_range_(lb, ub) 478 #define _Out_writes_(size) 479 #define _Out_writes_all_(size) 480 #define _Out_writes_all_opt_(size) 481 #define _Out_writes_bytes_(size) 482 #define _Out_writes_bytes_all_(size) 483 #define _Out_writes_bytes_all_opt_(size) 484 #define _Out_writes_bytes_opt_(size) 485 #define _Out_writes_bytes_to_(size, count) 486 #define _Out_writes_bytes_to_opt_(size, count) 487 #define _Out_writes_opt_(size) 488 #define _Out_writes_opt_z_(size) 489 #define _Out_writes_to_(size, count) 490 #define _Out_writes_to_opt_(size, count) 491 #define _Out_writes_to_ptr_(ptr) 492 #define _Out_writes_to_ptr_opt_(ptr) 493 #define _Out_writes_to_ptr_opt_z_(ptr) 494 #define _Out_writes_to_ptr_z_(ptr) 495 #define _Out_writes_z_(size) 496 #define _Out_z_bytecap_(size) 497 #define _Out_z_bytecap_c_(size) 498 #define _Out_z_bytecap_post_bytecount_(cap, count) 499 #define _Out_z_bytecap_x_(size) 500 #define _Out_z_bytecapcount_(capcount) 501 #define _Out_z_cap_(size) 502 #define _Out_z_cap_c_(size) 503 #define _Out_z_cap_m_(mult, size) 504 #define _Out_z_cap_post_count_(cap, count) 505 #define _Out_z_cap_x_(size) 506 #define _Out_z_capcount_(capcount) 507 #define _Outptr_ 508 #define _Outptr_opt_ 509 #define _Outptr_opt_result_buffer_(size) 510 #define _Outptr_opt_result_buffer_all_(size) 511 #define _Outptr_opt_result_buffer_all_maybenull_(size) 512 #define _Outptr_opt_result_buffer_maybenull_(size) 513 #define _Outptr_opt_result_buffer_to_(size, count) 514 #define _Outptr_opt_result_buffer_to_maybenull_(size, count) 515 #define _Outptr_opt_result_bytebuffer_(size) 516 #define _Outptr_opt_result_bytebuffer_all_(size) 517 #define _Outptr_opt_result_bytebuffer_all_maybenull_(size) 518 #define _Outptr_opt_result_bytebuffer_maybenull_(size) 519 #define _Outptr_opt_result_bytebuffer_to_(size, count) 520 #define _Outptr_opt_result_bytebuffer_to_maybenull_(size, count) 521 #define _Outptr_opt_result_maybenull_ 522 #define _Outptr_opt_result_maybenull_z_ 523 #define _Outptr_opt_result_nullonfailure_ 524 #define _Outptr_opt_result_z_ 525 #define _Outptr_result_buffer_(size) 526 #define _Outptr_result_buffer_all_(size) 527 #define _Outptr_result_buffer_all_maybenull_(size) 528 #define _Outptr_result_buffer_maybenull_(size) 529 #define _Outptr_result_buffer_to_(size, count) 530 #define _Outptr_result_buffer_to_maybenull_(size, count) 531 #define _Outptr_result_bytebuffer_(size) 532 #define _Outptr_result_bytebuffer_all_(size) 533 #define _Outptr_result_bytebuffer_all_maybenull_(size) 534 #define _Outptr_result_bytebuffer_maybenull_(size) 535 #define _Outptr_result_bytebuffer_to_(size, count) 536 #define _Outptr_result_bytebuffer_to_maybenull_(size, count) 537 #define _Outptr_result_maybenull_ 538 #define _Outptr_result_maybenull_z_ 539 #define _Outptr_result_nullonfailure_ 540 #define _Outptr_result_z_ 541 #define _Outref_ 542 #define _Outref_result_buffer_(size) 543 #define _Outref_result_buffer_all_(size) 544 #define _Outref_result_buffer_all_maybenull_(size) 545 #define _Outref_result_buffer_maybenull_(size) 546 #define _Outref_result_buffer_to_(size, count) 547 #define _Outref_result_buffer_to_maybenull_(size, count) 548 #define _Outref_result_bytebuffer_(size) 549 #define _Outref_result_bytebuffer_all_(size) 550 #define _Outref_result_bytebuffer_all_maybenull_(size) 551 #define _Outref_result_bytebuffer_maybenull_(size) 552 #define _Outref_result_bytebuffer_to_(size, count) 553 #define _Outref_result_bytebuffer_to_maybenull_(size, count) 554 #define _Outref_result_maybenull_ 555 #define _Outref_result_nullonfailure_ 556 #define _Points_to_data_ 557 #define _Post_ 558 #define _Post_bytecap_(size) 559 #define _Post_bytecount_(size) 560 #define _Post_bytecount_c_(size) 561 #define _Post_bytecount_x_(size) 562 #define _Post_cap_(size) 563 #define _Post_count_(size) 564 #define _Post_count_c_(size) 565 #define _Post_count_x_(size) 566 #define _Post_defensive_ 567 #define _Post_equal_to_(expr) 568 #define _Post_invalid_ 569 #define _Post_maybenull_ 570 #define _Post_maybez_ 571 #define _Post_notnull_ 572 #define _Post_null_ 573 #define _Post_ptr_invalid_ 574 #define _Post_readable_byte_size_(size) 575 #define _Post_readable_size_(size) 576 #define _Post_satisfies_(cond) 577 #define _Post_valid_ 578 #define _Post_writable_byte_size_(size) 579 #define _Post_writable_size_(size) 580 #define _Post_z_ 581 #define _Post_z_bytecount_(size) 582 #define _Post_z_bytecount_c_(size) 583 #define _Post_z_bytecount_x_(size) 584 #define _Post_z_count_(size) 585 #define _Post_z_count_c_(size) 586 #define _Post_z_count_x_(size) 587 #define _Pre_ 588 #define _Pre_bytecap_(size) 589 #define _Pre_bytecap_c_(size) 590 #define _Pre_bytecap_x_(size) 591 #define _Pre_bytecount_(size) 592 #define _Pre_bytecount_c_(size) 593 #define _Pre_bytecount_x_(size) 594 #define _Pre_cap_(size) 595 #define _Pre_cap_c_(size) 596 #define _Pre_cap_c_one_ 597 #define _Pre_cap_for_(param) 598 #define _Pre_cap_m_(mult, size) 599 #define _Pre_cap_x_(size) 600 #define _Pre_count_(size) 601 #define _Pre_count_c_(size) 602 #define _Pre_count_x_(size) 603 #define _Pre_defensive_ 604 #define _Pre_equal_to_(expr) 605 #define _Pre_invalid_ 606 #define _Pre_maybenull_ 607 #define _Pre_notnull_ 608 #define _Pre_null_ 609 #define _Pre_opt_bytecap_(size) 610 #define _Pre_opt_bytecap_c_(size) 611 #define _Pre_opt_bytecap_x_(size) 612 #define _Pre_opt_bytecount_(size) 613 #define _Pre_opt_bytecount_c_(size) 614 #define _Pre_opt_bytecount_x_(size) 615 #define _Pre_opt_cap_(size) 616 #define _Pre_opt_cap_c_(size) 617 #define _Pre_opt_cap_c_one_ 618 #define _Pre_opt_cap_for_(param) 619 #define _Pre_opt_cap_m_(mult, size) 620 #define _Pre_opt_cap_x_(size) 621 #define _Pre_opt_count_(size) 622 #define _Pre_opt_count_c_(size) 623 #define _Pre_opt_count_x_(size) 624 #define _Pre_opt_ptrdiff_cap_(ptr) 625 #define _Pre_opt_ptrdiff_count_(ptr) 626 #define _Pre_opt_valid_ 627 #define _Pre_opt_valid_bytecap_(size) 628 #define _Pre_opt_valid_bytecap_c_(size) 629 #define _Pre_opt_valid_bytecap_x_(size) 630 #define _Pre_opt_valid_cap_(size) 631 #define _Pre_opt_valid_cap_c_(size) 632 #define _Pre_opt_valid_cap_x_(size) 633 #define _Pre_opt_z_ 634 #define _Pre_opt_z_bytecap_(size) 635 #define _Pre_opt_z_bytecap_c_(size) 636 #define _Pre_opt_z_bytecap_x_(size) 637 #define _Pre_opt_z_cap_(size) 638 #define _Pre_opt_z_cap_c_(size) 639 #define _Pre_opt_z_cap_x_(size) 640 #define _Pre_ptrdiff_cap_(ptr) 641 #define _Pre_ptrdiff_count_(ptr) 642 #define _Pre_readable_byte_size_(size) 643 #define _Pre_readable_size_(size) 644 #define _Pre_readonly_ 645 #define _Pre_satisfies_(cond) 646 #define _Pre_unknown_ 647 #define _Pre_valid_ 648 #define _Pre_valid_bytecap_(size) 649 #define _Pre_valid_bytecap_c_(size) 650 #define _Pre_valid_bytecap_x_(size) 651 #define _Pre_valid_cap_(size) 652 #define _Pre_valid_cap_c_(size) 653 #define _Pre_valid_cap_x_(size) 654 #define _Pre_writable_byte_size_(size) 655 #define _Pre_writable_size_(size) 656 #define _Pre_writeonly_ 657 #define _Pre_z_ 658 #define _Pre_z_bytecap_(size) 659 #define _Pre_z_bytecap_c_(size) 660 #define _Pre_z_bytecap_x_(size) 661 #define _Pre_z_cap_(size) 662 #define _Pre_z_cap_c_(size) 663 #define _Pre_z_cap_x_(size) 664 #define _Prepost_bytecount_(size) 665 #define _Prepost_bytecount_c_(size) 666 #define _Prepost_bytecount_x_(size) 667 #define _Prepost_count_(size) 668 #define _Prepost_count_c_(size) 669 #define _Prepost_count_x_(size) 670 #define _Prepost_opt_bytecount_(size) 671 #define _Prepost_opt_bytecount_c_(size) 672 #define _Prepost_opt_bytecount_x_(size) 673 #define _Prepost_opt_count_(size) 674 #define _Prepost_opt_count_c_(size) 675 #define _Prepost_opt_count_x_(size) 676 #define _Prepost_opt_valid_ 677 #define _Prepost_opt_z_ 678 #define _Prepost_valid_ 679 #define _Prepost_z_ 680 #define _Printf_format_string_ 681 #define _Raises_SEH_exception_ 682 #define _Maybe_raises_SEH_exception_ 683 #define _Readable_bytes_(size) 684 #define _Readable_elements_(size) 685 #define _Reserved_ 686 #define _Result_nullonfailure_ 687 #define _Result_zeroonfailure_ 688 #define __inner_callback 689 #define _Ret_ 690 #define _Ret_bound_ 691 #define _Ret_bytecap_(size) 692 #define _Ret_bytecap_c_(size) 693 #define _Ret_bytecap_x_(size) 694 #define _Ret_bytecount_(size) 695 #define _Ret_bytecount_c_(size) 696 #define _Ret_bytecount_x_(size) 697 #define _Ret_cap_(size) 698 #define _Ret_cap_c_(size) 699 #define _Ret_cap_x_(size) 700 #define _Ret_count_(size) 701 #define _Ret_count_c_(size) 702 #define _Ret_count_x_(size) 703 #define _Ret_maybenull_ 704 #define _Ret_maybenull_z_ 705 #define _Ret_notnull_ 706 #define _Ret_null_ 707 #define _Ret_opt_ 708 #define _Ret_opt_bytecap_(size) 709 #define _Ret_opt_bytecap_c_(size) 710 #define _Ret_opt_bytecap_x_(size) 711 #define _Ret_opt_bytecount_(size) 712 #define _Ret_opt_bytecount_c_(size) 713 #define _Ret_opt_bytecount_x_(size) 714 #define _Ret_opt_cap_(size) 715 #define _Ret_opt_cap_c_(size) 716 #define _Ret_opt_cap_x_(size) 717 #define _Ret_opt_count_(size) 718 #define _Ret_opt_count_c_(size) 719 #define _Ret_opt_count_x_(size) 720 #define _Ret_opt_valid_ 721 #define _Ret_opt_z_ 722 #define _Ret_opt_z_bytecap_(size) 723 #define _Ret_opt_z_bytecount_(size) 724 #define _Ret_opt_z_cap_(size) 725 #define _Ret_opt_z_count_(size) 726 #define _Ret_range_(lb, ub) 727 #define _Ret_valid_ 728 #define _Ret_writes_(size) 729 #define _Ret_writes_bytes_(size) 730 #define _Ret_writes_bytes_maybenull_(size) 731 #define _Ret_writes_bytes_to_(size, count) 732 #define _Ret_writes_bytes_to_maybenull_(size, count) 733 #define _Ret_writes_maybenull_(size) 734 #define _Ret_writes_maybenull_z_(size) 735 #define _Ret_writes_to_(size, count) 736 #define _Ret_writes_to_maybenull_(size, count) 737 #define _Ret_writes_z_(size) 738 #define _Ret_z_ 739 #define _Ret_z_bytecap_(size) 740 #define _Ret_z_bytecount_(size) 741 #define _Ret_z_cap_(size) 742 #define _Ret_z_count_(size) 743 #define _Return_type_success_(expr) 744 #define _Scanf_format_string_ 745 #define _Scanf_s_format_string_ 746 #define _Struct_size_bytes_(size) 747 #define _Success_(expr) 748 #define _Unchanged_(e) 749 #define _Use_decl_annotations_ 750 #define _Valid_ 751 #define _When_(expr, annos) 752 #define _Writable_bytes_(size) 753 #define _Writable_elements_(size) 754 755 #define __bcount(size) 756 #define __bcount_opt(size) 757 #define __deref_bcount(size) 758 #define __deref_bcount_opt(size) 759 #define __deref_ecount(size) 760 #define __deref_ecount_opt(size) 761 #define __deref_in 762 #define __deref_in_bcount(size) 763 #define __deref_in_bcount_opt(size) 764 #define __deref_in_ecount(size) 765 #define __deref_in_ecount_opt(size) 766 #define __deref_in_opt 767 #define __deref_inout 768 #define __deref_inout_bcount(size) 769 #define __deref_inout_bcount_full(size) 770 #define __deref_inout_bcount_full_opt(size) 771 #define __deref_inout_bcount_opt(size) 772 #define __deref_inout_bcount_part(size, length) 773 #define __deref_inout_bcount_part_opt(size, length) 774 #define __deref_inout_ecount(size) 775 #define __deref_inout_ecount_full(size) 776 #define __deref_inout_ecount_full_opt(size) 777 #define __deref_inout_ecount_opt(size) 778 #define __deref_inout_ecount_part(size, length) 779 #define __deref_inout_ecount_part_opt(size, length) 780 #define __deref_inout_opt 781 #define __deref_opt_bcount(size) 782 #define __deref_opt_bcount_opt(size) 783 #define __deref_opt_ecount(size) 784 #define __deref_opt_ecount_opt(size) 785 #define __deref_opt_in 786 #define __deref_opt_in_bcount(size) 787 #define __deref_opt_in_bcount_opt(size) 788 #define __deref_opt_in_ecount(size) 789 #define __deref_opt_in_ecount_opt(size) 790 #define __deref_opt_in_opt 791 #define __deref_opt_inout 792 #define __deref_opt_inout_bcount(size) 793 #define __deref_opt_inout_bcount_full(size) 794 #define __deref_opt_inout_bcount_full_opt(size) 795 #define __deref_opt_inout_bcount_opt(size) 796 #define __deref_opt_inout_bcount_part(size, length) 797 #define __deref_opt_inout_bcount_part_opt(size, length) 798 #define __deref_opt_inout_ecount(size) 799 #define __deref_opt_inout_ecount_full(size) 800 #define __deref_opt_inout_ecount_full_opt(size) 801 #define __deref_opt_inout_ecount_opt(size) 802 #define __deref_opt_inout_ecount_part(size, length) 803 #define __deref_opt_inout_ecount_part_opt(size, length) 804 #define __deref_opt_inout_opt 805 #define __deref_opt_out 806 #define __deref_opt_out_bcount(size) 807 #define __deref_opt_out_bcount_full(size) 808 #define __deref_opt_out_bcount_full_opt(size) 809 #define __deref_opt_out_bcount_opt(size) 810 #define __deref_opt_out_bcount_part(size, length) 811 #define __deref_opt_out_bcount_part_opt(size, length) 812 #define __deref_opt_out_ecount(size) 813 #define __deref_opt_out_ecount_full(size) 814 #define __deref_opt_out_ecount_full_opt(size) 815 #define __deref_opt_out_ecount_opt(size) 816 #define __deref_opt_out_ecount_part(size, length) 817 #define __deref_opt_out_ecount_part_opt(size, length) 818 #define __deref_opt_out_opt 819 #define __deref_out 820 #define __deref_out_bcount(size) 821 #define __deref_out_bcount_full(size) 822 #define __deref_out_bcount_full_opt(size) 823 #define __deref_out_bcount_opt(size) 824 #define __deref_out_bcount_part(size, length) 825 #define __deref_out_bcount_part_opt(size, length) 826 #define __deref_out_ecount(size) 827 #define __deref_out_ecount_full(size) 828 #define __deref_out_ecount_full_opt(size) 829 #define __deref_out_ecount_opt(size) 830 #define __deref_out_ecount_part(size, length) 831 #define __deref_out_ecount_part_opt(size, length) 832 #define __deref_out_opt 833 #define __ecount(size) 834 #define __ecount_opt(size) 835 //#define __in /* Conflicts with libstdc++ header macros */ 836 #define __in_bcount(size) 837 #define __in_bcount_opt(size) 838 #define __in_ecount(size) 839 #define __in_ecount_opt(size) 840 #define __in_opt 841 #define __inout 842 #define __inout_bcount(size) 843 #define __inout_bcount_full(size) 844 #define __inout_bcount_full_opt(size) 845 #define __inout_bcount_opt(size) 846 #define __inout_bcount_part(size, length) 847 #define __inout_bcount_part_opt(size, length) 848 #define __inout_ecount(size) 849 #define __inout_ecount_full(size) 850 #define __inout_ecount_full_opt(size) 851 #define __inout_ecount_opt(size) 852 #define __inout_ecount_part(size, length) 853 #define __inout_ecount_part_opt(size, length) 854 #define __inout_opt 855 //#define __out /* Conflicts with libstdc++ header macros */ 856 #define __out_bcount(size) 857 #define __out_bcount_full(size) 858 #define __out_bcount_full_opt(size) 859 #define __out_bcount_opt(size) 860 #define __out_bcount_part(size, length) 861 #define __out_bcount_part_opt(size, length) 862 #define __out_ecount(size) 863 #define __out_ecount_full(size) 864 #define __out_ecount_full_opt(size) 865 #define __out_ecount_opt(size) 866 #define __out_ecount_part(size, length) 867 #define __out_ecount_part_opt(size, length) 868 #define __out_opt 869 870 #define __blocksOn(resource) 871 #define __callback 872 #define __checkReturn 873 #define __format_string 874 #define __in_awcount(expr, size) 875 #define __nullnullterminated 876 #define __nullterminated 877 #define __out_awcount(expr, size) 878 #define __override 879 //#define __reserved /* Conflicts with header included by CarbonCore.h on OS X */ 880 #define __success(expr) 881 #define __typefix(ctype) 882 883 #ifndef _countof 884 #ifndef __cplusplus 885 #define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0])) 886 #else 887 extern "C++" 888 { 889 template <typename _CountofType, size_t _SizeOfArray> 890 char (*__countof_helper(_CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray]; 891 #define _countof(_Array) sizeof(*__countof_helper(_Array)) 892 } 893 #endif 894 #endif 895 896 /** 897 * RTL Definitions 898 */ 899 900 #define MINCHAR 0x80 901 #define MAXCHAR 0x7F 902 903 #ifndef MINSHORT 904 #define MINSHORT 0x8000 905 #endif 906 907 #ifndef MAXSHORT 908 #define MAXSHORT 0x7FFF 909 #endif 910 911 #define MINLONG 0x80000000 912 #define MAXLONG 0x7FFFFFFF 913 #define MAXBYTE 0xFF 914 #define MAXWORD 0xFFFF 915 #define MAXDWORD 0xFFFFFFFF 916 917 #define FIELD_OFFSET(type, field) ((LONG)(LONG_PTR) & (((type*)0)->field)) 918 919 #define RTL_FIELD_SIZE(type, field) (sizeof(((type*)0)->field)) 920 921 #define RTL_SIZEOF_THROUGH_FIELD(type, field) \ 922 (FIELD_OFFSET(type, field) + RTL_FIELD_SIZE(type, field)) 923 924 #define RTL_CONTAINS_FIELD(Struct, Size, Field) \ 925 ((((PCHAR)(&(Struct)->Field)) + sizeof((Struct)->Field)) <= (((PCHAR)(Struct)) + (Size))) 926 927 #define RTL_NUMBER_OF_V1(A) (sizeof(A) / sizeof((A)[0])) 928 #define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A) 929 930 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A) 931 932 #define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A) 933 #define _ARRAYSIZE(A) RTL_NUMBER_OF_V1(A) 934 935 #define RTL_FIELD_TYPE(type, field) (((type*)0)->field) 936 937 #define RTL_NUMBER_OF_FIELD(type, field) (RTL_NUMBER_OF(RTL_FIELD_TYPE(type, field))) 938 939 #define RTL_PADDING_BETWEEN_FIELDS(T, F1, F2) \ 940 ((FIELD_OFFSET(T, F2) > FIELD_OFFSET(T, F1)) \ 941 ? (FIELD_OFFSET(T, F2) - FIELD_OFFSET(T, F1) - RTL_FIELD_SIZE(T, F1)) \ 942 : (FIELD_OFFSET(T, F1) - FIELD_OFFSET(T, F2) - RTL_FIELD_SIZE(T, F2))) 943 944 #if defined(__cplusplus) 945 #define RTL_CONST_CAST(type) const_cast<type> 946 #else 947 #define RTL_CONST_CAST(type) (type) 948 #endif 949 950 #define RTL_BITS_OF(sizeOfArg) (sizeof(sizeOfArg) * 8) 951 952 #define RTL_BITS_OF_FIELD(type, field) (RTL_BITS_OF(RTL_FIELD_TYPE(type, field))) 953 954 #define CONTAINING_RECORD(address, type, field) \ 955 ((type*)((PCHAR)(address) - (ULONG_PTR)(&((type*)0)->field))) 956 957 #endif 958 959 #if defined(_WIN32) || defined(__CYGWIN__) 960 #ifdef __GNUC__ 961 #define DECLSPEC_EXPORT __attribute__((dllexport)) 962 #define DECLSPEC_IMPORT __attribute__((dllimport)) 963 #else 964 #define DECLSPEC_EXPORT __declspec(dllexport) 965 #define DECLSPEC_IMPORT __declspec(dllimport) 966 #endif 967 #else 968 #if defined(__GNUC__) && __GNUC__ >= 4 969 #define DECLSPEC_EXPORT __attribute__((visibility("default"))) 970 #define DECLSPEC_IMPORT 971 #else 972 #define DECLSPEC_EXPORT 973 #define DECLSPEC_IMPORT 974 #endif 975 #endif 976 977 #endif /* WINPR_SPEC_H */ 978