1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 
7 #ifndef SAL_HXX
8 #define SAL_HXX
9 
10 #ifdef __GNUC__
11 #  define __inner_checkReturn __attribute__((warn_unused_result))
12 #elif defined(_MSC_VER)
13 #  define __inner_checkReturn __declspec("SAL_checkReturn")
14 #else
15 #  define __inner_checkReturn
16 #endif
17 
18 #define __checkReturn __inner_checkReturn
19 
20 /* Pointer parameters */
21 #define _In_
22 #define _Out_
23 #define _Inout_
24 #define _In_z_
25 #define _Inout_z_
26 #define _In_reads_(s)
27 #define _In_reads_bytes_(s)
28 #define _In_reads_z_(s)
29 #define _In_reads_or_z_(s)
30 #define _Out_writes_(s)
31 #define _Out_writes_bytes_(s)
32 #define _Out_writes_z_(s)
33 #define _Inout_updates_(s)
34 #define _Inout_updates_bytes_(s)
35 #define _Inout_updates_z_(s)
36 #define _Out_writes_to_(s,c)
37 #define _Out_writes_bytes_to_(s, c)
38 #define _Out_writes_all_(s)
39 #define _Out_writes_bytes_all_(s)
40 #define _Inout_updates_to_(s, c)
41 #define _Inout_updates_bytes_to_(s, c)
42 #define _Inout_updates_all_(s)
43 #define _Inout_updates_bytes_all_(s)
44 #define _In_reads_to_ptr_(p)
45 #define _In_reads_to_ptr_z_(p)
46 #define _Out_writes_to_ptr_(p)
47 #define _Out_writes_to_ptr_z(p)
48 
49 /* Optional pointer parameters */
50 #define __in_opt
51 #define __out_opt
52 #define __inout_opt
53 #define _In_opt_
54 #define _Out_opt_
55 #define _Inout_opt_
56 #define _In_opt_z_
57 #define _Inout_opt_z_
58 #define _In_reads_opt_(s)
59 #define _In_reads_bytes_opt_(s)
60 #define _In_reads_opt_z_(s)
61 
62 #define _Out_writes_opt_(s)
63 #define _Out_writes_opt_z_(s)
64 #define _Inout_updates_opt_(s)
65 #define _Inout_updates_bytes_opt_(s)
66 #define _Inout_updates_opt_z_(s)
67 #define _Out_writes_to_opt_(s, c)
68 #define _Out_writes_bytes_to_opt_(s, c)
69 #define _Out_writes_all_opt_(s)
70 #define _Out_writes_bytes_all_opt_(s)
71 
72 #define _Inout_updates_to_opt_(s, c)
73 #define _Inout_updates_bytes_to_opt_(s, c)
74 #define _Inout_updates_all_opt_(s)
75 #define _Inout_updates_bytes_all_opt_(s)
76 #define _In_reads_to_ptr_opt_(p)
77 #define _In_reads_to_ptr_opt_z_(p)
78 #define _Out_writes_to_ptr_opt_(p)
79 #define _Out_writes_to_ptr_opt_z_(p)
80 
81 /* Output pointer parameters */
82 #define _Outptr_
83 #define _Outptr_opt_
84 #define _Outptr_result_maybenull_
85 #define _Outptr_opt_result_maybenull_
86 #define _Outptr_result_z_
87 #define _Outptr_opt_result_z_
88 #define _Outptr_result_maybenull_z_
89 #define _Outptr_opt_result_maybenull_z_
90 #define _COM_Outptr_
91 #define _COM_Outptr_opt_
92 #define _COM_Outptr_result_maybenull_
93 #define _COM_Outptr_opt_result_maybenull_
94 #define _Outptr_result_buffer_(s)
95 #define _Outptr_result_bytebuffer_(s)
96 #define _Outptr_opt_result_buffer_(s)
97 #define _Outptr_opt_result_bytebuffer_(s)
98 #define _Outptr_result_buffer_to_(s, c)
99 #define _Outptr_result_bytebuffer_to_(s, c)
100 #define _Outptr_result_bytebuffer_maybenull_(s)
101 #define _Outptr_opt_result_buffer_to_(s, c)
102 #define _Outptr_opt_result_bytebuffer_to_(s, c)
103 #define _Result_nullonfailure_
104 #define _Result_zeroonfailure_
105 #define _Outptr_result_nullonfailure_
106 #define _Outptr_opt_result_nullonfailure_
107 #define _Outref_result_nullonfailure_
108 
109 /* Output reference parameters */
110 #define _Outref_
111 #define _Outref_result_maybenull_
112 #define _Outref_result_buffer_(s)
113 #define _Outref_result_bytebuffer_(s)
114 #define _Outref_result_buffer_to_(s, c)
115 #define _Outref_result_bytebuffer_to_(s, c)
116 #define _Outref_result_buffer_all_(s)
117 #define _Outref_result_bytebuffer_all_(s)
118 #define _Outref_result_buffer_maybenull_(s)
119 #define _Outref_result_bytebuffer_maybenull_(s)
120 #define _Outref_result_buffer_to_maybenull_(s, c)
121 #define _Outref_result_bytebuffer_to_maybenull_(s, c)
122 #define _Outref_result_buffer_all_maybenull_(s)
123 #define _Outref_result_bytebuffer_all_maybenull_(s)
124 
125 /* Return values */
126 #define _Ret_z_
127 #define _Ret_writes_(s)
128 #define _Ret_writes_bytes_(s)
129 #define _Ret_writes_z_(s)
130 #define _Ret_writes_bytes_to_(s, c)
131 #define _Ret_writes_maybenull_(s)
132 #define _Ret_writes_to_maybenull_(s, c)
133 #define _Ret_writes_maybenull_z_(s)
134 #define _Ret_maybenull_
135 #define _Ret_maybenull_z_
136 #define _Ret_null_
137 #define _Ret_notnull_
138 #define _Ret_writes_bytes_to_(s, c)
139 #define _Ret_writes_bytes_maybenull_(s)
140 #define _Ret_writes_bytes_to_maybenull_(s, c)
141 
142 /* Other common annotations */
143 #define _In_range_(low, hi)
144 #define _Out_range_(low, hi)
145 #define _Ret_range_(low, hi)
146 #define _Deref_in_range_(low, hi)
147 #define _Deref_out_range_(low, hi)
148 #define _Deref_inout_range_(low, hi)
149 #define _Pre_equal_to_(expr)
150 #define _Post_equal_to_(expr)
151 #define _Struct_size_bytes_(size)
152 
153 /* Function annotations */
154 #define _Called_from_function_class_(name)
155 #define _Check_return_ __checkReturn
156 #define _Function_class_(name)
157 #define _Raises_SEH_exception_
158 #define _Maybe_raises_SEH_exception_
159 #define _Must_inspect_result_
160 #define _Use_decl_annotations_
161 
162 /* Success/failure annotations */
163 #define _Always_(anno_list)
164 #define _On_failure_(anno_list)
165 #define _Return_type_success_(expr)
166 #define _Success_(expr)
167 
168 #define _Reserved_
169 #define _Const_
170 
171 /* Buffer properties */
172 #define _Readable_bytes_(s)
173 #define _Readable_elements_(s)
174 #define _Writable_bytes_(s)
175 #define _Writable_elements_(s)
176 #define _Null_terminated_
177 #define _NullNull_terminated_
178 #define _Pre_readable_size_(s)
179 #define _Pre_writable_size_(s)
180 #define _Pre_readable_byte_size_(s)
181 #define _Pre_writable_byte_size_(s)
182 #define _Post_readable_size_(s)
183 #define _Post_writable_size_(s)
184 #define _Post_readable_byte_size_(s)
185 #define _Post_writable_byte_size_(s)
186 
187 /* Field properties */
188 #define _Field_size_(s)
189 #define _Field_size_full_(s)
190 #define _Field_size_full_opt_(s)
191 #define _Field_size_opt_(s)
192 #define _Field_size_part_(s, c)
193 #define _Field_size_part_opt_(s, c)
194 #define _Field_size_bytes_(size)
195 #define _Field_size_bytes_full_(size)
196 #define _Field_size_bytes_full_opt_(s)
197 #define _Field_size_bytes_opt_(s)
198 #define _Field_size_bytes_part_(s, c)
199 #define _Field_size_bytes_part_opt_(s, c)
200 #define _Field_z_
201 #define _Field_range_(min, max)
202 
203 /* Structural annotations */
204 #define _At_(e, a)
205 #define _At_buffer_(e, i, c, a)
206 #define _Group_(a)
207 #define _When_(e, a)
208 
209 /* printf/scanf annotations */
210 #define _Printf_format_string_
211 #define _Scanf_format_string_
212 #define _Scanf_s_format_string_
213 #define _Format_string_impl_(kind,where)
214 #define _Printf_format_string_params_(x)
215 #define _Scanf_format_string_params_(x)
216 #define _Scanf_s_format_string_params_(x)
217 
218 /* Analysis */
219 #define _Analysis_assume_(expr)
220 #define _Analysis_assume_nullterminated_(expr)
221 
222 /* FIXME: __in macro conflicts with argument names in libstdc++. For this reason,
223  * we disable it for C++. This should be fixed in libstdc++ so we can uncomment
224  * it in fixed version here. */
225 #if !defined(__cplusplus) || !defined(__GNUC__)
226 #define __in
227 #define __out
228 #endif
229 
230 #define __in_bcount(size)
231 #define __in_ecount(size)
232 
233 #define __out_bcount(size)
234 #define __out_bcount_part(size, length)
235 #define __out_ecount(size)
236 
237 #define __inout
238 
239 #define __deref_out_ecount(size)
240 
241 #endif
242 
243