windows-nt/Source/XPSP1/NT/ds/security/cryptoapi/cryptsvc/dbutils.cpp

287 lines
5.5 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
//+---------------------------------------------------------------------------
//
// Microsoft Windows NT Security
// Copyright (C) Microsoft Corporation, 1997 - 1999
//
// File: dbutils.cpp
//
// Contents: utilities
//
// History: 07-Feb-00 reidk Created
//
//----------------------------------------------------------------------------
#include <windows.h>
#include <dbgdef.h>
extern void * _CatDBAlloc(size_t len);
extern void * _CatDBReAlloc(void *p, size_t len);
extern void _CatDBFree(void *p);
LPSTR _CatDBConvertWszToSz(LPCWSTR pwsz)
{
LPSTR psz = NULL;
LONG cch = 0;
cch = WideCharToMultiByte(
GetACP(),
0, // dwFlags
pwsz,
-1, // cchWideChar, -1 => null terminated
NULL,
0,
NULL,
NULL);
if (cch == 0)
{
goto ErrorWideCharToMultiByte;
}
if (NULL == (psz = (CHAR *) _CatDBAlloc(cch + 1)))
{
goto ErrorMemory;
}
if (0 == WideCharToMultiByte(
GetACP(),
0, // dwFlags
pwsz,
-1, // cchWideChar, -1 => null terminated
psz,
cch,
NULL,
NULL))
{
goto ErrorWideCharToMultiByte;
}
CommonReturn:
return (psz);
ErrorReturn:
if (psz != NULL)
{
_CatDBFree(psz);
}
psz = NULL;
goto CommonReturn;
TRACE_ERROR_EX(DBG_SS_CATDBSVC, ErrorWideCharToMultiByte)
TRACE_ERROR_EX(DBG_SS_CATDBSVC, ErrorMemory)
}
LPWSTR _CATDBAllocAndCopyWSTR(LPCWSTR pwsz)
{
LPWSTR pwszTemp = NULL;
if (NULL == (pwszTemp =
(LPWSTR) _CatDBAlloc(sizeof(WCHAR) * (wcslen(pwsz) + 1) )))
{
goto ErrorMemory;
}
wcscpy(pwszTemp, pwsz);
CommonReturn:
return (pwszTemp);
ErrorReturn:
goto CommonReturn;
TRACE_ERROR_EX(DBG_SS_CATDBSVC, ErrorMemory)
}
LPWSTR _CATDBAllocAndCopyWSTR2(LPCWSTR pwsz1, LPCWSTR pwsz2)
{
LPWSTR pwszTemp = NULL;
if (NULL == (pwszTemp =
(LPWSTR) _CatDBAlloc(sizeof(WCHAR) * ( wcslen(pwsz1) +
wcslen(pwsz2) +
1))))
{
goto ErrorMemory;
}
wcscpy(pwszTemp, pwsz1);
wcscat(pwszTemp, pwsz2);
CommonReturn:
return (pwszTemp);
ErrorReturn:
goto CommonReturn;
TRACE_ERROR_EX(DBG_SS_CATDBSVC, ErrorMemory)
}
BOOL _CATDBStrCatWSTR(LPWSTR *ppwszAddTo, LPCWSTR pwszAdd)
{
BOOL fRet = TRUE;
LPWSTR pwszTemp = NULL;
if (NULL == (pwszTemp = (LPWSTR) _CatDBAlloc(sizeof(WCHAR) * ( wcslen(*ppwszAddTo) +
wcslen(pwszAdd) +
1))))
{
goto ErrorMemory;
}
wcscpy(pwszTemp, *ppwszAddTo);
wcscat(pwszTemp, pwszAdd);
_CatDBFree(*ppwszAddTo);
*ppwszAddTo = pwszTemp;
CommonReturn:
return (fRet);
ErrorReturn:
fRet = FALSE;
goto CommonReturn;
TRACE_ERROR_EX(DBG_SS_CATDBSVC, ErrorMemory)
}
BOOL _CATDBStrCat(LPSTR *ppszAddTo, LPCSTR pszAdd)
{
BOOL fRet = TRUE;
LPSTR pszTemp = NULL;
if (NULL == (pszTemp = (LPSTR) _CatDBAlloc(sizeof(char) * ( strlen(*ppszAddTo) +
strlen(pszAdd) +
1))))
{
goto ErrorMemory;
}
strcpy(pszTemp, *ppszAddTo);
strcat(pszTemp, pszAdd);
_CatDBFree(*ppszAddTo);
*ppszAddTo = pszTemp;
CommonReturn:
return (fRet);
ErrorReturn:
fRet = FALSE;
goto CommonReturn;
TRACE_ERROR_EX(DBG_SS_CATDBSVC, ErrorMemory)
}
LPWSTR _CATDBConstructWSTRPath(LPCWSTR pwsz1, LPCWSTR pwsz2)
{
LPWSTR pwszTemp = NULL;
int nTotalLen = 0;
int nLenStr1 = 0;
//
// Calculate the length of the resultant string as the sum of the length
// of pwsz1, length of pwsz2, a NULL char, and a possible extra '\' char
//
nLenStr1 = wcslen(pwsz1);
nTotalLen = nLenStr1 + wcslen(pwsz2) + 2;
//
// Allocate the string and copy pwsz1 into the buffer
//
if (NULL == (pwszTemp = (LPWSTR) _CatDBAlloc(sizeof(WCHAR) * nTotalLen)))
{
goto ErrorMemory;
}
wcscpy(pwszTemp, pwsz1);
//
// Add the extra '\' if needed
//
if (pwsz1[nLenStr1 - 1] != L'\\')
{
pwszTemp[nLenStr1] = L'\\';
pwszTemp[nLenStr1 + 1] = L'\0';
}
//
// Tack on pwsz2
//
wcscat(pwszTemp, pwsz2);
CommonReturn:
return (pwszTemp);
ErrorReturn:
goto CommonReturn;
TRACE_ERROR_EX(DBG_SS_CATDBSVC, ErrorMemory)
}
LPSTR _CATDBConstructPath(LPCSTR psz1, LPCSTR psz2)
{
LPSTR pszTemp = NULL;
int nTotalLen = 0;
int nLenStr1 = 0;
//
// Calculate the length of the resultant string as the sum of the length
// of psz1, length of psz2, a NULL char, and a possible extra '\' char
//
nLenStr1 = strlen(psz1);
nTotalLen = nLenStr1 + strlen(psz2) + 2;
//
// Allocate the string and copy pwsz1 into the buffer
//
if (NULL == (pszTemp =
(LPSTR) _CatDBAlloc(sizeof(char) * nTotalLen)))
{
goto ErrorMemory;
}
strcpy(pszTemp, psz1);
//
// Add the extra '\' if needed
//
if (psz1[nLenStr1 - 1] != '\\')
{
pszTemp[nLenStr1] = '\\';
pszTemp[nLenStr1 + 1] = '\0';
}
//
// Tack on pwsz2
//
strcat(pszTemp, psz2);
CommonReturn:
return (pszTemp);
ErrorReturn:
goto CommonReturn;
TRACE_ERROR_EX(DBG_SS_CATDBSVC, ErrorMemory)
}