windows-nt/Source/XPSP1/NT/base/ntsetup/opktools/setupmgr/oem/debugapi.c

146 lines
3.4 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*****************************************************************************\
DEBUGAPI.C
Confidential
Copyright (c) Corporation 1998
All rights reserved
Debug API functions for the application to easily output information to
the debugger.
12/98 - Jason Cohen (JCOHEN)
09/2000 - Stephen Lodwick (STELO)
Ported OPK Wizard to Whistler
\*****************************************************************************/
//
// Include File(s):
//
#include "pch.h"
// We only want this code include if this is a debug version.
//
#ifdef DBG
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <stdarg.h>
//
// External Function(s):
//
INT DebugOutW(LPCWSTR lpFileName, LPCWSTR lpFormat, ...)
{
INT iChars = -1;
va_list lpArgs;
FILE * hFile;
LPWSTR lpString;
// Initialize the lpArgs parameter with va_start().
//
va_start(lpArgs, lpFormat);
// Open the debug file for output if a file name was passed in.
//
if ( lpFileName && ( hFile = _wfopen(lpFileName, L"a") ) )
{
// Print the debug message to the file and close it.
//
iChars = vfwprintf(hFile, lpFormat, lpArgs);
fclose(hFile);
// Reinitialize the lpArgs parameter with va_start()
// for the next call to a vptrintf function.
//
va_start(lpArgs, lpFormat);
}
// If something failed above, we won't know the size to use
// for the string buffer, so just default to 2048 characters.
//
if ( iChars < 0 )
iChars = 2047;
// Allocate a buffer for the string.
//
if ( lpString = (LPWSTR) malloc((iChars + 1) * sizeof(WCHAR)) )
{
// Print out the string, send it to the debugger, and free it.
//
iChars = StringCchPrintf(lpString, iChars + 1, lpFormat, lpArgs);
OutputDebugStringW(lpString);
free(lpString);
}
else
// Use -1 to return an error.
//
iChars = -1;
// Return the number of characters printed.
//
return iChars;
}
INT DebugOutA(LPCSTR lpFileName, LPCSTR lpFormat, ...)
{
INT iChars = -1;
va_list lpArgs;
FILE * hFile;
LPSTR lpString;
// Initialize the lpArgs parameter with va_start().
//
va_start(lpArgs, lpFormat);
// Open the debug file for output if a file name was passed in.
//
if ( lpFileName && ( hFile = fopen(lpFileName, "a") ) )
{
// Print the debug message to the file and close it.
//
iChars = vfprintf(hFile, lpFormat, lpArgs);
fclose(hFile);
// Reinitialize the lpArgs parameter with va_start()
// for the next call to a vptrintf function.
//
va_start(lpArgs, lpFormat);
}
// If something failed above, we won't know the size to use
// for the string buffer, so just default to 2048 characters.
//
if ( iChars < 0 )
iChars = 2047;
// Allocate a buffer for the string.
//
if ( lpString = (LPSTR) malloc((iChars + 1) * sizeof(CHAR)) )
{
// Print out the string, send it to the debugger, and free it.
//
iChars = StringCchPrintfA(lpString, iChars + 1, lpFormat, lpArgs);
OutputDebugStringA(lpString);
free(lpString);
}
else
// Use -1 to return an error.
//
iChars = -1;
// Return the number of characters printed.
//
return iChars;
}
#endif // DEBUG or _DEBUG