104 lines
1.9 KiB
C
104 lines
1.9 KiB
C
|
/*++
|
||
|
|
||
|
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 PSTR 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
|
||
|
|