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.

236 lines
5.6 KiB

  1. //+-------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. //
  5. // Copyright (C) Microsoft Corporation, 1997 - 1999
  6. //
  7. // File: convutil.cpp
  8. //
  9. //--------------------------------------------------------------------------
  10. #include "global.hxx"
  11. #include <dbgdef.h>
  12. extern HINSTANCE HinstDll;
  13. //////////////////////////////////////////////////////////////////////////////////////
  14. //
  15. //////////////////////////////////////////////////////////////////////////////////////
  16. LPSTR CertUIMkMBStr(LPCWSTR pwsz)
  17. {
  18. int cb;
  19. LPSTR psz;
  20. if (pwsz == NULL)
  21. {
  22. return NULL;
  23. }
  24. cb = WideCharToMultiByte(
  25. 0,
  26. 0,
  27. pwsz,
  28. -1,
  29. NULL,
  30. 0,
  31. NULL,
  32. NULL);
  33. if (NULL == (psz = (LPSTR) malloc(cb)))
  34. {
  35. SetLastError(E_OUTOFMEMORY);
  36. return NULL;
  37. }
  38. WideCharToMultiByte(
  39. 0,
  40. 0,
  41. pwsz,
  42. -1,
  43. psz,
  44. cb,
  45. NULL,
  46. NULL);
  47. return(psz);
  48. }
  49. //////////////////////////////////////////////////////////////////////////////////////
  50. //
  51. //////////////////////////////////////////////////////////////////////////////////////
  52. LPWSTR CertUIMkWStr(LPCSTR psz)
  53. {
  54. int cWChars;
  55. LPWSTR pwsz;
  56. if (psz == NULL)
  57. {
  58. return NULL;
  59. }
  60. cWChars = MultiByteToWideChar(
  61. 0,
  62. 0,
  63. psz,
  64. -1,
  65. NULL,
  66. 0);
  67. if (NULL == (pwsz = (LPWSTR) malloc(cWChars * sizeof(WCHAR))))
  68. {
  69. SetLastError(E_OUTOFMEMORY);
  70. return NULL;
  71. }
  72. MultiByteToWideChar(
  73. 0,
  74. 0,
  75. psz,
  76. -1,
  77. pwsz,
  78. cWChars);
  79. return(pwsz);
  80. }
  81. //////////////////////////////////////////////////////////////////////////////////////
  82. //
  83. //////////////////////////////////////////////////////////////////////////////////////
  84. LPSTR AllocAndCopyMBStr(LPCSTR psz)
  85. {
  86. LPSTR pszReturn;
  87. if (NULL == (pszReturn = (LPSTR) malloc(strlen(psz)+1)))
  88. {
  89. SetLastError(E_OUTOFMEMORY);
  90. return NULL;
  91. }
  92. strcpy(pszReturn, psz);
  93. return(pszReturn);
  94. }
  95. //////////////////////////////////////////////////////////////////////////////////////
  96. //
  97. //////////////////////////////////////////////////////////////////////////////////////
  98. LPWSTR AllocAndCopyWStr(LPCWSTR pwsz)
  99. {
  100. LPWSTR pwszReturn;
  101. if (NULL == (pwszReturn = (LPWSTR) malloc((wcslen(pwsz)+1) * sizeof(WCHAR))))
  102. {
  103. SetLastError(E_OUTOFMEMORY);
  104. return NULL;
  105. }
  106. wcscpy(pwszReturn, pwsz);
  107. return(pwszReturn);
  108. }
  109. //////////////////////////////////////////////////////////////////////////////////////
  110. //
  111. //////////////////////////////////////////////////////////////////////////////////////
  112. LPPROPSHEETPAGEA ConvertToPropPageA(LPCPROPSHEETPAGEW ppage, DWORD cPages)
  113. {
  114. PROPSHEETPAGEA *ppageA;
  115. DWORD i;
  116. if (NULL == (ppageA = (PROPSHEETPAGEA *) malloc(sizeof(PROPSHEETPAGEA) * cPages)))
  117. {
  118. SetLastError(E_OUTOFMEMORY);
  119. return NULL;
  120. };
  121. memcpy(ppageA, ppage, sizeof(PROPSHEETPAGEA) * cPages);
  122. for (i=0; i<cPages; i++)
  123. {
  124. // In the future we may need to handle the pszTemplate and pszIcon fields
  125. if (ppage[i].pszTitle != NULL)
  126. {
  127. ppageA[i].pszTitle = CertUIMkMBStr(ppage[i].pszTitle);
  128. }
  129. }
  130. return(ppageA);
  131. }
  132. //////////////////////////////////////////////////////////////////////////////////////
  133. //
  134. //////////////////////////////////////////////////////////////////////////////////////
  135. void FreePropSheetPagesA(LPPROPSHEETPAGEA ppage, DWORD cPages)
  136. {
  137. DWORD i;
  138. for (i=0; i<cPages; i++)
  139. {
  140. // In the future we may need to handle the pszTemplate and pszIcon fields
  141. if (ppage[i].pszTitle != NULL)
  142. {
  143. free((void *)ppage[i].pszTitle);
  144. }
  145. }
  146. free(ppage);
  147. }
  148. //////////////////////////////////////////////////////////////////////////////////////
  149. //
  150. //////////////////////////////////////////////////////////////////////////////////////
  151. BOOL ConvertToPropPageW(LPCPROPSHEETPAGEA ppage, DWORD cPages, LPCPROPSHEETPAGEW *pppageW)
  152. {
  153. PROPSHEETPAGEW *ppageW;
  154. DWORD i;
  155. if (cPages == 0)
  156. {
  157. *pppageW = NULL;
  158. return TRUE;
  159. }
  160. if (NULL == (ppageW = (PROPSHEETPAGEW *) malloc(sizeof(PROPSHEETPAGEW) * cPages)))
  161. {
  162. SetLastError(E_OUTOFMEMORY);
  163. return FALSE;
  164. }
  165. memcpy(ppageW, ppage, sizeof(PROPSHEETPAGEW) * cPages);
  166. for (i=0; i<cPages; i++)
  167. {
  168. // In the future we may need to handle the pszTemplate and pszIcon fields
  169. if (ppage[i].pszTitle != NULL)
  170. {
  171. ppageW[i].pszTitle = CertUIMkWStr(ppage[i].pszTitle);
  172. }
  173. }
  174. *((LPPROPSHEETPAGEW *) pppageW) = ppageW;
  175. return TRUE;
  176. }
  177. //////////////////////////////////////////////////////////////////////////////////////
  178. //
  179. //////////////////////////////////////////////////////////////////////////////////////
  180. void FreePropSheetPagesW(LPPROPSHEETPAGEW ppage, DWORD cPages)
  181. {
  182. DWORD i;
  183. for (i=0; i<cPages; i++)
  184. {
  185. // In the future we may need to handle the pszTemplate and pszIcon fields
  186. if (ppage[i].pszTitle != NULL)
  187. {
  188. free((void *)ppage[i].pszTitle);
  189. }
  190. }
  191. free(ppage);
  192. }