/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #ifndef SAL_HXX #define SAL_HXX #include #ifdef __GNUC__ # define __inner_checkReturn __attribute__((warn_unused_result)) #elif defined(_MSC_VER) # define __inner_checkReturn __declspec("SAL_checkReturn") #else # define __inner_checkReturn #endif #define __checkReturn __inner_checkReturn /* Input parameters */ #define _In_ #define _In_opt_ #define _In_z_ #define _In_opt_z_ #define _In_reads_(s) #define _In_reads_opt_(s) #define _In_reads_bytes_(s) #define _In_reads_bytes_opt_(s) #define _In_reads_z_(s) #define _In_reads_opt_z_(s) #define _In_reads_or_z_(s) #define _In_reads_or_z_opt_(s) #define _In_reads_to_ptr_(p) #define _In_reads_to_ptr_opt_(p) #define _In_reads_to_ptr_z_(p) #define _In_reads_to_ptr_opt_z_(p) #define _In_count_(s) #define _In_opt_count_(s) #define _In_bytecount_(s) #define _In_opt_bytecount_(s) #define _In_count_c_(s) #define _In_opt_count_c_(s) #define _In_bytecount_c_(s) #define _In_opt_bytecount_c_(s) #define _In_z_count_(s) #define _In_opt_z_count_(s) #define _In_z_bytecount_(s) #define _In_opt_z_bytecount_(s) #define _In_z_count_c_(s) #define _In_opt_z_count_c_(s) #define _In_z_bytecount_c_(s) #define _In_opt_z_bytecount_c_(s) #define _In_ptrdiff_count_(s) #define _In_opt_ptrdiff_count_(s) #define _In_count_x_(s) #define _In_opt_count_x_(s) #define _In_bytecount_x_(s) #define _In_opt_bytecount_x_(s) /* Output parameters */ #define _Out_ #define _Out_opt_ #define _Out_writes_(s) #define _Out_writes_opt_(s) #define _Out_writes_bytes_(s) #define _Out_writes_bytes_opt_(s) #define _Out_writes_z_(s) #define _Out_writes_opt_z_(s) #define _Out_writes_to_(s, c) #define _Out_writes_to_opt_(s, c) #define _Out_writes_all_(s) #define _Out_writes_all_opt_(s) #define _Out_writes_bytes_to_(s, c) #define _Out_writes_bytes_to_opt_(s, c) #define _Out_writes_bytes_all_(s) #define _Out_writes_bytes_all_opt_(s) #define _Out_writes_to_ptr_(p) #define _Out_writes_to_ptr_opt_(p) #define _Out_writes_to_ptr_z_(p) #define _Out_writes_to_ptr_opt_z_(p) #define _Out_cap_(s) #define _Out_opt_cap_(s) #define _Out_bytecap_(s) #define _Out_opt_bytecap_(s) #define _Out_cap_c_(s) #define _Out_opt_cap_c_(s) #define _Out_bytecap_c_(s) #define _Out_opt_bytecap_c_(s) #define _Out_cap_m_(m, s) #define _Out_opt_cap_m_(m, s) #define _Out_z_cap_m_(m, s) #define _Out_opt_z_cap_m_(m, s) #define _Out_ptrdiff_cap_(s) #define _Out_opt_ptrdiff_cap_(s) #define _Out_cap_x_(s) #define _Out_opt_cap_x_(s) #define _Out_bytecap_x_(s) #define _Out_opt_bytecap_x_(s) #define _Out_z_cap_(s) #define _Out_opt_z_cap_(s) #define _Out_z_bytecap_(s) #define _Out_opt_z_bytecap_(s) #define _Out_z_cap_c_(s) #define _Out_opt_z_cap_c_(s) #define _Out_z_bytecap_c_(s) #define _Out_opt_z_bytecap_c_(s) #define _Out_z_cap_x_(s) #define _Out_opt_z_cap_x_(s) #define _Out_z_bytecap_x_(s) #define _Out_opt_z_bytecap_x_(s) #define _Out_cap_post_count_(a, o) #define _Out_opt_cap_post_count_(a, o) #define _Out_bytecap_post_bytecount_(a, o) #define _Out_opt_bytecap_post_bytecount_(a, o) #define _Out_z_cap_post_count_(a, o) #define _Out_opt_z_cap_post_count_(a, o) #define _Out_z_bytecap_post_bytecount_(a, o) #define _Out_opt_z_bytecap_post_bytecount_(a, o) #define _Out_capcount_(c) #define _Out_opt_capcount_(c) #define _Out_bytecapcount_(c) #define _Out_opt_bytecapcount_(c) #define _Out_capcount_x_(c) #define _Out_opt_capcount_x_(c) #define _Out_bytecapcount_x_(c) #define _Out_opt_bytecapcount_x_(c) #define _Out_z_capcount_(c) #define _Out_opt_z_capcount_(c) #define _Out_z_bytecapcount_(c) #define _Out_opt_z_bytecapcount_(c) /* Inout parameters */ #define _Inout_ #define _Inout_opt_ #define _Inout_z_ #define _Inout_opt_z_ #define _Inout_updates_(s) #define _Inout_updates_opt_(s) #define _Inout_updates_z_(s) #define _Inout_updates_opt_z_(s) #define _Inout_updates_to_(s, c) #define _Inout_updates_to_opt_(s, c) #define _Inout_updates_all_(s) #define _Inout_updates_all_opt_(s) #define _Inout_updates_bytes_(s) #define _Inout_updates_bytes_opt_(s) #define _Inout_updates_bytes_to_(s, c) #define _Inout_updates_bytes_to_opt_(s, c) #define _Inout_updates_bytes_all_(s) #define _Inout_updates_bytes_all_opt_(s) #define _Inout_count_(s) #define _Inout_opt_count_(s) #define _Inout_bytecount_(s) #define _Inout_opt_bytecount_(s) #define _Inout_count_c_(s) #define _Inout_opt_count_c_(s) #define _Inout_bytecount_c_(s) #define _Inout_opt_bytecount_c_(s) #define _Inout_z_count_(s) #define _Inout_opt_z_count_(s) #define _Inout_z_bytecount_(s) #define _Inout_opt_z_bytecount_(s) #define _Inout_z_count_c_(s) #define _Inout_opt_z_count_c_(s) #define _Inout_z_bytecount_c_(s) #define _Inout_opt_z_bytecount_c_(s) #define _Inout_ptrdiff_count_(s) #define _Inout_opt_ptrdiff_count_(s) #define _Inout_count_x_(s) #define _Inout_opt_count_x_(s) #define _Inout_bytecount_x_(s) #define _Inout_opt_bytecount_x_(s) #define _Inout_cap_(s) #define _Inout_opt_cap_(s) #define _Inout_bytecap_(s) #define _Inout_opt_bytecap_(s) #define _Inout_cap_c_(s) #define _Inout_opt_cap_c_(s) #define _Inout_bytecap_c_(s) #define _Inout_opt_bytecap_c_(s) #define _Inout_cap_x_(s) #define _Inout_opt_cap_x_(s) #define _Inout_bytecap_x_(s) #define _Inout_opt_bytecap_x_(s) #define _Inout_z_cap_(s) #define _Inout_opt_z_cap_(s) #define _Inout_z_bytecap_(s) #define _Inout_opt_z_bytecap_(s) #define _Inout_z_cap_c_(s) #define _Inout_opt_z_cap_c_(s) #define _Inout_z_bytecap_c_(s) #define _Inout_opt_z_bytecap_c_(s) #define _Inout_z_cap_x_(s) #define _Inout_opt_z_cap_x_(s) #define _Inout_z_bytecap_x_(s) #define _Inout_opt_z_bytecap_x_(s) /* Pointer to pointer parameters */ #define _Outptr_ #define _Outptr_result_maybenull_ #define _Outptr_opt_ #define _Outptr_opt_result_maybenull_ #define _Outptr_result_z_ #define _Outptr_opt_result_z_ #define _Outptr_result_maybenull_z_ #define _Outptr_opt_result_maybenull_z_ #define _Outptr_result_nullonfailure_ #define _Outptr_opt_result_nullonfailure_ #define _COM_Outptr_ #define _COM_Outptr_result_maybenull_ #define _COM_Outptr_opt_ #define _COM_Outptr_opt_result_maybenull_ #define _Outptr_result_buffer_(s) #define _Outptr_opt_result_buffer_(s) #define _Outptr_result_buffer_to_(s, c) #define _Outptr_opt_result_buffer_to_(s, c) #define _Outptr_result_buffer_all_(s) #define _Outptr_opt_result_buffer_all_(s) #define _Outptr_result_buffer_maybenull_(s) #define _Outptr_opt_result_buffer_maybenull_(s) #define _Outptr_result_buffer_to_maybenull_(s, c) #define _Outptr_opt_result_buffer_to_maybenull_(s, c) #define _Outptr_result_buffer_all_maybenull_(s) #define _Outptr_opt_result_buffer_all_maybenull_(s) #define _Outptr_result_bytebuffer_(s) #define _Outptr_opt_result_bytebuffer_(s) #define _Outptr_result_bytebuffer_to_(s, c) #define _Outptr_opt_result_bytebuffer_to_(s, c) #define _Outptr_result_bytebuffer_all_(s) #define _Outptr_opt_result_bytebuffer_all_(s) #define _Outptr_result_bytebuffer_maybenull_(s) #define _Outptr_opt_result_bytebuffer_maybenull_(s) #define _Outptr_result_bytebuffer_to_maybenull_(s, c) #define _Outptr_opt_result_bytebuffer_to_maybenull_(s, c) #define _Outptr_result_bytebuffer_all_maybenull_(s) #define _Outptr_opt_result_bytebuffer_all_maybenull_(s) /* Output reference parameters */ #define _Outref_ #define _Outref_result_maybenull_ #define _Outref_result_buffer_(s) #define _Outref_result_bytebuffer_(s) #define _Outref_result_buffer_to_(s, c) #define _Outref_result_bytebuffer_to_(s, c) #define _Outref_result_buffer_all_(s) #define _Outref_result_bytebuffer_all_(s) #define _Outref_result_buffer_maybenull_(s) #define _Outref_result_bytebuffer_maybenull_(s) #define _Outref_result_buffer_to_maybenull_(s, c) #define _Outref_result_bytebuffer_to_maybenull_(s, c) #define _Outref_result_buffer_all_maybenull_(s) #define _Outref_result_bytebuffer_all_maybenull_(s) #define _Outref_result_nullonfailure_ #define _Result_nullonfailure_ #define _Result_zeroonfailure_ /* Return values */ #define _Ret_z_ #define _Ret_maybenull_z_ #define _Ret_notnull_ #define _Ret_maybenull_ #define _Ret_null_ #define _Ret_valid_ #define _Ret_writes_(s) #define _Ret_writes_z_(s) #define _Ret_writes_bytes_(s) #define _Ret_writes_maybenull_(s) #define _Ret_writes_maybenull_z_(s) #define _Ret_writes_bytes_maybenull_(s) #define _Ret_writes_to_(s, c) #define _Ret_writes_bytes_to_(s, c) #define _Ret_writes_to_maybenull_(s, c) #define _Ret_writes_bytes_to_maybenull_(s, c) #define _Points_to_data_ #define _Literal_ #define _Notliteral_ #define _Deref_ret_range_(l,u) #define _Unchanged_(e) /* Optional pointer parameters */ #define __in_opt #define __out_opt #define __inout_opt /* Other common annotations */ #define _In_range_(low, hi) #define _Out_range_(low, hi) #define _Ret_range_(low, hi) #define _Deref_in_range_(low, hi) #define _Deref_out_range_(low, hi) #define _Deref_inout_range_(low, hi) #define _Struct_size_bytes_(size) /* Function annotations */ #define _Called_from_function_class_(name) #define _Check_return_ __checkReturn #define _Function_class_(name) #define _Raises_SEH_exception_ #define _Maybe_raises_SEH_exception_ #define _Must_inspect_result_ #define _Use_decl_annotations_ /* Success/failure annotations */ #define _Always_(anno_list) #define _On_failure_(anno_list) #define _Return_type_success_(expr) #define _Success_(expr) #define _Reserved_ #define _Const_ /* Buffer properties */ #define _Readable_bytes_(s) #define _Readable_elements_(s) #define _Writable_bytes_(s) #define _Writable_elements_(s) #define _Null_terminated_ #define _NullNull_terminated_ /* Field properties */ #define _Field_size_(s) #define _Field_size_full_(s) #define _Field_size_full_opt_(s) #define _Field_size_opt_(s) #define _Field_size_part_(s, c) #define _Field_size_part_opt_(s, c) #define _Field_size_bytes_(size) #define _Field_size_bytes_full_(size) #define _Field_size_bytes_full_opt_(s) #define _Field_size_bytes_opt_(s) #define _Field_size_bytes_part_(s, c) #define _Field_size_bytes_part_opt_(s, c) #define _Field_z_ #define _Field_range_(min, max) /* Structural annotations */ #define _At_(e, a) #define _At_buffer_(e, i, c, a) #define _Group_(a) #define _When_(e, a) /* printf/scanf annotations */ #define _Printf_format_string_ #define _Scanf_format_string_ #define _Scanf_s_format_string_ #define _Format_string_impl_(kind,where) #define _Printf_format_string_params_(x) #define _Scanf_format_string_params_(x) #define _Scanf_s_format_string_params_(x) /* Analysis */ #define _Analysis_mode_(x) #define _Analysis_assume_(expr) #define _Analysis_assume_nullterminated_(expr) #define _Post_ #define _Post_equal_to_(expr) #define _Post_readable_byte_size_(s) #define _Post_readable_size_(s) #define _Post_satisfies_(c) #define _Post_writable_byte_size_(s) #define _Post_writable_size_(s) #define _Pre_equal_to_(expr) #define _Pre_notnull_ #define _Pre_readable_byte_size_(s) #define _Pre_readable_size_(s) #define _Pre_satisfies_(c) #define _Pre_writable_byte_size_(s) #define _Pre_writable_size_(s) #define _Strict_type_match_ /* FIXME: __in macro conflicts with argument names in libstdc++. For this reason, * we disable it for C++. This should be fixed in libstdc++ so we can uncomment * it in fixed version here. */ #if !defined(__cplusplus) || !defined(__GNUC__) #define __in #define __out #endif #define __bcount(size) #define __ecount(size) #define __in_bcount(size) #define __in_bcount_nz(size) #define __in_bcount_z(size) #define __in_ecount(size) #define __in_ecount_nz(size) #define __in_ecount_z(size) #define __out_bcount(size) #define __out_bcount_nz(size) #define __out_bcount_z(size) #define __out_bcount_full(size) #define __out_bcount_full_z(size) #define __out_bcount_part(size, length) #define __out_bcount_part_z(size, length) #define __out_ecount(size) #define __out_ecount_nz(size) #define __out_ecount_z(size) #define __out_ecount_full(size) #define __out_ecount_full_z(size) #define __out_ecount_part(size, length) #define __out_ecount_part_z(size, length) #define __inout #define __inout_bcount(size) #define __inout_bcount_nz(size) #define __inout_bcount_z(size) #define __inout_bcount_full(size) #define __inout_bcount_part(size, length) #define __inout_ecount(size) #define __inout_ecount_nz(size) #define __inout_ecount_z(size) #define __inout_ecount_full(size) #define __inout_ecount_part(size, length) #define __deref #define __deref_opt_out #define __deref_opt_out_bcount(x) #define __deref_out #define __deref_out_ecount(size) #define __deref_out_opt #define __range(x,y) #endif