windows-nt/Source/XPSP1/NT/admin/pchealth/sr/nttest/srdiag2/strutils.cxx
2020-09-26 16:20:57 +08:00

380 lines
8.2 KiB
C++

#include "srheader.hxx"
//+---------------------------------------------------------------------------
//
// Method: SrTstStrCat
//
// Synopsis: Concatenates Str1 and Str1 and puts resulting string in
// allocated buf returns address to the buf in plpDest
// (char version)
//
// Arguments: plpDest: pointer to pointer to the concat. string
// szStr1 : pointer to the 1st string
// szStr2 : pointer to the 2nd string
//
// Returns: HRESULT
//
// History: 07-28-2000 a-robog Created
// 09-24-2000 ristern Moved out of the class
// 10-01-2000 ristern Moved to strutils
// 04-May-2001 weiyouc Copied to StrUtils.cxx
//
// Notes:
//
//----------------------------------------------------------------------------
HRESULT SrTstStrCat(IN LPCSTR szStr1,
IN LPCSTR szStr2,
OUT LPSTR *ppDest)
{
HRESULT hr = S_OK;
DWORD dwSize = 0;
DH_VDATEPTROUT(ppDest, LPSTR);
DH_VDATEPTRIN (szStr1,char);
DH_VDATEPTRIN (szStr2,char);
dwSize = strlen(szStr1)+strlen(szStr2)+1;
*ppDest = new char[dwSize];
DH_ABORTIF(NULL == *ppDest,
E_OUTOFMEMORY,
TEXT("new char[...]"));
strcpy(*ppDest,szStr1);
strcat(*ppDest,szStr2);
ErrReturn:
return hr;
}
//+---------------------------------------------------------------------------
//
// Method: SrTstTStrCat
//
// Synopsis: Concatenates Str1 and Str1 and puts resulting string in
// allocated buf returns address to the buf in plpDest
// (TCHAR version)
//
// Arguments: plpDest: pointer to pointer to the concat. string
// szStr1 : pointer to the 1st string
// szStr2 : pointer to the 2nd string
//
// Returns: HRESULT
//
// History: 07-28-2000 a-robog Created
// 09-24-2000 ristern Moved out of the class
// 09-30-2000 ristern Converted to TCHAR
// 10-01-2000 ristern Moved to strutils
// 04-May-2001 weiyouc Copied to StrUtils.cxx
//
// Notes:
//
//----------------------------------------------------------------------------
HRESULT SrTstTStrCat(IN LPCTSTR szStr1,
IN LPCTSTR szStr2,
OUT LPTSTR *ppDest)
{
HRESULT hr = S_OK;
DWORD dwSize = 0;
DH_VDATEPTROUT(ppDest, LPTSTR);
DH_VDATEPTRIN (szStr1, TCHAR);
DH_VDATEPTRIN (szStr2, TCHAR);
dwSize = _tcslen(szStr1)+_tcslen(szStr2)+1;
*ppDest = new TCHAR[dwSize];
DH_ABORTIF(NULL == *ppDest,
E_OUTOFMEMORY,
TEXT("new TCHAR[...]"));
_tcscpy(*ppDest,szStr1);
_tcscat(*ppDest,szStr2);
ErrReturn:
return hr;
}
//+--------------------------------------------------------------------------
//
// Function: CopyString
//
// Synopsis: Copy a wide (Unicode) string
//
// Parameters: [pszSource] -- The original string
// [ppszDest] -- The copy
//
// Returns: S_OK if all went well
//
// History: 31-Oct-96 MikeW Created
//
//---------------------------------------------------------------------------
HRESULT CopyString(LPCWSTR pszSource, LPWSTR *ppszDest)
{
size_t bufferSize;
HRESULT hr = S_OK;
*ppszDest = NULL;
//
// Find the length of the original string
//
bufferSize = wcslen(pszSource) + 1;
//
// Allocate the buffer
//
*ppszDest = new WCHAR[bufferSize];
if (NULL == *ppszDest)
{
hr = E_OUTOFMEMORY;
}
//
// Copy the string
//
if (S_OK == hr)
{
wcscpy(*ppszDest, pszSource);
}
return hr;
}
//+--------------------------------------------------------------------------
//
// Function: CopyString
//
// Synopsis: Copy a multibyte string
//
// Parameters: [pszSource] -- The original string
// [ppszDest] -- The copy
//
// Returns: S_OK if all went well
//
// History: 31-Oct-96 MikeW Created
//
//---------------------------------------------------------------------------
HRESULT CopyString(LPCSTR pszSource, LPSTR *ppszDest)
{
size_t bufferSize;
HRESULT hr = S_OK;
*ppszDest = NULL;
//
// Find the length of the original string (in bytes for DBCS)
//
bufferSize = strlen(pszSource) + 1;
//
// Allocate the buffer
//
*ppszDest = new char[bufferSize];
if (NULL == *ppszDest)
{
hr = E_OUTOFMEMORY;
}
//
// Copy the string
//
if (S_OK == hr)
{
strcpy(*ppszDest, pszSource);
}
return hr;
}
//+--------------------------------------------------------------------------
//
// Function: CopyString
//
// Synopsis: Convert a wide (Unicode) string to a multibyte string
//
// Parameters: [pszSource] -- The wide string
// [ppszDest] -- Where to put the multibyte string
//
// Returns: S_OK if all went well
//
// History: 31-Oct-96 MikeW Created
//
//---------------------------------------------------------------------------
HRESULT CopyString(LPCWSTR pszSource, LPSTR *ppszDest)
{
int bufferSize;
HRESULT hr = S_OK;
*ppszDest = NULL;
//
// Find the length of the buffer needed for the multibyte string
//
bufferSize = WideCharToMultiByte(
CP_ACP,
0,
pszSource,
-1,
*ppszDest,
0,
NULL,
NULL);
if (0 == bufferSize)
{
hr = HRESULT_FROM_WIN32(GetLastError());
}
//
// Allocate the buffer
//
if(S_OK == hr)
{
*ppszDest = new char[bufferSize];
if (NULL == *ppszDest)
{
hr = E_OUTOFMEMORY;
}
}
//
// Do the conversion
//
if (S_OK == hr)
{
bufferSize = WideCharToMultiByte(
CP_ACP,
0,
pszSource,
-1,
*ppszDest,
bufferSize,
NULL,
NULL);
if (0 == bufferSize)
{
hr = HRESULT_FROM_WIN32(GetLastError());
}
}
//
// Clean up if there's an error
//
if (S_OK != hr && NULL != *ppszDest)
{
delete [] *ppszDest;
*ppszDest = NULL;
}
return hr;
}
//+--------------------------------------------------------------------------
//
// Function: CopyString
//
// Synopsis: Convert a multibyte string to a wide (Unicode) string
//
// Parameters: [pszSource] -- The multibyte string
// [ppszDest] -- Where to put the wide string
//
// Returns: S_OK if all went well
//
// History: 31-Oct-96 MikeW Created
//
//---------------------------------------------------------------------------
HRESULT CopyString(LPCSTR pszSource, LPWSTR *ppszDest)
{
int bufferSize;
HRESULT hr = S_OK;
*ppszDest = NULL;
//
// Find the length of the buffer needed for the multibyte string
//
bufferSize = MultiByteToWideChar(
CP_ACP,
0,
pszSource,
-1,
*ppszDest,
0);
if (0 == bufferSize)
{
hr = HRESULT_FROM_WIN32(GetLastError());
}
//
// Allocate the buffer
//
if(S_OK == hr)
{
*ppszDest = new WCHAR[bufferSize];
if (NULL == *ppszDest)
{
hr = E_OUTOFMEMORY;
}
}
//
// Do the conversion
//
if (S_OK == hr)
{
bufferSize = MultiByteToWideChar(
CP_ACP,
0,
pszSource,
-1,
*ppszDest,
bufferSize);
if (0 == bufferSize)
{
hr = HRESULT_FROM_WIN32(GetLastError());
}
}
//
// Clean up if there's an error
//
if (S_OK != hr && NULL != *ppszDest)
{
delete [] *ppszDest;
*ppszDest = NULL;
}
return hr;
}