/*
    Copyright (c) 2013 mingw-w64 project

    Contributing authors: Rafaël Carré

    Permission is hereby granted, free of charge, to any person obtaining a
    copy of this software and associated documentation files (the "Software"),
    to deal in the Software without restriction, including without limitation
    the rights to use, copy, modify, merge, publish, distribute, sublicense,
    and/or sell copies of the Software, and to permit persons to whom the
    Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in
    all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    DEALINGS IN THE SOFTWARE.
*/

#define _wassert ___wassert
#include <windows.h>
#include <wchar.h>
#include <signal.h>
#undef _wassert

extern int mingw_app_type;

void __cdecl _wassert(const wchar_t *_Message,const wchar_t *_File,unsigned _Line)
{
  wchar_t *msgbuf = (wchar_t *) malloc (8192*sizeof(wchar_t));

  if (!_File || _File[0] == 0)
    _File = L"<unknown>";
  if (!_Message || _Message[0] == 0)
    _Message = L"?";
  _snwprintf (msgbuf, 8191, 
          L"Assertion failed!\n\nFile: %ws, Line %u\n\nExpression: %ws",
          _File,_Line, _Message);
  if (mingw_app_type == 0)
    fwprintf (stderr, L"%ws\n", msgbuf);
  else
    OutputDebugStringW(msgbuf);

  abort ();
}
