| /** | 
 |  * 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. | 
 |  */ | 
 |  | 
 | #include <assert.h> | 
 | #include <stdlib.h> | 
 |  | 
 | /* _wassert is not available on XP, so forward it to _assert if needed */ | 
 | __MINGW_ATTRIB_NORETURN | 
 | static void __cdecl mingw_wassert(const wchar_t *_Message, const wchar_t *_File, unsigned _Line) | 
 | { | 
 |     char *message = NULL, *file = NULL; | 
 |     size_t len; | 
 |  | 
 |     if ((len = wcstombs(NULL, _Message, 0)) != (size_t)-1) | 
 |     { | 
 |         message = malloc(len + 1); | 
 |         wcstombs(message, _Message, len + 1); | 
 |     } | 
 |  | 
 |     if ((len = wcstombs(NULL, _File, 0)) != (size_t)-1) | 
 |     { | 
 |         file = malloc(len + 1); | 
 |         wcstombs(file, _File, len + 1); | 
 |     } | 
 |  | 
 |     _assert(message, file, _Line); | 
 |  | 
 |     free(message); | 
 |     free(file); | 
 | } | 
 |  | 
 | #ifndef __LIBMSVCRT_OS__ | 
 |  | 
 | void __cdecl __attribute__ ((alias ("mingw_wassert"))) _wassert(const wchar_t *, const wchar_t *, unsigned); | 
 | void (__cdecl *__MINGW_IMP_SYMBOL(_wassert))(const wchar_t*, const wchar_t*, unsigned) = _wassert; | 
 |  | 
 | #else | 
 |  | 
 | #include <windows.h> | 
 | #include "msvcrt.h" | 
 |  | 
 | static void __cdecl init_wassert(const wchar_t *message, const wchar_t *file, unsigned line); | 
 |  | 
 | void (__cdecl *__MINGW_IMP_SYMBOL(_wassert))(const wchar_t*, const wchar_t*,unsigned) = init_wassert; | 
 |  | 
 | static void __cdecl init_wassert(const wchar_t *message, const wchar_t *file, unsigned line) | 
 | { | 
 |     void *func; | 
 |  | 
 |     func = (void*)GetProcAddress(__mingw_get_msvcrt_handle(), "_wassert"); | 
 |     if(!func) | 
 |         func = mingw_wassert; | 
 |  | 
 |     return (__MINGW_IMP_SYMBOL(_wassert) = func)(message, file, line); | 
 | } | 
 |  | 
 | #endif |