1 /** 2 * Salieri 3 * v1 4 * 5 * Salieri is a header which contains definitions for the Microsoft 6 * source-code annotation language (SAL). It is *not* an 7 * implementation of SAL; that's for compilers and static analyzers. 8 * For the most part we just define macros to nothing. 9 * 10 * The goal is to allow projects to use SAL without creating a hard 11 * dependency on it (i.e., you can still use compilers other than 12 * MSVC). Simply include `salieri.h`, which you can/should distribute 13 * with your code, instead of `<sal.h>`. 14 * 15 * Multiple copies of Salieri can be included safely, even different 16 * versions. Including a newer version will simiply replace older 17 * definitions with newer ones, and including older versions will have 18 * no effect. 19 * 20 * I don't think anything in here is copyrightable, but just in case: 21 * 22 * To the extent possible under law, the author(s) have dedicated 23 * all copyright and related and neighboring rights to this software 24 * to the public domain worldwide. This software is distributed 25 * without any warranty. 26 * 27 * For details, see <http://creativecommons.org/publicdomain/zero/1.0/>. 28 */ 29 30 #if !defined(SALIERI_VERSION) || (SALIERI_VERSION < 1) 31 32 /* TODO: figure out when <sal.h> first appeared. */ 33 #if defined(_MSC_VER) 34 # include <sal.h> 35 #endif 36 37 /* The main concern for the implementation is that we don't want to 38 * replace annotations from <sal.h>, but we *do* want to replace 39 * annotations from older versions of Salieri. To keep track of 40 * everything, when we (Salieri) define a SAL annotation, we also 41 * define SALIERI_DEFINED_${annotation} (with the leading and trailing 42 * '-' stripped). Then, before redefining an annotation macro we 43 * check to make sure SALIERI_DEFINED_${annontation} is defined. 44 * 45 * This means you can safely use Salieri in a public header in your 46 * project. 47 */ 48 49 /* Function Parameters & Return Value 50 * 51 * https://msdn.microsoft.com/en-us/library/hh916382.aspx 52 *****/ 53 54 /* Pointer Parameters */ 55 56 #if defined(_In_) && defined(SALIERI_DEFINED_In) 57 # undef _In_ 58 #endif 59 #if !defined(_In_) 60 # define _In_ 61 # define SALIERI_DEFINED_In 62 #endif 63 64 #if defined(__in_bcount) && defined(SALIERI_DEFINED__in_bcount) 65 # undef __in_bcount 66 #endif 67 #if !defined(__in_bcount) 68 # define __in_bcount(s) 69 # define SALIERI_DEFINED__in_bcount(s) 70 #endif 71 72 #if defined(__in_ecount) && defined(SALIERI_DEFINED__in_ecount) 73 # undef __in_ecount 74 #endif 75 #if !defined(__in_ecount) 76 # define __in_ecount(s) 77 # define SALIERI_DEFINED__in_ecount(s) 78 #endif 79 80 #if defined(__in_ecount_opt) && defined(SALIERI_DEFINED__in_ecount_opt) 81 # undef __in_ecount_opt 82 #endif 83 #if !defined(__in_ecount_opt) 84 # define __in_ecount_opt(s) 85 # define SALIERI_DEFINED__in_ecount_opt(s) 86 #endif 87 88 #if defined(_Out_) && defined(SALIERI_DEFINED_Out) 89 # undef _Out_ 90 #endif 91 #if !defined(_Out_) 92 # define _Out_ 93 # define SALIERI_DEFINED_Out 94 #endif 95 96 #if defined(_Inout_) && defined(SALIERI_DEFINED_Inout) 97 # undef _Inout_ 98 #endif 99 #if !defined(_Inout_) 100 # define _Inout_ 101 # define SALIERI_DEFINED_Inout 102 #endif 103 104 #if defined(_In_z_) && defined(SALIERI_DEFINED_In_z) 105 # undef _In_z_ 106 #endif 107 #if !defined(_In_z_) 108 # define _In_z_ 109 # define SALIERI_DEFINED_In_z 110 #endif 111 112 #if defined(_Inout_z_) && defined(SALIERI_DEFINED_Inout_z) 113 # undef _Inout_z_ 114 #endif 115 #if !defined(_Inout_z_) 116 # define _Inout_z_ 117 # define SALIERI_DEFINED_Inout_z 118 #endif 119 120 #if defined(_In_reads_) && defined(SALIERI_DEFINED_In_reads) 121 # undef _In_reads_ 122 #endif 123 #if !defined(_In_reads_) 124 # define _In_reads_(s) 125 # define SALIERI_DEFINED_In_reads 126 #endif 127 128 #if defined(_In_reads_bytes_) && defined(SALIERI_DEFINED_In_reads_bytes) 129 # undef _In_reads_bytes_ 130 #endif 131 #if !defined(_In_reads_bytes_) 132 # define _In_reads_bytes_(s) 133 # define SALIERI_DEFINED_In_reads_bytes 134 #endif 135 136 #if defined(_In_reads_z_) && defined(SALIERI_DEFINED_In_reads_z) 137 # undef _In_reads_z_ 138 #endif 139 #if !defined(_In_reads_z_) 140 # define _In_reads_z_(s) 141 # define SALIERI_DEFINED_In_reads_z 142 #endif 143 144 #if defined(_In_reads_or_z_) && defined(SALIERI_DEFINED_In_reads_or_z) 145 # undef _In_reads_or_z_ 146 #endif 147 #if !defined(_In_reads_or_z_) 148 # define _In_reads_or_z_(s) 149 # define SALIERI_DEFINED_In_reads_or_z 150 #endif 151 152 #if defined(_Out_writes_) && defined(SALIERI_DEFINED_Out_writes) 153 # undef _Out_writes_ 154 #endif 155 #if !defined(_Out_writes_) 156 # define _Out_writes_(s) 157 # define SALIERI_DEFINED_Out_writes 158 #endif 159 160 #if defined(_Out_writes_bytes_) && defined(SALIERI_DEFINED_Out_writes_bytes) 161 # undef _Out_writes_bytes_ 162 #endif 163 #if !defined(_Out_writes_bytes_) 164 # define _Out_writes_bytes_(s) 165 # define SALIERI_DEFINED_Out_writes_bytes 166 #endif 167 168 #if defined(_Out_writes_bytes_opt_) && defined(SALIERI_DEFINED_Out_writes_bytes_opt_) 169 # undef _Out_writes_bytes_opt_ 170 #endif 171 #if !defined(_Out_writes_bytes_opt_) 172 # define _Out_writes_bytes_opt_(s) 173 # define SALIERI_DEFINED_Out_writes_bytes_opt_ 174 #endif 175 176 #if defined(_Out_writes_z_) && defined(SALIERI_DEFINED_Out_writes_z) 177 # undef _Out_writes_z_ 178 #endif 179 #if !defined(_Out_writes_z_) 180 # define _Out_writes_z_(s) 181 # define SALIERI_DEFINED_Out_writes_z 182 #endif 183 184 #if defined(_Inout_updates_) && defined(SALIERI_DEFINED_Inout_updates) 185 # undef _Inout_updates_ 186 #endif 187 #if !defined(_Inout_updates_) 188 # define _Inout_updates_(s) 189 # define SALIERI_DEFINED_Inout_updates 190 #endif 191 192 #if defined(_Inout_updates_bytes_) && defined(SALIERI_DEFINED_Inout_updates_bytes) 193 # undef _Inout_updates_bytes_ 194 #endif 195 #if !defined(_Inout_updates_bytes_) 196 # define _Inout_updates_bytes_(s) 197 # define SALIERI_DEFINED_Inout_updates_bytes 198 #endif 199 200 #if defined(_Inout_updates_z_) && defined(SALIERI_DEFINED_Inout_updates_z) 201 # undef _Inout_updates_z_ 202 #endif 203 #if !defined(_Inout_updates_z_) 204 # define _Inout_updates_z_(s) 205 # define SALIERI_DEFINED_Inout_updates_z 206 #endif 207 208 #if defined(_Out_writes_to_) && defined(SALIERI_DEFINED_Out_writes_to) 209 # undef _Out_writes_to_ 210 #endif 211 #if !defined(_Out_writes_to_) 212 # define _Out_writes_to_(s,c) 213 # define SALIERI_DEFINED_Out_writes_to 214 #endif 215 216 #if defined(_Out_writes_bytes_to_) && defined(SALIERI_DEFINED_Out_writes_bytes_to) 217 # undef _Out_writes_bytes_to_ 218 #endif 219 #if !defined(_Out_writes_bytes_to_) 220 # define _Out_writes_bytes_to_(s,c) 221 # define SALIERI_DEFINED_Out_writes_bytes_to 222 #endif 223 224 #if defined(_Out_writes_all_) && defined(SALIERI_DEFINED_Out_writes_all) 225 # undef _Out_writes_all_ 226 #endif 227 #if !defined(_Out_writes_all_) 228 # define _Out_writes_all_(s) 229 # define SALIERI_DEFINED_Out_writes_all 230 #endif 231 232 #if defined(_Out_writes_bytes_all_) && defined(SALIERI_DEFINED_Out_writes_bytes_all) 233 # undef _Out_writes_bytes_all_ 234 #endif 235 #if !defined(_Out_writes_bytes_all_) 236 # define _Out_writes_bytes_all_(s) 237 # define SALIERI_DEFINED_Out_writes_bytes_all 238 #endif 239 240 #if defined(_In_updates_to_) && defined(SALIERI_DEFINED_In_updates_to) 241 # undef _In_updates_to_ 242 #endif 243 #if !defined(_In_updates_to_) 244 # define _In_updates_to_(s,c) 245 # define SALIERI_DEFINED_In_updates_to 246 #endif 247 248 #if defined(_In_updates_bytes_to_) && defined(SALIERI_DEFINED_In_updates_bytes_to) 249 # undef _In_updates_bytes_to_ 250 #endif 251 #if !defined(_In_updates_bytes_to_) 252 # define _In_updates_bytes_to_(s,c) 253 # define SALIERI_DEFINED_In_updates_bytes_to 254 #endif 255 256 #if defined(_Inout_updates_z_) && defined(SALIERI_DEFINED_Inout_updates_z) 257 # undef _Inout_updates_z_ 258 #endif 259 #if !defined(_Inout_updates_z_) 260 # define _Inout_updates_z_(s) 261 # define SALIERI_DEFINED_Inout_updates_z 262 #endif 263 264 #if defined(_Out_writes_to_) && defined(SALIERI_DEFINED_Out_writes_to) 265 # undef _Out_writes_to_ 266 #endif 267 #if !defined(_Out_writes_to_) 268 # define _Out_writes_to_(s,c) 269 # define SALIERI_DEFINED_Out_writes_to 270 #endif 271 272 #if defined(_Out_writes_bytes_to_) && defined(SALIERI_DEFINED_Out_writes_bytes_to) 273 # undef _Out_writes_bytes_to_ 274 #endif 275 #if !defined(_Out_writes_bytes_to_) 276 # define _Out_writes_bytes_to_(s,c) 277 # define SALIERI_DEFINED_Out_writes_bytes_to 278 #endif 279 280 #if defined(_Out_writes_all_) && defined(SALIERI_DEFINED_Out_writes_all) 281 # undef _Out_writes_all_ 282 #endif 283 #if !defined(_Out_writes_all_) 284 # define _Out_writes_all_(s) 285 # define SALIERI_DEFINED_Out_writes_all 286 #endif 287 288 #if defined(_Out_writes_bytes_all_) && defined(SALIERI_DEFINED_Out_writes_bytes_all) 289 # undef _Out_writes_bytes_all_ 290 #endif 291 #if !defined(_Out_writes_bytes_all_) 292 # define _Out_writes_bytes_all_(s) 293 # define SALIERI_DEFINED_Out_writes_bytes_all 294 #endif 295 296 #if defined(_Inout_updates_to_) && defined(SALIERI_DEFINED_Inout_updates_to) 297 # undef _Inout_updates_to_ 298 #endif 299 #if !defined(_Inout_updates_to_) 300 # define _Inout_updates_to_(s,c) 301 # define SALIERI_DEFINED_Inout_updates_to 302 #endif 303 304 #if defined(_Inout_updates_bytes_to_) && defined(SALIERI_DEFINED_Inout_updates_bytes_to) 305 # undef _Inout_updates_bytes_to_ 306 #endif 307 #if !defined(_Inout_updates_bytes_to_) 308 # define _Inout_updates_bytes_to_(s,c) 309 # define SALIERI_DEFINED_Inout_updates_bytes_to 310 #endif 311 312 #if defined(_Inout_updates_all_) && defined(SALIERI_DEFINED_Inout_updates_all) 313 # undef _Inout_updates_all_ 314 #endif 315 #if !defined(_Inout_updates_all_) 316 # define _Inout_updates_all_(s) 317 # define SALIERI_DEFINED_Inout_updates_all 318 #endif 319 320 #if defined(_Inout_updates_bytes_all_) && defined(SALIERI_DEFINED_Inout_updates_bytes_all) 321 # undef _Inout_updates_bytes_all_ 322 #endif 323 #if !defined(_Inout_updates_bytes_all_) 324 # define _Inout_updates_bytes_all_(s) 325 # define SALIERI_DEFINED_Inout_updates_bytes_all 326 #endif 327 328 #if defined(_In_reads_to_ptr_) && defined(SALIERI_DEFINED_In_reads_to_ptr) 329 # undef _In_reads_to_ptr_ 330 #endif 331 #if !defined(_In_reads_to_ptr_) 332 # define _In_reads_to_ptr_(p) 333 # define SALIERI_DEFINED_In_reads_to_ptr 334 #endif 335 336 #if defined(_In_reads_to_ptr_z_) && defined(SALIERI_DEFINED_In_reads_to_ptr_z) 337 # undef _In_reads_to_ptr_z_ 338 #endif 339 #if !defined(_In_reads_to_ptr_z_) 340 # define _In_reads_to_ptr_z_(p) 341 # define SALIERI_DEFINED_In_reads_to_ptr_z 342 #endif 343 344 #if defined(_Out_writes_to_ptr_) && defined(SALIERI_DEFINED_Out_writes_to_ptr) 345 # undef _Out_writes_to_ptr_ 346 #endif 347 #if !defined(_Out_writes_to_ptr_) 348 # define _Out_writes_to_ptr_(p) 349 # define SALIERI_DEFINED_Out_writes_to_ptr 350 #endif 351 352 #if defined(_Out_writes_to_ptr_z_) && defined(SALIERI_DEFINED_Out_writes_to_ptr_z) 353 # undef _Out_writes_to_ptr_z_ 354 #endif 355 #if !defined(_Out_writes_to_ptr_z_) 356 # define _Out_writes_to_ptr_z_(p) 357 # define SALIERI_DEFINED_Out_writes_to_ptr_z 358 #endif 359 360 /* Optional Pointer Parameters */ 361 362 #if defined(_In_opt_) && defined(SALIERI_DEFINED_In_opt) 363 # undef _In_opt_ 364 #endif 365 #if !defined(_In_opt_) 366 # define _In_opt_ 367 # define SALIERI_DEFINED_In_opt 368 #endif 369 370 #if defined(_Out_opt_) && defined(SALIERI_DEFINED_Out_opt) 371 # undef _Out_opt_ 372 #endif 373 #if !defined(_Out_opt_) 374 # define _Out_opt_ 375 # define SALIERI_DEFINED_Out_opt 376 #endif 377 378 #if defined(_Inout_opt_) && defined(SALIERI_DEFINED_Inout_opt) 379 # undef _Inout_opt_ 380 #endif 381 #if !defined(_Inout_opt_) 382 # define _Inout_opt_ 383 # define SALIERI_DEFINED_Inout_opt 384 #endif 385 386 #if defined(_In_opt_z_) && defined(SALIERI_DEFINED_In_opt_z) 387 # undef _In_opt_z_ 388 #endif 389 #if !defined(_In_opt_z_) 390 # define _In_opt_z_ 391 # define SALIERI_DEFINED_In_opt_z 392 #endif 393 394 #if defined(_Inout_opt_z_) && defined(SALIERI_DEFINED_Inout_opt_z) 395 # undef _Inout_opt_z_ 396 #endif 397 #if !defined(_Inout_opt_z_) 398 # define _Inout_opt_z_ 399 # define SALIERI_DEFINED_Inout_opt_z 400 #endif 401 402 #if defined(_Inout_opt_bytecount_) && defined(SALIERI_DEFINED_Inout_opt_bytecount_) 403 # undef _Inout_opt_bytecount_ 404 #endif 405 #if !defined(_Inout_opt_bytecount_) 406 # define _Inout_opt_bytecount_(s) 407 # define SALIERI_DEFINED_Inout_opt_bytecount_(s) 408 #endif 409 410 #if defined(_In_reads_opt_) && defined(SALIERI_DEFINED_In_reads_opt) 411 # undef _In_reads_opt_ 412 #endif 413 #if !defined(_In_reads_opt_) 414 # define _In_reads_opt_(s) 415 # define SALIERI_DEFINED_In_reads_opt 416 #endif 417 418 #if defined(_In_reads_bytes_opt_) && defined(SALIERI_DEFINED_In_reads_bytes_opt) 419 # undef _In_reads_bytes_opt_ 420 #endif 421 #if !defined(_In_reads_bytes_opt_) 422 # define _In_reads_bytes_opt_(s) 423 # define SALIERI_DEFINED_In_reads_bytes_opt 424 #endif 425 426 #if defined(_In_reads_opt_z_) && defined(SALIERI_DEFINED_In_reads_opt_z) 427 # undef _In_reads_opt_z_ 428 #endif 429 #if !defined(_In_reads_opt_z_) 430 # define _In_reads_opt_z_(s) 431 # define SALIERI_DEFINED_In_reads_opt_z 432 #endif 433 434 #if defined(_Out_writes_opt_) && defined(SALIERI_DEFINED_Out_writes_opt) 435 # undef _Out_writes_opt_ 436 #endif 437 #if !defined(_Out_writes_opt_) 438 # define _Out_writes_opt_(s) 439 # define SALIERI_DEFINED_Out_writes_opt 440 #endif 441 442 #if defined(_Out_writes_bytes_) && defined(SALIERI_DEFINED_Out_writes_bytes) 443 # undef _Out_writes_bytes_ 444 #endif 445 #if !defined(_Out_writes_bytes_) 446 # define _Out_writes_bytes_(s) 447 # define SALIERI_DEFINED_Out_writes_bytes 448 #endif 449 450 #if defined(_Out_writes_opt_z_) && defined(SALIERI_DEFINED_Out_writes_opt_z) 451 # undef _Out_writes_opt_z_ 452 #endif 453 #if !defined(_Out_writes_opt_z_) 454 # define _Out_writes_opt_z_(s) 455 # define SALIERI_DEFINED_Out_writes_opt_z 456 #endif 457 458 #if defined(_Inout_updates_opt_) && defined(SALIERI_DEFINED_Inout_updates_opt) 459 # undef _Inout_updates_opt_ 460 #endif 461 #if !defined(_Inout_updates_opt_) 462 # define _Inout_updates_opt_(s) 463 # define SALIERI_DEFINED_Inout_updates_opt 464 #endif 465 466 #if defined(_Inout_updates_bytes_opt_) && defined(SALIERI_DEFINED_Inout_updates_bytes_opt) 467 # undef _Inout_updates_bytes_opt_ 468 #endif 469 #if !defined(_Inout_updates_bytes_opt_) 470 # define _Inout_updates_bytes_opt_(s) 471 # define SALIERI_DEFINED_Inout_updates_bytes_opt 472 #endif 473 474 #if defined(_Inout_updates_opt_z_) && defined(SALIERI_DEFINED_Inout_updates_opt_z) 475 # undef _Inout_updates_opt_z_ 476 #endif 477 #if !defined(_Inout_updates_opt_z_) 478 # define _Inout_updates_opt_z_(s) 479 # define SALIERI_DEFINED_Inout_updates_opt_z 480 #endif 481 482 #if defined(_Out_writes_to_opt_) && defined(SALIERI_DEFINED_Out_writes_to_opt) 483 # undef _Out_writes_to_opt_ 484 #endif 485 #if !defined(_Out_writes_to_opt_) 486 # define _Out_writes_to_opt_(s,c) 487 # define SALIERI_DEFINED_Out_writes_to_opt 488 #endif 489 490 #if defined(_Out_writes_bytes_to_opt_) && defined(SALIERI_DEFINED_Out_writes_bytes_to_opt) 491 # undef _Out_writes_bytes_to_opt_ 492 #endif 493 #if !defined(_Out_writes_bytes_to_opt_) 494 # define _Out_writes_bytes_to_opt_(s,c) 495 # define SALIERI_DEFINED_Out_writes_bytes_to_opt 496 #endif 497 498 #if defined(_Out_writes_all_opt_) && defined(SALIERI_DEFINED_Out_writes_all_opt) 499 # undef _Out_writes_all_opt_ 500 #endif 501 #if !defined(_Out_writes_all_opt_) 502 # define _Out_writes_all_opt_(s) 503 # define SALIERI_DEFINED_Out_writes_all_opt 504 #endif 505 506 #if defined(_Out_writes_bytes_all_opt_) && defined(SALIERI_DEFINED_Out_writes_bytes_all_opt) 507 # undef _Out_writes_bytes_all_opt_ 508 #endif 509 #if !defined(_Out_writes_bytes_all_opt_) 510 # define _Out_writes_bytes_all_opt_(s) 511 # define SALIERI_DEFINED_Out_writes_bytes_all_opt 512 #endif 513 514 #if defined(_In_updates_to_opt_) && defined(SALIERI_DEFINED_In_updates_to_opt) 515 # undef _In_updates_to_opt_ 516 #endif 517 #if !defined(_In_updates_to_opt_) 518 # define _In_updates_to_opt_(s,c) 519 # define SALIERI_DEFINED_In_updates_to_opt 520 #endif 521 522 #if defined(_In_updates_bytes_to_opt_) && defined(SALIERI_DEFINED_In_updates_bytes_to_opt) 523 # undef _In_updates_bytes_to_opt_ 524 #endif 525 #if !defined(_In_updates_bytes_to_opt_) 526 # define _In_updates_bytes_to_opt_(s,c) 527 # define SALIERI_DEFINED_In_updates_bytes_to_opt 528 #endif 529 530 #if defined(_Inout_updates_all_opt_) && defined(SALIERI_DEFINED_Inout_updates_all_opt) 531 # undef _Inout_updates_all_opt_ 532 #endif 533 #if !defined(_Inout_updates_all_opt_) 534 # define _Inout_updates_all_opt_(s) 535 # define SALIERI_DEFINED_Inout_updates_all_opt 536 #endif 537 538 #if defined(_Inout_updates_bytes_all_opt_) && defined(SALIERI_DEFINED_Inout_updates_bytes_all_opt) 539 # undef _Inout_updates_bytes_all_opt_ 540 #endif 541 #if !defined(_Inout_updates_bytes_all_opt_) 542 # define _Inout_updates_bytes_all_opt_(s) 543 # define SALIERI_DEFINED_Inout_updates_bytes_all_opt 544 #endif 545 546 #if defined(_In_reads_to_ptr_opt_) && defined(SALIERI_DEFINED_In_reads_to_ptr_opt) 547 # undef _In_reads_to_ptr_opt_ 548 #endif 549 #if !defined(_In_reads_to_ptr_opt_) 550 # define _In_reads_to_ptr_opt_(p) 551 # define SALIERI_DEFINED_In_reads_to_ptr_opt 552 #endif 553 554 #if defined(_In_reads_to_ptr_opt_z_) && defined(SALIERI_DEFINED_In_reads_to_ptr_opt_z) 555 # undef _In_reads_to_ptr_opt_z_ 556 #endif 557 #if !defined(_In_reads_to_ptr_opt_z_) 558 # define _In_reads_to_ptr_opt_z_(p) 559 # define SALIERI_DEFINED_In_reads_to_ptr_opt_z 560 #endif 561 562 #if defined(_Out_writes_to_ptr_opt_) && defined(SALIERI_DEFINED_Out_writes_to_ptr_opt) 563 # undef _Out_writes_to_ptr_opt_ 564 #endif 565 #if !defined(_Out_writes_to_ptr_opt_) 566 # define _Out_writes_to_ptr_opt_(p) 567 # define SALIERI_DEFINED_Out_writes_to_ptr_opt 568 #endif 569 570 #if defined(_Out_writes_to_ptr_opt_z_) && defined(SALIERI_DEFINED_Out_writes_to_ptr_opt_z) 571 # undef _Out_writes_to_ptr_opt_z_ 572 #endif 573 #if !defined(_Out_writes_to_ptr_opt_z_) 574 # define _Out_writes_to_ptr_opt_z_(p) 575 # define SALIERI_DEFINED_Out_writes_to_ptr_opt_z 576 #endif 577 578 /* Output Pointer Parameters */ 579 580 #if defined(_Outptr_) && defined(SALIERI_DEFINED_Outptr) 581 # undef _Outptr_ 582 #endif 583 #if !defined(_Outptr_) 584 # define _Outptr_ 585 # define SALIERI_DEFINED_Outptr 586 #endif 587 588 #if defined(_Outptr_opt_) && defined(SALIERI_DEFINED_Outptr_opt) 589 # undef _Outptr_opt_ 590 #endif 591 #if !defined(_Outptr_opt_) 592 # define _Outptr_opt_ 593 # define SALIERI_DEFINED_Outptr_opt 594 #endif 595 596 #if defined(_Outptr_result_maybenull_) && defined(SALIERI_DEFINED_Outptr_result_maybenull) 597 # undef _Outptr_result_maybenull_ 598 #endif 599 #if !defined(_Outptr_result_maybenull_) 600 # define _Outptr_result_maybenull_ 601 # define SALIERI_DEFINED_Outptr_result_maybenull 602 #endif 603 604 #if defined(_Outptr_opt_result_maybenull_) && defined(SALIERI_DEFINED_Outptr_opt_result_maybenull) 605 # undef _Outptr_opt_result_maybenull_ 606 #endif 607 #if !defined(_Outptr_opt_result_maybenull_) 608 # define _Outptr_opt_result_maybenull_ 609 # define SALIERI_DEFINED_Outptr_opt_result_maybenull 610 #endif 611 612 #if defined(_Outptr_result_z_) && defined(SALIERI_DEFINED_Outptr_result_z) 613 # undef _Outptr_result_z_ 614 #endif 615 #if !defined(_Outptr_result_z_) 616 # define _Outptr_result_z_ 617 # define SALIERI_DEFINED_Outptr_result_z 618 #endif 619 620 #if defined(_Outptr_opt_result_z_) && defined(SALIERI_DEFINED_Outptr_opt_result_z) 621 # undef _Outptr_opt_result_z_ 622 #endif 623 #if !defined(_Outptr_opt_result_z_) 624 # define _Outptr_opt_result_z_ 625 # define SALIERI_DEFINED_Outptr_opt_result_z 626 #endif 627 628 #if defined(_Outptr_result_maybenull_z_) && defined(SALIERI_DEFINED_Outptr_result_maybenull_z) 629 # undef _Outptr_result_maybenull_z_ 630 #endif 631 #if !defined(_Outptr_result_maybenull_z_) 632 # define _Outptr_result_maybenull_z_ 633 # define SALIERI_DEFINED_Outptr_result_maybenull_z 634 #endif 635 636 #if defined(_Outptr_opt_result_maybenull_z_) && defined(SALIERI_DEFINED_Outptr_opt_result_maybenull_z) 637 # undef _Outptr_opt_result_maybenull_z_ 638 #endif 639 #if !defined(_Outptr_opt_result_maybenull_z_) 640 # define _Outptr_opt_result_maybenull_z_ 641 # define SALIERI_DEFINED_Outptr_opt_result_maybenull_z 642 #endif 643 644 #if defined(_COM_Outptr_) && defined(SALIERI_DEFINED_COM_Outptr) 645 # undef _COM_Outptr_ 646 #endif 647 #if !defined(_COM_Outptr_) 648 # define _COM_Outptr_ 649 # define SALIERI_DEFINED_COM_Outptr 650 #endif 651 652 #if defined(_COM_Outptr_opt_) && defined(SALIERI_DEFINED_COM_Outptr_opt) 653 # undef _COM_Outptr_opt_ 654 #endif 655 #if !defined(_COM_Outptr_opt_) 656 # define _COM_Outptr_opt_ 657 # define SALIERI_DEFINED_COM_Outptr_opt 658 #endif 659 660 #if defined(_COM_Outptr_result_maybenull_) && defined(SALIERI_DEFINED_COM_Outptr_result_maybenull) 661 # undef _COM_Outptr_result_maybenull_ 662 #endif 663 #if !defined(_COM_Outptr_result_maybenull_) 664 # define _COM_Outptr_result_maybenull_ 665 # define SALIERI_DEFINED_COM_Outptr_result_maybenull 666 #endif 667 668 #if defined(_COM_Outptr_opt_result_maybenull_) && defined(SALIERI_DEFINED_COM_Outptr_opt_result_maybenull) 669 # undef _COM_Outptr_opt_result_maybenull_ 670 #endif 671 #if !defined(_COM_Outptr_opt_result_maybenull_) 672 # define _COM_Outptr_opt_result_maybenull_ 673 # define SALIERI_DEFINED_COM_Outptr_opt_result_maybenull 674 #endif 675 676 #if defined(_Outptr_opt_result_maybenull_) && defined(SALIERI_DEFINED_Outptr_opt_result_maybenull) 677 # undef _Outptr_opt_result_maybenull_ 678 #endif 679 #if !defined(_Outptr_opt_result_maybenull_) 680 # define _Outptr_opt_result_maybenull_ 681 # define SALIERI_DEFINED_Outptr_opt_result_maybenull 682 #endif 683 684 #if defined(_Outptr_result_buffer_) && defined(SALIERI_DEFINED_Outptr_result_buffer) 685 # undef _Outptr_result_buffer_ 686 #endif 687 #if !defined(_Outptr_result_buffer_) 688 # define _Outptr_result_buffer_(s) 689 # define SALIERI_DEFINED_Outptr_result_buffer 690 #endif 691 692 #if defined(_Outptr_result_bytebuffer_) && defined(SALIERI_DEFINED_Outptr_result_bytebuffer) 693 # undef _Outptr_result_bytebuffer_ 694 #endif 695 #if !defined(_Outptr_result_bytebuffer_) 696 # define _Outptr_result_bytebuffer_(s) 697 # define SALIERI_DEFINED_Outptr_result_bytebuffer 698 #endif 699 700 #if defined(_Outptr_opt_result_buffer_) && defined(SALIERI_DEFINED_Outptr_opt_result_buffer) 701 # undef _Outptr_opt_result_buffer_ 702 #endif 703 #if !defined(_Outptr_opt_result_buffer_) 704 # define _Outptr_opt_result_buffer_(s) 705 # define SALIERI_DEFINED_Outptr_opt_result_buffer 706 #endif 707 708 #if defined(_Outptr_opt_result_bytebuffer_) && defined(SALIERI_DEFINED_Outptr_opt_result_bytebuffer) 709 # undef _Outptr_opt_result_bytebuffer_ 710 #endif 711 #if !defined(_Outptr_opt_result_bytebuffer_) 712 # define _Outptr_opt_result_bytebuffer_(s) 713 # define SALIERI_DEFINED_Outptr_opt_result_bytebuffer 714 #endif 715 716 #if defined(_Outptr_result_buffer_to_) && defined(SALIERI_DEFINED_Outptr_result_buffer_to) 717 # undef _Outptr_result_buffer_to_ 718 #endif 719 #if !defined(_Outptr_result_buffer_to_) 720 # define _Outptr_result_buffer_to_(s,c) 721 # define SALIERI_DEFINED_Outptr_result_buffer_to 722 #endif 723 724 #if defined(_Outptr_result_bytebuffer_to_) && defined(SALIERI_DEFINED_Outptr_result_bytebuffer_to) 725 # undef _Outptr_result_bytebuffer_to_ 726 #endif 727 #if !defined(_Outptr_result_bytebuffer_to_) 728 # define _Outptr_result_bytebuffer_to_(s,c) 729 # define SALIERI_DEFINED_Outptr_result_bytebuffer_to 730 #endif 731 732 #if defined(_Outptr_opt_result_buffer_to_) && defined(SALIERI_DEFINED_Outptr_opt_result_buffer_to) 733 # undef _Outptr_opt_result_buffer_to_ 734 #endif 735 #if !defined(_Outptr_opt_result_buffer_to_) 736 # define _Outptr_opt_result_buffer_to_(s,c) 737 # define SALIERI_DEFINED_Outptr_opt_result_buffer_to 738 #endif 739 740 #if defined(_Outptr_opt_result_bytebuffer_to_) && defined(SALIERI_DEFINED_Outptr_opt_result_bytebuffer_to) 741 # undef _Outptr_opt_result_bytebuffer_to_ 742 #endif 743 #if !defined(_Outptr_opt_result_bytebuffer_to_) 744 # define _Outptr_opt_result_bytebuffer_to_(s,c) 745 # define SALIERI_DEFINED_Outptr_opt_result_bytebuffer_to 746 #endif 747 748 #if defined(_Result_nullonfailure_) && defined(SALIERI_DEFINED_Result_nullonfailure) 749 # undef _Result_nullonfailure_ 750 #endif 751 #if !defined(_Result_nullonfailure_) 752 # define _Result_nullonfailure_ 753 # define SALIERI_DEFINED_Result_nullonfailure 754 #endif 755 756 #if defined(_Result_zeroonfailure_) && defined(SALIERI_DEFINED_Result_zeroonfailure) 757 # undef _Result_zeroonfailure_ 758 #endif 759 #if !defined(_Result_zeroonfailure_) 760 # define _Result_zeroonfailure_ 761 # define SALIERI_DEFINED_Result_zeroonfailure 762 #endif 763 764 #if defined(_Outptr_result_nullonfailure_) && defined(SALIERI_DEFINED_Outptr_result_nullonfailure) 765 # undef _Outptr_result_nullonfailure_ 766 #endif 767 #if !defined(_Outptr_result_nullonfailure_) 768 # define _Outptr_result_nullonfailure_ 769 # define SALIERI_DEFINED_Outptr_result_nullonfailure 770 #endif 771 772 #if defined(_Outptr_opt_result_nullonfailure_) && defined(SALIERI_DEFINED_Outptr_opt_result_nullonfailure) 773 # undef _Outptr_opt_result_nullonfailure_ 774 #endif 775 #if !defined(_Outptr_opt_result_nullonfailure_) 776 # define _Outptr_opt_result_nullonfailure_ 777 # define SALIERI_DEFINED_Outptr_opt_result_nullonfailure 778 #endif 779 780 #if defined(_Outref_result_nullonfailure_) && defined(SALIERI_DEFINED_Outref_result_nullonfailure) 781 # undef _Outref_result_nullonfailure_ 782 #endif 783 #if !defined(_Outref_result_nullonfailure_) 784 # define _Outref_result_nullonfailure_ 785 # define SALIERI_DEFINED_Outref_result_nullonfailure 786 #endif 787 788 /* Output Reference Parameters */ 789 790 #if defined(_Outref_) && defined(SALIERI_DEFINED_Outref) 791 # undef _Outref_ 792 #endif 793 #if !defined(_Outref_) 794 # define _Outref_ 795 # define SALIERI_DEFINED_Outref 796 #endif 797 798 #if defined(_Outref_result_maybenull_) && defined(SALIERI_DEFINED_Outref_result_maybenull) 799 # undef _Outref_result_maybenull_ 800 #endif 801 #if !defined(_Outref_result_maybenull_) 802 # define _Outref_result_maybenull_ 803 # define SALIERI_DEFINED_Outref_result_maybenull 804 #endif 805 806 #if defined(_Outref_result_buffer_) && defined(SALIERI_DEFINED_Outref_result_buffer) 807 # undef _Outref_result_buffer_ 808 #endif 809 #if !defined(_Outref_result_buffer_) 810 # define _Outref_result_buffer_(s) 811 # define SALIERI_DEFINED_Outref_result_buffer 812 #endif 813 814 #if defined(_Outref_result_bytebuffer_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer) 815 # undef _Outref_result_bytebuffer_ 816 #endif 817 #if !defined(_Outref_result_bytebuffer_) 818 # define _Outref_result_bytebuffer_(s) 819 # define SALIERI_DEFINED_Outref_result_bytebuffer 820 #endif 821 822 #if defined(_Outref_result_buffer_to_) && defined(SALIERI_DEFINED_Outref_result_buffer_to) 823 # undef _Outref_result_buffer_to_ 824 #endif 825 #if !defined(_Outref_result_buffer_to_) 826 # define _Outref_result_buffer_to_(s,c) 827 # define SALIERI_DEFINED_Outref_result_buffer_to 828 #endif 829 830 #if defined(_Outref_result_bytebuffer_to_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_to) 831 # undef _Outref_result_bytebuffer_to_ 832 #endif 833 #if !defined(_Outref_result_bytebuffer_to_) 834 # define _Outref_result_bytebuffer_to_(s,c) 835 # define SALIERI_DEFINED_Outref_result_bytebuffer_to 836 #endif 837 838 #if defined(_Outref_result_buffer_all_) && defined(SALIERI_DEFINED_Outref_result_buffer_all) 839 # undef _Outref_result_buffer_all_ 840 #endif 841 #if !defined(_Outref_result_buffer_all_) 842 # define _Outref_result_buffer_all_(s) 843 # define SALIERI_DEFINED_Outref_result_buffer_all 844 #endif 845 846 #if defined(_Outref_result_bytebuffer_all_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_all) 847 # undef _Outref_result_bytebuffer_all_ 848 #endif 849 #if !defined(_Outref_result_bytebuffer_all_) 850 # define _Outref_result_bytebuffer_all_(s) 851 # define SALIERI_DEFINED_Outref_result_bytebuffer_all 852 #endif 853 854 #if defined(_Outref_result_buffer_maybenull_) && defined(SALIERI_DEFINED_Outref_result_buffer_maybenull) 855 # undef _Outref_result_buffer_maybenull_ 856 #endif 857 #if !defined(_Outref_result_buffer_maybenull_) 858 # define _Outref_result_buffer_maybenull_(s) 859 # define SALIERI_DEFINED_Outref_result_buffer_maybenull 860 #endif 861 862 #if defined(_Outref_result_bytebuffer_maybenull_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_maybenull) 863 # undef _Outref_result_bytebuffer_maybenull_ 864 #endif 865 #if !defined(_Outref_result_bytebuffer_maybenull_) 866 # define _Outref_result_bytebuffer_maybenull_(s) 867 # define SALIERI_DEFINED_Outref_result_bytebuffer_maybenull 868 #endif 869 870 #if defined(_Outref_result_buffer_to_maybenull_) && defined(SALIERI_DEFINED_Outref_result_buffer_to_maybenull) 871 # undef _Outref_result_buffer_to_maybenull_ 872 #endif 873 #if !defined(_Outref_result_buffer_to_maybenull_) 874 # define _Outref_result_buffer_to_maybenull_(s,c) 875 # define SALIERI_DEFINED_Outref_result_buffer_to_maybenull 876 #endif 877 878 #if defined(_Outref_result_bytebuffer_to_maybenull_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_to_maybenull) 879 # undef _Outref_result_bytebuffer_to_maybenull_ 880 #endif 881 #if !defined(_Outref_result_bytebuffer_to_maybenull_) 882 # define _Outref_result_bytebuffer_to_maybenull_(s,c) 883 # define SALIERI_DEFINED_Outref_result_bytebuffer_to_maybenull 884 #endif 885 886 #if defined(_Outref_result_buffer_all_maybenull_) && defined(SALIERI_DEFINED_Outref_result_buffer_all_maybenull) 887 # undef _Outref_result_buffer_all_maybenull_ 888 #endif 889 #if !defined(_Outref_result_buffer_all_maybenull_) 890 # define _Outref_result_buffer_all_maybenull_(s) 891 # define SALIERI_DEFINED_Outref_result_buffer_all_maybenull 892 #endif 893 894 #if defined(_Outref_result_bytebuffer_all_maybenull_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_all_maybenull) 895 # undef _Outref_result_bytebuffer_all_maybenull_ 896 #endif 897 #if !defined(_Outref_result_bytebuffer_all_maybenull_) 898 # define _Outref_result_bytebuffer_all_maybenull_(s) 899 # define SALIERI_DEFINED_Outref_result_bytebuffer_all_maybenull 900 #endif 901 902 /* Return Values */ 903 904 #if defined(_Ret_z_) && defined(SALIERI_DEFINED_Ret_z) 905 # undef _Ret_z_ 906 #endif 907 #if !defined(_Ret_z_) 908 # define _Ret_z_ 909 # define SALIERI_DEFINED_Ret_z 910 #endif 911 912 #if defined(_Ret_writes_) && defined(SALIERI_DEFINED_Ret_writes) 913 # undef _Ret_writes_ 914 #endif 915 #if !defined(_Ret_writes_) 916 # define _Ret_writes_(s) 917 # define SALIERI_DEFINED_Ret_writes 918 #endif 919 920 #if defined(_Ret_writes_bytes_) && defined(SALIERI_DEFINED_Ret_writes_bytes) 921 # undef _Ret_writes_bytes_ 922 #endif 923 #if !defined(_Ret_writes_bytes_) 924 # define _Ret_writes_bytes_(s) 925 # define SALIERI_DEFINED_Ret_writes_bytes 926 #endif 927 928 #if defined(_Ret_writes_z_) && defined(SALIERI_DEFINED_Ret_writes_z) 929 # undef _Ret_writes_z_ 930 #endif 931 #if !defined(_Ret_writes_z_) 932 # define _Ret_writes_z_(s) 933 # define SALIERI_DEFINED_Ret_writes_z 934 #endif 935 936 #if defined(_Ret_writes_to_) && defined(SALIERI_DEFINED_Ret_writes_to) 937 # undef _Ret_writes_to_ 938 #endif 939 #if !defined(_Ret_writes_to_) 940 # define _Ret_writes_to_(s,c) 941 # define SALIERI_DEFINED_Ret_writes_to 942 #endif 943 944 #if defined(_Ret_writes_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_maybenull) 945 # undef _Ret_writes_maybenull_ 946 #endif 947 #if !defined(_Ret_writes_maybenull_) 948 # define _Ret_writes_maybenull_(s) 949 # define SALIERI_DEFINED_Ret_writes_maybenull 950 #endif 951 952 #if defined(_Ret_writes_to_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_to_maybenull) 953 # undef _Ret_writes_to_maybenull_ 954 #endif 955 #if !defined(_Ret_writes_to_maybenull_) 956 # define _Ret_writes_to_maybenull_(s) 957 # define SALIERI_DEFINED_Ret_writes_to_maybenull 958 #endif 959 960 #if defined(_Ret_writes_maybenull_z_) && defined(SALIERI_DEFINED_Ret_writes_maybenull_z) 961 # undef _Ret_writes_maybenull_z_ 962 #endif 963 #if !defined(_Ret_writes_maybenull_z_) 964 # define _Ret_writes_maybenull_z_(s) 965 # define SALIERI_DEFINED_Ret_writes_maybenull_z 966 #endif 967 968 #if defined(_Ret_maybenull_) && defined(SALIERI_DEFINED_Ret_maybenull) 969 # undef _Ret_maybenull_ 970 #endif 971 #if !defined(_Ret_maybenull_) 972 # define _Ret_maybenull_ 973 # define SALIERI_DEFINED_Ret_maybenull 974 #endif 975 976 #if defined(_Ret_maybenull_z_) && defined(SALIERI_DEFINED_Ret_maybenull_z) 977 # undef _Ret_maybenull_z_ 978 #endif 979 #if !defined(_Ret_maybenull_z_) 980 # define _Ret_maybenull_z_ 981 # define SALIERI_DEFINED_Ret_maybenull_z 982 #endif 983 984 #if defined(_Ret_null_) && defined(SALIERI_DEFINED_Ret_null) 985 # undef _Ret_null_ 986 #endif 987 #if !defined(_Ret_null_) 988 # define _Ret_null_ 989 # define SALIERI_DEFINED_Ret_null 990 #endif 991 992 #if defined(_Ret_notnull_) && defined(SALIERI_DEFINED_Ret_notnull) 993 # undef _Ret_notnull_ 994 #endif 995 #if !defined(_Ret_notnull_) 996 # define _Ret_notnull_ 997 # define SALIERI_DEFINED_Ret_notnull 998 #endif 999 1000 #if defined(_Ret_writes_bytes_to_) && defined(SALIERI_DEFINED_Ret_writes_bytes_to) 1001 # undef _Ret_writes_bytes_to_ 1002 #endif 1003 #if !defined(_Ret_writes_bytes_to_) 1004 # define _Ret_writes_bytes_to_ 1005 # define SALIERI_DEFINED_Ret_writes_bytes_to 1006 #endif 1007 1008 #if defined(_Ret_writes_bytes_to_) && defined(SALIERI_DEFINED_Ret_writes_bytes_to) 1009 # undef _Ret_writes_bytes_to_ 1010 #endif 1011 #if !defined(_Ret_writes_bytes_to_) 1012 # define _Ret_writes_bytes_to_ 1013 # define SALIERI_DEFINED_Ret_writes_bytes_to 1014 #endif 1015 1016 #if defined(_Ret_writes_bytes_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_bytes_maybenull) 1017 # undef _Ret_writes_bytes_maybenull_ 1018 #endif 1019 #if !defined(_Ret_writes_bytes_maybenull_) 1020 # define _Ret_writes_bytes_maybenull_ 1021 # define SALIERI_DEFINED_Ret_writes_bytes_maybenull 1022 #endif 1023 1024 #if defined(_Ret_writes_bytes_to_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_bytes_to_maybenull) 1025 # undef _Ret_writes_bytes_to_maybenull_ 1026 #endif 1027 #if !defined(_Ret_writes_bytes_to_maybenull_) 1028 # define _Ret_writes_bytes_to_maybenull_ 1029 # define SALIERI_DEFINED_Ret_writes_bytes_to_maybenull 1030 #endif 1031 1032 /* Other Common Annotations */ 1033 1034 #if defined(_In_range_) && defined(SALIERI_DEFINED_In_range) 1035 # undef _In_range_ 1036 #endif 1037 #if !defined(_In_range_) 1038 # define _In_range_(low, hi) 1039 # define SALIERI_DEFINED_In_range 1040 #endif 1041 1042 #if defined(_Out_range_) && defined(SALIERI_DEFINED_Out_range) 1043 # undef _Out_range_ 1044 #endif 1045 #if !defined(_Out_range_) 1046 # define _Out_range_(low, hi) 1047 # define SALIERI_DEFINED_Out_range 1048 #endif 1049 1050 #if defined(_Ret_range_) && defined(SALIERI_DEFINED_Ret_range) 1051 # undef _Ret_range_ 1052 #endif 1053 #if !defined(_Ret_range_) 1054 # define _Ret_range_(low, hi) 1055 # define SALIERI_DEFINED_Ret_range 1056 #endif 1057 1058 #if defined(_Deref_in_range_) && defined(SALIERI_DEFINED_Deref_in_range) 1059 # undef _Deref_in_range_ 1060 #endif 1061 #if !defined(_Deref_in_range_) 1062 # define _Deref_in_range_(low, hi) 1063 # define SALIERI_DEFINED_Deref_in_range 1064 #endif 1065 1066 #if defined(_Deref_out_range_) && defined(SALIERI_DEFINED_Deref_out_range) 1067 # undef _Deref_out_range_ 1068 #endif 1069 #if !defined(_Deref_out_range_) 1070 # define _Deref_out_range_(low, hi) 1071 # define SALIERI_DEFINED_Deref_out_range 1072 #endif 1073 1074 #if defined(_Deref_inout_range_) && defined(SALIERI_DEFINED_Deref_inout_range) 1075 # undef _Deref_inout_range_ 1076 #endif 1077 #if !defined(_Deref_inout_range_) 1078 # define _Deref_inout_range_(low, hi) 1079 # define SALIERI_DEFINED_Deref_inout_range 1080 #endif 1081 1082 #if defined(_Field_range_) && defined(SALIERI_DEFINED_Field_range) 1083 # undef _Field_range_ 1084 #endif 1085 #if !defined(_Field_range_) 1086 # define _Field_range_(low, hi) 1087 # define SALIERI_DEFINED_Field_range 1088 #endif 1089 1090 #if defined(_Pre_equal_to_) && defined(SALIERI_DEFINED_Pre_equal_to) 1091 # undef _Pre_equal_to_ 1092 #endif 1093 #if !defined(_Pre_equal_to_) 1094 # define _Pre_equal_to_(expr) 1095 # define SALIERI_DEFINED_Pre_equal_to 1096 #endif 1097 1098 #if defined(_Post_equal_to_) && defined(SALIERI_DEFINED_Post_equal_to) 1099 # undef _Post_equal_to_ 1100 #endif 1101 #if !defined(_Post_equal_to_) 1102 # define _Post_equal_to_(expr) 1103 # define SALIERI_DEFINED_Post_equal_to 1104 #endif 1105 1106 #if defined(_Struct_size_bytes_) && defined(SALIERI_DEFINED_Struct_size_bytes) 1107 # undef _Struct_size_bytes_ 1108 #endif 1109 #if !defined(_Struct_size_bytes_) 1110 # define _Struct_size_bytes_(size) 1111 # define SALIERI_DEFINED_Struct_size_bytes 1112 #endif 1113 1114 /* Annotating Function Behavior 1115 * 1116 * https://msdn.microsoft.com/en-us/library/jj159529.aspx 1117 *****/ 1118 1119 #if defined(_Called_from_function_class_) && defined(SALIERI_DEFINED_Called_from_function_class) 1120 # undef _Called_from_function_class_ 1121 #endif 1122 #if !defined(_Called_from_function_class_) 1123 # define _Called_from_function_class_(name) 1124 # define SALIERI_DEFINED_Called_from_function_class 1125 #endif 1126 1127 #if defined(_Check_return_) && defined(SALIERI_DEFINED_Check_return) 1128 # undef _Check_return_ 1129 #endif 1130 #if !defined(_Check_return_) 1131 # define _Check_return_ 1132 # define SALIERI_DEFINED_Check_return 1133 #endif 1134 1135 #if defined(_Function_class_) && defined(SALIERI_DEFINED_Function_class) 1136 # undef _Function_class_ 1137 #endif 1138 #if !defined(_Function_class_) 1139 # define _Function_class_(name) 1140 # define SALIERI_DEFINED_Function_class 1141 #endif 1142 1143 #if defined(_Raises_SEH_exception_) && defined(SALIERI_DEFINED_Raises_SEH_exception) 1144 # undef _Raises_SEH_exception_ 1145 #endif 1146 #if !defined(_Raises_SEH_exception_) 1147 # define _Raises_SEH_exception_ 1148 # define SALIERI_DEFINED_Raises_SEH_exception 1149 #endif 1150 1151 #if defined(_Must_inspect_result_) && defined(SALIERI_DEFINED_Must_inspect_result) 1152 # undef _Must_inspect_result_ 1153 #endif 1154 #if !defined(_Must_inspect_result_) 1155 # define _Must_inspect_result_ 1156 # define SALIERI_DEFINED_Must_inspect_result 1157 #endif 1158 1159 #if defined(_Use_decl_annotations_) && defined(SALIERI_DEFINED_Use_decl_annotations) 1160 # undef _Use_decl_annotations_ 1161 #endif 1162 #if !defined(_Use_decl_annotations_) 1163 # define _Use_decl_annotations_ 1164 # define SALIERI_DEFINED_Use_decl_annotations 1165 #endif 1166 1167 #if defined(_Always_) && defined(SALIERI_DEFINED_Always) 1168 # undef _Always_ 1169 #endif 1170 #if !defined(_Always_) 1171 # define _Always_(anno_list) 1172 # define SALIERI_DEFINED_Always 1173 #endif 1174 1175 #if defined(_On_failure_) && defined(SALIERI_DEFINED_On_failure) 1176 # undef _On_failure_ 1177 #endif 1178 #if !defined(_On_failure_) 1179 # define _On_failure_(anno_list) 1180 # define SALIERI_DEFINED_On_failure 1181 #endif 1182 1183 #if defined(_Return_type_success_) && defined(SALIERI_DEFINED_Return_type_success) 1184 # undef _Return_type_success_ 1185 #endif 1186 #if !defined(_Return_type_success_) 1187 # define _Return_type_success_(expr) 1188 # define SALIERI_DEFINED_Return_type_success 1189 #endif 1190 1191 #if defined(_Success_) && defined(SALIERI_DEFINED_Success) 1192 # undef _Success_ 1193 #endif 1194 #if !defined(_Success_) 1195 # define _Success_(expr) 1196 # define SALIERI_DEFINED_Success 1197 #endif 1198 1199 /* Annotating Structs and Classes 1200 * 1201 * https://msdn.microsoft.com/en-us/library/jj159528.aspx 1202 *****/ 1203 1204 #if defined(_Field_range_) && defined(SALIERI_DEFINED_Field_range) 1205 # undef _Field_range_ 1206 #endif 1207 #if !defined(_Field_range_) 1208 # define _Field_range_(low, high) 1209 # define SALIERI_DEFINED_Field_range 1210 #endif 1211 1212 #if defined(_Field_size_) && defined(SALIERI_DEFINED_Field_size) 1213 # undef _Field_size_ 1214 #endif 1215 #if !defined(_Field_size_) 1216 # define _Field_size_(size) 1217 # define SALIERI_DEFINED_Field_size 1218 #endif 1219 1220 #if defined(_Field_size_part_) && defined(SALIERI_DEFINED_Field_size_part) 1221 # undef _Field_size_part_ 1222 #endif 1223 #if !defined(_Field_size_part_) 1224 # define _Field_size_part_(size) 1225 # define SALIERI_DEFINED_Field_size_part 1226 #endif 1227 1228 #if defined(_Field_size_opt_) && defined(SALIERI_DEFINED_Field_size_opt) 1229 # undef _Field_size_opt_ 1230 #endif 1231 #if !defined(_Field_size_opt_) 1232 # define _Field_size_opt_(size) 1233 # define SALIERI_DEFINED_Field_size_opt 1234 #endif 1235 1236 #if defined(_Field_size_bytes_) && defined(SALIERI_DEFINED_Field_size_bytes) 1237 # undef _Field_size_bytes_ 1238 #endif 1239 #if !defined(_Field_size_bytes_) 1240 # define _Field_size_bytes_(size) 1241 # define SALIERI_DEFINED_Field_size_bytes 1242 #endif 1243 1244 #if defined(_Field_size_bytes_opt_) && defined(SALIERI_DEFINED_Field_size_bytes_opt) 1245 # undef _Field_size_bytes_opt_ 1246 #endif 1247 #if !defined(_Field_size_bytes_opt_) 1248 # define _Field_size_bytes_opt_(size) 1249 # define SALIERI_DEFINED_Field_size_bytes_opt 1250 #endif 1251 1252 #if defined(_Field_size_part_) && defined(SALIERI_DEFINED_Field_size_part) 1253 # undef _Field_size_part_ 1254 #endif 1255 #if !defined(_Field_size_part_) 1256 # define _Field_size_part_(size, count) 1257 # define SALIERI_DEFINED_Field_size_part 1258 #endif 1259 1260 #if defined(_Field_size_part_opt_) && defined(SALIERI_DEFINED_Field_size_part_opt) 1261 # undef _Field_size_part_opt_ 1262 #endif 1263 #if !defined(_Field_size_part_opt_) 1264 # define _Field_size_part_opt_(size, count) 1265 # define SALIERI_DEFINED_Field_size_part_opt 1266 #endif 1267 1268 #if defined(_Field_size_bytes_part_) && defined(SALIERI_DEFINED_Field_size_bytes_part) 1269 # undef _Field_size_bytes_part_ 1270 #endif 1271 #if !defined(_Field_size_bytes_part_) 1272 # define _Field_size_bytes_part_(size, count) 1273 # define SALIERI_DEFINED_Field_size_bytes_part 1274 #endif 1275 1276 #if defined(_Field_size_bytes_part_opt_) && defined(SALIERI_DEFINED_Field_size_bytes_part_opt) 1277 # undef _Field_size_bytes_part_opt_ 1278 #endif 1279 #if !defined(_Field_size_bytes_part_opt_) 1280 # define _Field_size_bytes_part_opt_(size, count) 1281 # define SALIERI_DEFINED_Field_size_bytes_part_opt 1282 #endif 1283 1284 #if defined(_Field_size_full_) && defined(SALIERI_DEFINED_Field_size_full) 1285 # undef _Field_size_full_ 1286 #endif 1287 #if !defined(_Field_size_full_) 1288 # define _Field_size_full_(size) 1289 # define SALIERI_DEFINED_Field_size_full 1290 #endif 1291 1292 #if defined(_Field_size_full_opt_) && defined(SALIERI_DEFINED_Field_size_full_opt) 1293 # undef _Field_size_full_opt_ 1294 #endif 1295 #if !defined(_Field_size_full_opt_) 1296 # define _Field_size_full_opt_(size) 1297 # define SALIERI_DEFINED_Field_size_full_opt 1298 #endif 1299 1300 #if defined(_Field_size_bytes_full_) && defined(SALIERI_DEFINED_Field_size_bytes_full) 1301 # undef _Field_size_bytes_full_ 1302 #endif 1303 #if !defined(_Field_size_bytes_full_) 1304 # define _Field_size_bytes_full_(size) 1305 # define SALIERI_DEFINED_Field_size_bytes_full 1306 #endif 1307 1308 #if defined(_Field_size_bytes_full_opt_) && defined(SALIERI_DEFINED_Field_size_bytes_full_opt) 1309 # undef _Field_size_bytes_full_opt_ 1310 #endif 1311 #if !defined(_Field_size_bytes_full_opt_) 1312 # define _Field_size_bytes_full_opt_(size) 1313 # define SALIERI_DEFINED_Field_size_bytes_full_opt 1314 #endif 1315 1316 #if defined(_Struct_size_bytes_) && defined(SALIERI_DEFINED_Struct_size_bytes) 1317 # undef _Struct_size_bytes_ 1318 #endif 1319 #if !defined(_Struct_size_bytes_) 1320 # define _Struct_size_bytes_(size) 1321 # define SALIERI_DEFINED_Struct_size_bytes 1322 #endif 1323 1324 /* Annotating Locking Behavior 1325 * 1326 * https://msdn.microsoft.com/en-us/library/hh916381.aspx 1327 *****/ 1328 1329 #if defined(_Acquires_exclusive_lock_) && defined(SALIERI_DEFINED_Acquires_exclusive_lock) 1330 # undef _Acquires_exclusive_lock_ 1331 #endif 1332 #if !defined(_Acquires_exclusive_lock_) 1333 # define _Acquires_exclusive_lock_(expr) 1334 # define SALIERI_DEFINED_Acquires_exclusive_lock 1335 #endif 1336 1337 #if defined(_Acquires_lock_) && defined(SALIERI_DEFINED_Acquires_lock) 1338 # undef _Acquires_lock_ 1339 #endif 1340 #if !defined(_Acquires_lock_) 1341 # define _Acquires_lock_(expr) 1342 # define SALIERI_DEFINED_Acquires_lock 1343 #endif 1344 1345 #if defined(_Acquires_nonreentrant_lock_) && defined(SALIERI_DEFINED_Acquires_nonreentrant_lock) 1346 # undef _Acquires_nonreentrant_lock_ 1347 #endif 1348 #if !defined(_Acquires_nonreentrant_lock_) 1349 # define _Acquires_nonreentrant_lock_(expr) 1350 # define SALIERI_DEFINED_Acquires_nonreentrant_lock 1351 #endif 1352 1353 #if defined(_Acquires_shared_lock_) && defined(SALIERI_DEFINED_Acquires_shared_lock) 1354 # undef _Acquires_shared_lock_ 1355 #endif 1356 #if !defined(_Acquires_shared_lock_) 1357 # define _Acquires_shared_lock_(expr) 1358 # define SALIERI_DEFINED_Acquires_shared_lock 1359 #endif 1360 1361 #if defined(_Create_lock_level_) && defined(SALIERI_DEFINED_Create_lock_level) 1362 # undef _Create_lock_level_ 1363 #endif 1364 #if !defined(_Create_lock_level_) 1365 # define _Create_lock_level_(name) 1366 # define SALIERI_DEFINED_Create_lock_level 1367 #endif 1368 1369 #if defined(_Has_lock_kind_) && defined(SALIERI_DEFINED_Has_lock_kind) 1370 # undef _Has_lock_kind_ 1371 #endif 1372 #if !defined(_Has_lock_kind_) 1373 # define _Has_lock_kind_(kind) 1374 # define SALIERI_DEFINED_Has_lock_kind 1375 #endif 1376 1377 #if defined(_Has_lock_level_) && defined(SALIERI_DEFINED_Has_lock_level) 1378 # undef _Has_lock_level_ 1379 #endif 1380 #if !defined(_Has_lock_level_) 1381 # define _Has_lock_level_(name) 1382 # define SALIERI_DEFINED_Has_lock_level 1383 #endif 1384 1385 #if defined(_Lock_level_order_) && defined(SALIERI_DEFINED_Lock_level_order) 1386 # undef _Lock_level_order_ 1387 #endif 1388 #if !defined(_Lock_level_order_) 1389 # define _Lock_level_order_(name1, name2) 1390 # define SALIERI_DEFINED_Lock_level_order 1391 #endif 1392 1393 #if defined(_Post_same_lock_) && defined(SALIERI_DEFINED_Post_same_lock) 1394 # undef _Post_same_lock_ 1395 #endif 1396 #if !defined(_Post_same_lock_) 1397 # define _Post_same_lock_(expr1, expr2) 1398 # define SALIERI_DEFINED_Post_same_lock 1399 #endif 1400 1401 #if defined(_Releases_exclusive_lock_) && defined(SALIERI_DEFINED_Releases_exclusive_lock) 1402 # undef _Releases_exclusive_lock_ 1403 #endif 1404 #if !defined(_Releases_exclusive_lock_) 1405 # define _Releases_exclusive_lock_(expr) 1406 # define SALIERI_DEFINED_Releases_exclusive_lock 1407 #endif 1408 1409 #if defined(_Releases_lock_) && defined(SALIERI_DEFINED_Releases_lock) 1410 # undef _Releases_lock_ 1411 #endif 1412 #if !defined(_Releases_lock_) 1413 # define _Releases_lock_(expr) 1414 # define SALIERI_DEFINED_Releases_lock 1415 #endif 1416 1417 #if defined(_Releases_nonreentrant_lock_) && defined(SALIERI_DEFINED_Releases_nonreentrant_lock) 1418 # undef _Releases_nonreentrant_lock_ 1419 #endif 1420 #if !defined(_Releases_nonreentrant_lock_) 1421 # define _Releases_nonreentrant_lock_(expr) 1422 # define SALIERI_DEFINED_Releases_nonreentrant_lock 1423 #endif 1424 1425 #if defined(_Releases_shared_lock_) && defined(SALIERI_DEFINED_Releases_shared_lock) 1426 # undef _Releases_shared_lock_ 1427 #endif 1428 #if !defined(_Releases_shared_lock_) 1429 # define _Releases_shared_lock_(expr) 1430 # define SALIERI_DEFINED_Releases_shared_lock 1431 #endif 1432 1433 #if defined(_Requires_lock_held_) && defined(SALIERI_DEFINED_Requires_lock_held) 1434 # undef _Requires_lock_held_ 1435 #endif 1436 #if !defined(_Requires_lock_held_) 1437 # define _Requires_lock_held_(expr) 1438 # define SALIERI_DEFINED_Requires_lock_held 1439 #endif 1440 1441 #if defined(_Requires_lock_not_held_) && defined(SALIERI_DEFINED_Requires_lock_not_held) 1442 # undef _Requires_lock_not_held_ 1443 #endif 1444 #if !defined(_Requires_lock_not_held_) 1445 # define _Requires_lock_not_held_(expr) 1446 # define SALIERI_DEFINED_Requires_lock_not_held 1447 #endif 1448 1449 #if defined(_Requires_no_locks_held_) && defined(SALIERI_DEFINED_Requires_no_locks_held) 1450 # undef _Requires_no_locks_held_ 1451 #endif 1452 #if !defined(_Requires_no_locks_held_) 1453 # define _Requires_no_locks_held_ 1454 # define SALIERI_DEFINED_Requires_no_locks_held 1455 #endif 1456 1457 #if defined(_Requires_shared_lock_held_) && defined(SALIERI_DEFINED_Requires_shared_lock_held) 1458 # undef _Requires_shared_lock_held_ 1459 #endif 1460 #if !defined(_Requires_shared_lock_held_) 1461 # define _Requires_shared_lock_held_(expr) 1462 # define SALIERI_DEFINED_Requires_shared_lock_held 1463 #endif 1464 1465 #if defined(_Requires_exclusive_lock_held_) && defined(SALIERI_DEFINED_Requires_exclusive_lock_held) 1466 # undef _Requires_exclusive_lock_held_ 1467 #endif 1468 #if !defined(_Requires_exclusive_lock_held_) 1469 # define _Requires_exclusive_lock_held_(expr) 1470 # define SALIERI_DEFINED_Requires_exclusive_lock_held 1471 #endif 1472 1473 /* Shared Data Access Annotations */ 1474 1475 #if defined(_Guarded_by_) && defined(SALIERI_DEFINED_Guarded_by) 1476 # undef _Guarded_by_ 1477 #endif 1478 #if !defined(_Guarded_by_) 1479 # define _Guarded_by_(expr) 1480 # define SALIERI_DEFINED_Guarded_by 1481 #endif 1482 1483 #if defined(_Interlocked_) && defined(SALIERI_DEFINED_Interlocked) 1484 # undef _Interlocked_ 1485 #endif 1486 #if !defined(_Interlocked_) 1487 # define _Interlocked_ 1488 # define SALIERI_DEFINED_Interlocked 1489 #endif 1490 1491 #if defined(_Interlocked_operand_) && defined(SALIERI_DEFINED_Interlocked_operand) 1492 # undef _Interlocked_operand_ 1493 #endif 1494 #if !defined(_Interlocked_operand_) 1495 # define _Interlocked_operand_ 1496 # define SALIERI_DEFINED_Interlocked_operand 1497 #endif 1498 1499 #if defined(_Write_guarded_by_) && defined(SALIERI_DEFINED_Write_guarded_by) 1500 # undef _Write_guarded_by_ 1501 #endif 1502 #if !defined(_Write_guarded_by_) 1503 # define _Write_guarded_by_(expr) 1504 # define SALIERI_DEFINED_Write_guarded_by 1505 #endif 1506 1507 /* Specifying When and Where an Annotation Applies 1508 * 1509 * https://msdn.microsoft.com/en-us/library/jj159526.aspx 1510 *****/ 1511 1512 #if defined(_At_) && defined(SALIERI_DEFINED_At) 1513 # undef _At_ 1514 #endif 1515 #if !defined(_At_) 1516 # define _At_(expr, anno_list) 1517 # define SALIERI_DEFINED_At 1518 #endif 1519 1520 #if defined(_At_buffer_) && defined(SALIERI_DEFINED_At_buffer) 1521 # undef _At_buffer_ 1522 #endif 1523 #if !defined(_At_buffer_) 1524 # define _At_buffer_(expr, iter, elem_count, anno_list) 1525 # define SALIERI_DEFINED_At_buffer 1526 #endif 1527 1528 #if defined(_Group_) && defined(SALIERI_DEFINED_Group) 1529 # undef _Group_ 1530 #endif 1531 #if !defined(_Group_) 1532 # define _Group_(anno_list) 1533 # define SALIERI_DEFINED_Group 1534 #endif 1535 1536 #if defined(_When_) && defined(SALIERI_DEFINED_When) 1537 # undef _When_ 1538 #endif 1539 #if !defined(_When_) 1540 # define _When_(expr, anno_list) 1541 # define SALIERI_DEFINED_When 1542 #endif 1543 1544 /* Intrinsic Functions 1545 * 1546 * https://msdn.microsoft.com/en-us/library/jj159527.aspx 1547 *****/ 1548 1549 /* General Purpose */ 1550 1551 #if defined(_Curr_) && defined(SALIERI_DEFINED_Curr) 1552 # undef _Curr_ 1553 #endif 1554 #if !defined(_Curr_) 1555 # define _Curr_ 1556 # define SALIERI_DEFINED_Curr 1557 #endif 1558 1559 #if defined(_Inexpressible_) && defined(SALIERI_DEFINED_Inexpressible) 1560 # undef _Inexpressible_ 1561 #endif 1562 #if !defined(_Inexpressible_) 1563 # define _Inexpressible_(expr) 1564 # define SALIERI_DEFINED_Inexpressible 1565 #endif 1566 1567 #if defined(_Nullterm_length_) && defined(SALIERI_DEFINED_Nullterm_length) 1568 # undef _Nullterm_length_ 1569 #endif 1570 #if !defined(_Nullterm_length_) 1571 # define _Nullterm_length_(param) 1572 # define SALIERI_DEFINED_Nullterm_length 1573 #endif 1574 1575 #if defined(_Old_) && defined(SALIERI_DEFINED_Old) 1576 # undef _Old_ 1577 #endif 1578 #if !defined(_Old_) 1579 # define _Old_(expr) 1580 # define SALIERI_DEFINED_Old 1581 #endif 1582 1583 #if defined(_Param_) && defined(SALIERI_DEFINED_Param) 1584 # undef _Param_ 1585 #endif 1586 #if !defined(_Param_) 1587 # define _Param_(n) 1588 # define SALIERI_DEFINED_Param 1589 #endif 1590 1591 /* String Specific */ 1592 1593 #if defined(_String_length_) && defined(SALIERI_DEFINED_String_length) 1594 # undef _String_length_ 1595 #endif 1596 #if !defined(_String_length_) 1597 # define _String_length_(param) 1598 # define SALIERI_DEFINED_String_length 1599 #endif 1600 1601 #if defined(SALIERI_VERSION) 1602 # undef SALIERI_VERSION 1603 #endif 1604 1605 #define SALIERI_VERSION 1 1606 1607 #endif /* !defined(SALIERI_VERSION) || (SALIERI_VERSION < X) */ 1608