198{
200
201
202 _ERRCHECK(traits::tcscpy_s(assert_buffer, assert_buffer_count, get_box_intro(Character())));
203 _ERRCHECK(traits::tcscat_s(assert_buffer, assert_buffer_count, get_double_newline(Character())));
204
205
206 _ERRCHECK(traits::tcscat_s(assert_buffer, assert_buffer_count, get_program_intro(Character())));
207
209
210 HMODULE asserting_module =
nullptr;
212 GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT | GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
213 static_cast<wchar_t const*
>(return_address),
214 &asserting_module))
215 {
216 asserting_module = nullptr;
217 }
218
219 #ifdef CRTDLL
220
221
223 {
224 asserting_module = nullptr;
225 }
226 #endif
227
229 {
231 }
232
235 {
237
239 pchProg,
241 get_dot_dot_dot(Character()),
242 sizeof(Character) * dot_dot_dot_length
243 ));
244 }
245
246 _ERRCHECK(traits::tcscat_s(assert_buffer, assert_buffer_count, pchProg));
247 _ERRCHECK(traits::tcscat_s(assert_buffer, assert_buffer_count, get_newline(Character())));
248
249
250 _ERRCHECK(traits::tcscat_s(assert_buffer, assert_buffer_count, get_file_intro(Character())));
251
253 {
254 size_t const ffn =
MAXLINELEN - file_intro_count - newline_length;
255
262 {
263 }
264
265
266
267
268 if ((ffn - ffn / 3) < (
len -
p) && ffn / 3 >
p)
269 {
270
271
272 _ERRCHECK(traits::tcsncat_s(assert_buffer, assert_buffer_count,
pch, ffn - dot_dot_dot_length -
p));
273 _ERRCHECK(traits::tcscat_s (assert_buffer, assert_buffer_count, get_dot_dot_dot(Character())));
274 _ERRCHECK(traits::tcscat_s (assert_buffer, assert_buffer_count,
pch +
len -
p));
275 }
276 else if (ffn - ffn / 3 >
len -
p)
277 {
278
279
281 _ERRCHECK(traits::tcsncat_s(assert_buffer, assert_buffer_count,
pch, ffn - dot_dot_dot_length -
p));
282 _ERRCHECK(traits::tcscat_s (assert_buffer, assert_buffer_count, get_dot_dot_dot(Character())));
283 _ERRCHECK(traits::tcscat_s (assert_buffer, assert_buffer_count,
pch +
len -
p));
284 }
285 else
286 {
287
288
289 _ERRCHECK(traits::tcsncat_s(assert_buffer, assert_buffer_count,
pch, ffn - ffn / 3 - dot_dot_dot_length));
290 _ERRCHECK(traits::tcscat_s (assert_buffer, assert_buffer_count, get_dot_dot_dot(Character())));
291 _ERRCHECK(traits::tcsncat_s(assert_buffer, assert_buffer_count,
pch +
len -
p, ffn / 6 - 1));
292 _ERRCHECK(traits::tcscat_s (assert_buffer, assert_buffer_count, get_dot_dot_dot(Character())));
293 _ERRCHECK(traits::tcscat_s (assert_buffer, assert_buffer_count,
pch +
len - (ffn / 3 - ffn / 6 - 2)));
294 }
295 }
296 else
297 {
298
300 }
301
302 _ERRCHECK(traits::tcscat_s(assert_buffer, assert_buffer_count, get_newline(Character())));
303
304
305 _ERRCHECK(traits::tcscat_s(assert_buffer, assert_buffer_count, get_line_intro(Character())));
308 assert_buffer + traits::tcslen(assert_buffer),
309 assert_buffer_count - traits::tcslen(assert_buffer),
310 10));
311 _ERRCHECK(traits::tcscat_s(assert_buffer, assert_buffer_count, get_double_newline(Character())));
312
313
314 _ERRCHECK(traits::tcscat_s(assert_buffer, assert_buffer_count, get_expression_intro(Character())));
315
316 size_t const characters_used =
317 traits::tcslen(assert_buffer) +
318 2 * double_newline_length +
319 info_intro_length +
320 help_intro_count;
321
322 if (characters_used + traits::tcslen(expression) > assert_buffer_count)
323 {
324 size_t const characters_to_write = assert_buffer_count - (characters_used + dot_dot_dot_length);
326 assert_buffer,
327 assert_buffer_count,
328 expression,
329 characters_to_write));
330 _ERRCHECK(traits::tcscat_s(assert_buffer, assert_buffer_count, get_dot_dot_dot(Character())));
331 }
332 else
333 {
334 _ERRCHECK(traits::tcscat_s(assert_buffer, assert_buffer_count, expression));
335 }
336
337 _ERRCHECK(traits::tcscat_s(assert_buffer, assert_buffer_count, get_double_newline(Character())));
338
339
340 _ERRCHECK(traits::tcscat_s(assert_buffer, assert_buffer_count, get_info_intro(Character())));
341 _ERRCHECK(traits::tcscat_s(assert_buffer, assert_buffer_count, get_double_newline(Character())));
342
343
344 _ERRCHECK(traits::tcscat_s(assert_buffer, assert_buffer_count, get_help_intro(Character())));
345}
BOOL WINAPI GetModuleHandleExW(IN DWORD dwFlags, IN LPCWSTR lpwModuleName OPTIONAL, OUT HMODULE *phModule)
static char * program_name
int CDECL memcpy_s(void *dest, size_t numberOfElements, const void *src, size_t count)