mirror of https://github.com/tongzx/nt5src
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.
237 lines
5.6 KiB
237 lines
5.6 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1997 - 1999
|
|
//
|
|
// File: convutil.cpp
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#include "global.hxx"
|
|
#include <dbgdef.h>
|
|
|
|
extern HINSTANCE HinstDll;
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
LPSTR CertUIMkMBStr(LPCWSTR pwsz)
|
|
{
|
|
int cb;
|
|
LPSTR psz;
|
|
|
|
if (pwsz == NULL)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
cb = WideCharToMultiByte(
|
|
0,
|
|
0,
|
|
pwsz,
|
|
-1,
|
|
NULL,
|
|
0,
|
|
NULL,
|
|
NULL);
|
|
|
|
if (NULL == (psz = (LPSTR) malloc(cb)))
|
|
{
|
|
SetLastError(E_OUTOFMEMORY);
|
|
return NULL;
|
|
}
|
|
|
|
WideCharToMultiByte(
|
|
0,
|
|
0,
|
|
pwsz,
|
|
-1,
|
|
psz,
|
|
cb,
|
|
NULL,
|
|
NULL);
|
|
|
|
return(psz);
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
LPWSTR CertUIMkWStr(LPCSTR psz)
|
|
{
|
|
int cWChars;
|
|
LPWSTR pwsz;
|
|
|
|
if (psz == NULL)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
cWChars = MultiByteToWideChar(
|
|
0,
|
|
0,
|
|
psz,
|
|
-1,
|
|
NULL,
|
|
0);
|
|
|
|
if (NULL == (pwsz = (LPWSTR) malloc(cWChars * sizeof(WCHAR))))
|
|
{
|
|
SetLastError(E_OUTOFMEMORY);
|
|
return NULL;
|
|
}
|
|
|
|
MultiByteToWideChar(
|
|
0,
|
|
0,
|
|
psz,
|
|
-1,
|
|
pwsz,
|
|
cWChars);
|
|
|
|
return(pwsz);
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
LPSTR AllocAndCopyMBStr(LPCSTR psz)
|
|
{
|
|
LPSTR pszReturn;
|
|
|
|
if (NULL == (pszReturn = (LPSTR) malloc(strlen(psz)+1)))
|
|
{
|
|
SetLastError(E_OUTOFMEMORY);
|
|
return NULL;
|
|
}
|
|
strcpy(pszReturn, psz);
|
|
|
|
return(pszReturn);
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
LPWSTR AllocAndCopyWStr(LPCWSTR pwsz)
|
|
{
|
|
LPWSTR pwszReturn;
|
|
|
|
if (NULL == (pwszReturn = (LPWSTR) malloc((wcslen(pwsz)+1) * sizeof(WCHAR))))
|
|
{
|
|
SetLastError(E_OUTOFMEMORY);
|
|
return NULL;
|
|
}
|
|
wcscpy(pwszReturn, pwsz);
|
|
|
|
return(pwszReturn);
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
LPPROPSHEETPAGEA ConvertToPropPageA(LPCPROPSHEETPAGEW ppage, DWORD cPages)
|
|
{
|
|
PROPSHEETPAGEA *ppageA;
|
|
DWORD i;
|
|
|
|
if (NULL == (ppageA = (PROPSHEETPAGEA *) malloc(sizeof(PROPSHEETPAGEA) * cPages)))
|
|
{
|
|
SetLastError(E_OUTOFMEMORY);
|
|
return NULL;
|
|
};
|
|
|
|
memcpy(ppageA, ppage, sizeof(PROPSHEETPAGEA) * cPages);
|
|
|
|
for (i=0; i<cPages; i++)
|
|
{
|
|
// In the future we may need to handle the pszTemplate and pszIcon fields
|
|
if (ppage[i].pszTitle != NULL)
|
|
{
|
|
ppageA[i].pszTitle = CertUIMkMBStr(ppage[i].pszTitle);
|
|
}
|
|
}
|
|
|
|
return(ppageA);
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
void FreePropSheetPagesA(LPPROPSHEETPAGEA ppage, DWORD cPages)
|
|
{
|
|
DWORD i;
|
|
|
|
for (i=0; i<cPages; i++)
|
|
{
|
|
// In the future we may need to handle the pszTemplate and pszIcon fields
|
|
if (ppage[i].pszTitle != NULL)
|
|
{
|
|
free((void *)ppage[i].pszTitle);
|
|
}
|
|
}
|
|
|
|
free(ppage);
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
BOOL ConvertToPropPageW(LPCPROPSHEETPAGEA ppage, DWORD cPages, LPCPROPSHEETPAGEW *pppageW)
|
|
{
|
|
PROPSHEETPAGEW *ppageW;
|
|
DWORD i;
|
|
|
|
if (cPages == 0)
|
|
{
|
|
*pppageW = NULL;
|
|
return TRUE;
|
|
}
|
|
|
|
if (NULL == (ppageW = (PROPSHEETPAGEW *) malloc(sizeof(PROPSHEETPAGEW) * cPages)))
|
|
{
|
|
SetLastError(E_OUTOFMEMORY);
|
|
return FALSE;
|
|
}
|
|
|
|
memcpy(ppageW, ppage, sizeof(PROPSHEETPAGEW) * cPages);
|
|
|
|
for (i=0; i<cPages; i++)
|
|
{
|
|
// In the future we may need to handle the pszTemplate and pszIcon fields
|
|
if (ppage[i].pszTitle != NULL)
|
|
{
|
|
ppageW[i].pszTitle = CertUIMkWStr(ppage[i].pszTitle);
|
|
}
|
|
}
|
|
|
|
*((LPPROPSHEETPAGEW *) pppageW) = ppageW;
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
void FreePropSheetPagesW(LPPROPSHEETPAGEW ppage, DWORD cPages)
|
|
{
|
|
DWORD i;
|
|
|
|
for (i=0; i<cPages; i++)
|
|
{
|
|
// In the future we may need to handle the pszTemplate and pszIcon fields
|
|
if (ppage[i].pszTitle != NULL)
|
|
{
|
|
free((void *)ppage[i].pszTitle);
|
|
}
|
|
}
|
|
|
|
free(ppage);
|
|
}
|