windows-nt/Source/XPSP1/NT/net/upnp/inc/ncstring.h
2020-09-26 16:20:57 +08:00

225 lines
5 KiB
C

//+---------------------------------------------------------------------------
//
// 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 <tchar.h>
#include <oleauto.h>
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);