Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

118 lines
4.8 KiB

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: K K U T I L S . H
//
// Contents: Misc. helper functions
//
// Notes:
//
// Author: kumarp 14 Jan 1997
//
//----------------------------------------------------------------------------
#pragma once
#include "kkstl.h"
#ifndef NCAPI
#define NCAPI extern "C" HRESULT __declspec(dllexport)
#endif
#ifdef ENABLETRACE
#define DefineFunctionName(name) static char __FUNCNAME__[] = name
#else
#define DefineFunctionName(name) (void) 0
#define __FUNCNAME__ ""
#endif
#define DeleteIfNotNull(p) \
delete p; \
p = NULL;
#define ReturnHrIfFailedSz(hr,msg) if (FAILED(hr)) \
{ \
TraceError(msg, hr); \
return hr; \
}
#define ReturnHrIfFailed(hr) if (FAILED(hr)) \
{ \
TraceError(__FUNCNAME__, hr); \
return hr; \
}
#define ReturnErrorIf(condition,hr) if (condition) \
{ \
TraceError(__FUNCNAME__, hr); \
return hr; \
}
#define ReturnError(hr) if (1) { TraceFunctionError(hr); return hr; }
#define DoErrorCleanupAndReturnError(status_var,error_code) \
{ \
status_var = error_code; \
goto error_cleanup; \
}
#define DoErrorCleanupAndReturnErrorIf(condition,status_var,error_code) \
if (condition) \
{ \
status_var = error_code; \
goto error_cleanup; \
}
#define TraceFunctionEntry(ttid) TraceTag(ttid, "---------> entering %s", __FUNCNAME__)
#define TraceFunctionError(hr) TraceError(__FUNCNAME__, hr)
#define TraceLastWin32ErrorInCurrentFunction() TraceLastWin32Error(__FUNCNAME__)
#define TraceWin32FunctionError(e) TraceFunctionError(HRESULT_FROM_WIN32(e))
#define ReturnNULLIf(condition) if (condition) return NULL
#define BreakIf(condition) if (condition) break
#define ContinueIf(condition) if (condition) continue
//#define ReturnFalseIfFailed(hr) if ((hr) != S_OK) return FALSE
#define DoErrorCleanupIf(condition) if (condition) goto error_cleanup
#define AppendErrorAndReturnFalseIf(condition,e) if (condition) { AppendError(e); return FALSE;}
#define BenignAssert() AssertSz(FALSE,"Benign Assert (this is not a bug): Click Ignore to continue...")
#define CR L"\n"
void AddOnlyOnceToStringList(IN TStringList* psl, IN PCWSTR pszString);
void ConvertDelimitedListToStringList(IN const tstring& strDelimitedList,
IN WCHAR chDelimiter,
OUT TStringList &slList);
void ConvertCommaDelimitedListToStringList(IN const tstring& strDelimitedList,
OUT TStringList &slList);
void ConvertSpaceDelimitedListToStringList(IN const tstring& strDelimitedList,
OUT TStringList &slList);
void ConvertStringListToCommaList(IN const TStringList &slList,
OUT tstring &strList);
void ConvertStringListToDelimitedList(IN const TStringList &slList,
OUT tstring &strList, IN WCHAR chDelimiter);
BOOL IsBoolString(IN PCWSTR pszStr, OUT BOOL *pbValue);
BOOL UpgradingFromNT(IN DWORD dwUpgradeFlag);
BOOL FIsInStringArray(
IN const PCWSTR* ppszStrings,
IN DWORD cNumStrings,
IN PCWSTR pszStringToFind,
OUT UINT* puIndex=NULL);
HRESULT HrRegOpenServiceKey(IN PCWSTR pszServiceName,
REGSAM samDesired,
OUT HKEY* phKey);
HRESULT HrRegOpenServiceSubKey(IN PCWSTR pszServiceName,
IN PCWSTR pszSubKey,
REGSAM samDesired,
OUT HKEY* phKey);
BOOL FIsServiceKeyPresent(IN PCWSTR pszServiceName);
void AppendToPath(IN OUT tstring* pstrPath, IN PCWSTR pszItem);
void EraseAndDeleteAll(IN TStringArray* sa);
void ConvertDelimitedListToStringArray(IN const tstring& strDelimitedList,
IN WCHAR chDelimiter,
OUT TStringArray &saStrings);
void ConvertCommaDelimitedListToStringArray(IN const tstring& strDelimitedList,
OUT TStringArray &saStrings);