//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1997. // // File: N C S T R I N G . H // // Contents: Common string routines. // // Notes: // // Author: shaunco 24 Mar 1997 // //---------------------------------------------------------------------------- #pragma once #include "ncdebug.h" #include #include const int c_cchGuidWithTerm = 39; // includes terminating null const int c_cbGuidWithTerm = c_cchGuidWithTerm * sizeof(WCHAR); char *stristr(const char *string1, const char *string2); inline ULONG CbOfSz (PCWSTR psz) { AssertH(psz); return wcslen (psz) * sizeof(WCHAR); } inline ULONG CbOfSza (PCSTR psza) { AssertH(psza); return strlen (psza) * sizeof(CHAR); } inline ULONG CbOfTSz (PCTSTR psz) { AssertH(psz); return _tcslen (psz) * sizeof(TCHAR); } inline ULONG CbOfSzAndTerm (PCWSTR psz) { AssertH(psz); return (wcslen (psz) + 1) * sizeof(WCHAR); } inline ULONG CbOfSzaAndTerm (PCSTR psza) { AssertH(psza); return (strlen (psza) + 1) * sizeof(CHAR); } inline ULONG CbOfTSzAndTerm (PCTSTR psz) { AssertH(psz); return (_tcslen (psz) + 1) * sizeof(TCHAR); } ULONG CbOfSzSafe (PCWSTR psz); ULONG CbOfSzaSafe (PCSTR psza); ULONG CbOfTSzSafe (PCTSTR psz); ULONG CbOfSzAndTermSafe (PCWSTR psz); ULONG CbOfSzaAndTermSafe (PCSTR psza); ULONG CbOfTSzAndTermSafe (PCTSTR psz); ULONG CchOfSzSafe ( PCWSTR psz); inline ULONG CchToCb (ULONG cch) { return cch * sizeof(WCHAR); } struct MAP_SZ_DWORD { PCWSTR pszValue; DWORD dwValue; }; PWSTR WszAllocateAndCopyWsz ( PCWSTR pszSrc); DWORD WINAPIV DwFormatString ( PCWSTR pszFmt, PWSTR pszBuf, DWORD cchBuf, ...); DWORD WINAPIV DwFormatStringWithLocalAlloc ( PCWSTR pszFmt, PWSTR* ppszBuf, ...); //+--------------------------------------------------------------------------- // // Function: FIsStrEmpty // // Purpose: Determines if the given PCWSTR is "empty" meaning the pointer // is NULL or the string is 0-length. // // Arguments: // bstr [in] BSTR to check. // // Returns: TRUE if the BSTR is empty, FALSE if not. // // Author: danielwe 20 May 1997 // // Notes: // inline BOOL FIsStrEmpty ( PCWSTR psz) { return !(psz && *psz); } PCWSTR WszLoadStringPcch ( HINSTANCE hinst, UINT unId, int* pcch); //+--------------------------------------------------------------------------- // // Function: SzLoadString // // Purpose: Load a resource string. (This function will never return NULL.) // // Arguments: // hinst [in] Instance handle of module with the string resource. // unId [in] Resource ID of the string to load. // // Returns: Pointer to the constant string. // // Author: shaunco 24 Mar 1997 // // Notes: See SzLoadStringPcch() // inline PCWSTR WszLoadString ( HINSTANCE hinst, UINT unId) { int cch; return WszLoadStringPcch(hinst, unId, &cch); } PSTR SzaDupSza ( IN PCSTR pszaSrc); PTSTR TszDupTsz ( IN PCTSTR pszSrc); LPWSTR WszFromSz(LPCSTR szAnsi); LPWSTR WszFromUtf8(LPCSTR szUtf8); LPSTR SzFromWsz(LPCWSTR szWide); LPSTR Utf8FromWsz(LPCWSTR szWide); LPWSTR WszDupWsz(LPCWSTR szOld); LPWSTR WszFromTsz(LPCTSTR pszInputString); LPTSTR TszFromWsz(LPCWSTR szWide); LPTSTR TszFromSz(LPCSTR szAnsi); LPSTR SzFromTsz(LPCTSTR pszInputString); inline VOID SzToWszBuf(LPWSTR wszDest, LPCSTR szAnsiSrc, DWORD cch) { MultiByteToWideChar(CP_ACP, 0, szAnsiSrc, -1, wszDest, cch); } inline VOID WszToSzBuf(LPSTR szAnsiDest, LPCWSTR wszSrc, DWORD cch) { WideCharToMultiByte(CP_ACP, 0, wszSrc, -1, szAnsiDest, cch, NULL, NULL); } inline VOID WszToWszBuf(LPWSTR wszDest, LPCWSTR wszSrc, DWORD cch) { wcsncpy(wszDest, wszSrc, cch - 1); wszDest[cch - 1] = UNICODE_NULL; } inline VOID SzToSzBuf(LPSTR szDest, LPCSTR szSrc, DWORD cch) { strncpy(szDest, szSrc, cch - 1); szDest[cch - 1] = '\0'; } #ifdef UNICODE #define SzToTszBuf SzToWszBuf #else #define SzToTszBuf SzToSzBuf #endif // UNICODE #ifdef UNICODE #define WszToTszBuf WszToWszBuf #else #define WszToTszBuf WszToSzBuf #endif // UNICODE #ifdef UNICODE #define TszToSzBuf WszToSzBuf #else #define TszToSzBuf SzToSzBuf #endif // UNICODE #ifdef UNICODE #define TszToWszBuf WszToWszBuf #else #define TszToWszBuf SzToWszBuf #endif // UNICODE HRESULT HrAddStringToDelimitedSz ( PCTSTR pszAddString, PCTSTR pszIn, TCHAR chDelimiter, DWORD dwFlags, DWORD dwStringIndex, PTSTR* ppszOut); HRESULT HrRemoveStringFromDelimitedSz ( PCTSTR pszRemove, PCTSTR pszIn, TCHAR chDelimiter, DWORD dwFlags, PTSTR* ppszOut); HRESULT HrReallocAndCopyString(/* IN */ LPCWSTR pszSrc, /* INOUT */ LPWSTR * ppszDest); LPWSTR COMSzFromWsz(LPCWSTR szOld); HRESULT HrCopyString(const char * szSrc, char ** pszDest); HRESULT HrCopyString(const wchar_t * szSrc, wchar_t ** pszDest);