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
|
|
|