mirror of https://github.com/tongzx/nt5src
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
224 lines
5.0 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// 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);
|
|
|