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.

224 lines
5.0 KiB

  1. //+---------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 1997.
  5. //
  6. // File: N C S T R I N G . H
  7. //
  8. // Contents: Common string routines.
  9. //
  10. // Notes:
  11. //
  12. // Author: shaunco 24 Mar 1997
  13. //
  14. //----------------------------------------------------------------------------
  15. #pragma once
  16. #include "ncdebug.h"
  17. #include <tchar.h>
  18. #include <oleauto.h>
  19. const int c_cchGuidWithTerm = 39; // includes terminating null
  20. const int c_cbGuidWithTerm = c_cchGuidWithTerm * sizeof(WCHAR);
  21. char *stristr(const char *string1, const char *string2);
  22. inline ULONG CbOfSz (PCWSTR psz) { AssertH(psz); return wcslen (psz) * sizeof(WCHAR); }
  23. inline ULONG CbOfSza (PCSTR psza) { AssertH(psza); return strlen (psza) * sizeof(CHAR); }
  24. inline ULONG CbOfTSz (PCTSTR psz) { AssertH(psz); return _tcslen (psz) * sizeof(TCHAR); }
  25. inline ULONG CbOfSzAndTerm (PCWSTR psz) { AssertH(psz); return (wcslen (psz) + 1) * sizeof(WCHAR); }
  26. inline ULONG CbOfSzaAndTerm (PCSTR psza) { AssertH(psza); return (strlen (psza) + 1) * sizeof(CHAR); }
  27. inline ULONG CbOfTSzAndTerm (PCTSTR psz) { AssertH(psz); return (_tcslen (psz) + 1) * sizeof(TCHAR); }
  28. ULONG CbOfSzSafe (PCWSTR psz);
  29. ULONG CbOfSzaSafe (PCSTR psza);
  30. ULONG CbOfTSzSafe (PCTSTR psz);
  31. ULONG CbOfSzAndTermSafe (PCWSTR psz);
  32. ULONG CbOfSzaAndTermSafe (PCSTR psza);
  33. ULONG CbOfTSzAndTermSafe (PCTSTR psz);
  34. ULONG
  35. CchOfSzSafe (
  36. PCWSTR psz);
  37. inline ULONG CchToCb (ULONG cch) { return cch * sizeof(WCHAR); }
  38. struct MAP_SZ_DWORD
  39. {
  40. PCWSTR pszValue;
  41. DWORD dwValue;
  42. };
  43. PWSTR
  44. WszAllocateAndCopyWsz (
  45. PCWSTR pszSrc);
  46. DWORD
  47. WINAPIV
  48. DwFormatString (
  49. PCWSTR pszFmt,
  50. PWSTR pszBuf,
  51. DWORD cchBuf,
  52. ...);
  53. DWORD
  54. WINAPIV
  55. DwFormatStringWithLocalAlloc (
  56. PCWSTR pszFmt,
  57. PWSTR* ppszBuf,
  58. ...);
  59. //+---------------------------------------------------------------------------
  60. //
  61. // Function: FIsStrEmpty
  62. //
  63. // Purpose: Determines if the given PCWSTR is "empty" meaning the pointer
  64. // is NULL or the string is 0-length.
  65. //
  66. // Arguments:
  67. // bstr [in] BSTR to check.
  68. //
  69. // Returns: TRUE if the BSTR is empty, FALSE if not.
  70. //
  71. // Author: danielwe 20 May 1997
  72. //
  73. // Notes:
  74. //
  75. inline
  76. BOOL
  77. FIsStrEmpty (
  78. PCWSTR psz)
  79. {
  80. return !(psz && *psz);
  81. }
  82. PCWSTR
  83. WszLoadStringPcch (
  84. HINSTANCE hinst,
  85. UINT unId,
  86. int* pcch);
  87. //+---------------------------------------------------------------------------
  88. //
  89. // Function: SzLoadString
  90. //
  91. // Purpose: Load a resource string. (This function will never return NULL.)
  92. //
  93. // Arguments:
  94. // hinst [in] Instance handle of module with the string resource.
  95. // unId [in] Resource ID of the string to load.
  96. //
  97. // Returns: Pointer to the constant string.
  98. //
  99. // Author: shaunco 24 Mar 1997
  100. //
  101. // Notes: See SzLoadStringPcch()
  102. //
  103. inline
  104. PCWSTR
  105. WszLoadString (
  106. HINSTANCE hinst,
  107. UINT unId)
  108. {
  109. int cch;
  110. return WszLoadStringPcch(hinst, unId, &cch);
  111. }
  112. PSTR
  113. SzaDupSza (
  114. IN PCSTR pszaSrc);
  115. PTSTR
  116. TszDupTsz (
  117. IN PCTSTR pszSrc);
  118. LPWSTR WszFromSz(LPCSTR szAnsi);
  119. LPWSTR WszFromUtf8(LPCSTR szUtf8);
  120. LPSTR SzFromWsz(LPCWSTR szWide);
  121. LPSTR Utf8FromWsz(LPCWSTR szWide);
  122. LPWSTR WszDupWsz(LPCWSTR szOld);
  123. LPWSTR WszFromTsz(LPCTSTR pszInputString);
  124. LPTSTR TszFromWsz(LPCWSTR szWide);
  125. LPTSTR TszFromSz(LPCSTR szAnsi);
  126. LPSTR SzFromTsz(LPCTSTR pszInputString);
  127. inline VOID SzToWszBuf(LPWSTR wszDest, LPCSTR szAnsiSrc, DWORD cch)
  128. {
  129. MultiByteToWideChar(CP_ACP, 0, szAnsiSrc, -1, wszDest, cch);
  130. }
  131. inline VOID WszToSzBuf(LPSTR szAnsiDest, LPCWSTR wszSrc, DWORD cch)
  132. {
  133. WideCharToMultiByte(CP_ACP, 0, wszSrc, -1, szAnsiDest, cch, NULL, NULL);
  134. }
  135. inline VOID WszToWszBuf(LPWSTR wszDest, LPCWSTR wszSrc, DWORD cch)
  136. {
  137. wcsncpy(wszDest, wszSrc, cch - 1);
  138. wszDest[cch - 1] = UNICODE_NULL;
  139. }
  140. inline VOID SzToSzBuf(LPSTR szDest, LPCSTR szSrc, DWORD cch)
  141. {
  142. strncpy(szDest, szSrc, cch - 1);
  143. szDest[cch - 1] = '\0';
  144. }
  145. #ifdef UNICODE
  146. #define SzToTszBuf SzToWszBuf
  147. #else
  148. #define SzToTszBuf SzToSzBuf
  149. #endif // UNICODE
  150. #ifdef UNICODE
  151. #define WszToTszBuf WszToWszBuf
  152. #else
  153. #define WszToTszBuf WszToSzBuf
  154. #endif // UNICODE
  155. #ifdef UNICODE
  156. #define TszToSzBuf WszToSzBuf
  157. #else
  158. #define TszToSzBuf SzToSzBuf
  159. #endif // UNICODE
  160. #ifdef UNICODE
  161. #define TszToWszBuf WszToWszBuf
  162. #else
  163. #define TszToWszBuf SzToWszBuf
  164. #endif // UNICODE
  165. HRESULT
  166. HrAddStringToDelimitedSz (
  167. PCTSTR pszAddString,
  168. PCTSTR pszIn,
  169. TCHAR chDelimiter,
  170. DWORD dwFlags,
  171. DWORD dwStringIndex,
  172. PTSTR* ppszOut);
  173. HRESULT
  174. HrRemoveStringFromDelimitedSz (
  175. PCTSTR pszRemove,
  176. PCTSTR pszIn,
  177. TCHAR chDelimiter,
  178. DWORD dwFlags,
  179. PTSTR* ppszOut);
  180. HRESULT
  181. HrReallocAndCopyString(/* IN */ LPCWSTR pszSrc, /* INOUT */ LPWSTR * ppszDest);
  182. LPWSTR COMSzFromWsz(LPCWSTR szOld);
  183. HRESULT HrCopyString(const char * szSrc, char ** pszDest);
  184. HRESULT HrCopyString(const wchar_t * szSrc, wchar_t ** pszDest);