//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1997 - 1999 // // File: convutil.cpp // //-------------------------------------------------------------------------- #include "global.hxx" #include 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; DWORD dwSize; if (NULL == (ppageA = (PROPSHEETPAGEA *) malloc(sizeof(PROPSHEETPAGEA) * cPages))) { SetLastError(E_OUTOFMEMORY); return NULL; }; // DSIE: Bug 590638. memset(ppageA, 0, sizeof(PROPSHEETPAGEA) * cPages); dwSize = sizeof(PROPSHEETPAGEA) < ppage->dwSize ? sizeof(PROPSHEETPAGEA) : ppage->dwSize; for (i = 0; i < cPages; i++) { memcpy(&ppageA[i], ppage, dwSize); ppageA[i].dwSize = sizeof(PROPSHEETPAGEA); // In the future we may need to handle the pszTemplate and pszIcon fields if (ppage->pszTitle != NULL) { ppageA[i].pszTitle = CertUIMkMBStr(ppage->pszTitle); } ppage = (LPCPROPSHEETPAGEW) (((LPBYTE) ppage) + ppage->dwSize); } return(ppageA); } ////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////// void FreePropSheetPagesA(LPPROPSHEETPAGEA ppage, DWORD cPages) { DWORD i; for (i=0; idwSize ? sizeof(PROPSHEETPAGEW) : ppage->dwSize; for (i = 0; i < cPages; i++) { memcpy(&ppageW[i], ppage, dwSize); ppageW[i].dwSize = sizeof(PROPSHEETPAGEW); // In the future we may need to handle the pszTemplate and pszIcon fields if (ppage->pszTitle != NULL) { ppageW[i].pszTitle = CertUIMkWStr(ppage->pszTitle); } ppage = (LPCPROPSHEETPAGEA) (((LPBYTE) ppage) + ppage->dwSize); } *pppageW = ppageW; return TRUE; } ////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////// void FreePropSheetPagesW(LPPROPSHEETPAGEW ppage, DWORD cPages) { DWORD i; for (i=0; i