Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
debug.c
Abstract:
Diagnositc/debug routines for Windows NT Setup API dll.
Author:
Ted Miller (tedm) 17-Jan-1995
Revision History:
--*/
#include "precomp.h"
#pragma hdrstop
#if ASSERTS_ON
extern BOOL InInitialization;
VOID AssertFail( IN PCSTR FileName, IN UINT LineNumber, IN PSTR Condition, IN BOOL NoUI ) { int i; CHAR Name[MAX_PATH]; PCHAR p; LPSTR Msg; DWORD msglen; DWORD sz; DWORD rc;
rc = GetLastError(); // preserve GLE
//
// Use dll name as caption
//
sz = GetModuleFileNameA(NULL,Name,MAX_PATH); if((sz == 0) || (sz > MAX_PATH)) { strcpy(Name,"?"); } if(p = strrchr(Name,'\\')) { p++; } else { p = Name; } msglen = strlen(p)+strlen(FileName)+strlen(Condition)+128; //
// assert might be out of memory condition
// stack alloc is more likely to succeed than memory alloc
//
try { Msg = (LPSTR)_alloca(msglen); wsprintfA( Msg, "Assertion failure at line %u in file %s!%s: %s%s", LineNumber, p, FileName, Condition, (GlobalSetupFlags & PSPGF_NONINTERACTIVE) ? "\r\n" : "\n\nCall DebugBreak()?" );
OutputDebugStringA(Msg);
if((GlobalSetupFlags & PSPGF_NONINTERACTIVE) || InInitialization || NoUI) { i = IDYES; } else { i = MessageBoxA( NULL, Msg, p, MB_YESNO | MB_TASKMODAL | MB_ICONSTOP | MB_SETFOREGROUND ); } } except (EXCEPTION_EXECUTE_HANDLER) { OutputDebugStringA("SetupAPI ASSERT!!!! (out of stack)\r\n"); i=IDYES; }
if(i == IDYES) { SetLastError(rc); DebugBreak(); } SetLastError(rc); }
#endif
|