Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

212 lines
5.4 KiB

/**********************************************************************/
/** Microsoft Windows NT **/
/** Copyright(c) Microsoft Corp., 1994 **/
/**********************************************************************/
/*
string.hxx
This module contains a light weight string class
FILE HISTORY:
Johnl 15-Aug-1994 Created
MuraliK 16-Nov-1994 Modified for new TSVC_INFO object
MuraliK 04-Jan-1994 Added functions IsEmpty() and Clone()
*/
#ifndef _STRING_HXX_
#define _STRING_HXX_
# include <buffer.hxx>
//
// Maximum number of characters a loadable string resource can be
//
# define STR_MAX_RES_SIZE ( 320)
class STR;
//
// If an application defines STR_MODULE_NAME, it will be used
// as the default module name on string loads
//
#ifndef STR_MODULE_NAME
#define STR_MODULE_NAME NULL
#endif
//
// These are the characters that are considered to be white space
//
#define ISWHITE( ch ) ((ch) == L'\t' || (ch) == L' ' || (ch) == L'\r')
#define ISWHITEA( ch ) ((ch) == '\t' || (ch) == ' ' || (ch) == '\r')
//
// Removes useless segments from the URL and makes sure it doesn't go
// past the root of the tree (i.e., "/foo/../..")
//
dllexp BOOL CanonURL( STR * pstrUrl,
BOOL * pfValid );
class STR : public BUFFER
{
public:
dllexp STR()
{
_fUnicode = FALSE;
_fValid = TRUE;
}
dllexp STR( const CHAR * pchInit );
dllexp STR( const WCHAR * pwchInit );
dllexp STR( const STR & str );
dllexp BOOL Append( const CHAR * pchInit );
dllexp BOOL Append( const WCHAR * pwchInit );
dllexp BOOL Append( const STR & str );
dllexp BOOL Copy( const CHAR * pchInit );
dllexp BOOL Copy( const WCHAR * pwchInit );
dllexp BOOL Copy( const STR & str );
dllexp BOOL Resize( UINT cbNewReqestedSize );
//
// Loads a string from this module's string resource table
//
dllexp BOOL LoadString( IN DWORD dwResID,
IN LPCTSTR lpszModuleName = STR_MODULE_NAME);
dllexp BOOL LoadString( IN DWORD dwResID,
IN HMODULE hModule);
//
// Loads a string with insert params from this module's .mc resource
// table. Pass zero for the resource ID to use *this.
//
dllexp BOOL FormatString( IN DWORD dwResID,
IN LPCTSTR apszInsertParams[],
IN LPCTSTR lpszModuleName = STR_MODULE_NAME);
//
// Inserts and removes any odd ranged Latin-1 characters with the
// escaped hexadecimal equivalent (%xx)
//
// These operate on Unicode strings only
//
dllexp BOOL Escape();
dllexp BOOL Unescape();
//
// Returns the number of bytes in the string excluding the terminating
// NULL
//
dllexp UINT QueryCB( VOID ) const
{ return IsUnicode() ? ::wcslen((WCHAR *)QueryStrW()) * sizeof(TCHAR) :
::strlen((CHAR *) QueryStrA()); }
//
// Returns the number of characters in the string excluding the terminating
// NULL
//
dllexp UINT QueryCCH( VOID ) const
{ return IsUnicode() ? ::wcslen((WCHAR *)QueryStrW()) :
::strlen((CHAR *) QueryStrA()); }
//
// Makes a Widechar copy of the stored string in given buffer
//
dllexp BOOL CopyToBuffer( WCHAR * lpszBuffer, LPDWORD lpcch) const;
//
// If the string buffer is empty, returns the empty string, otherwise
// returns a pointer to the buffer
//
#if 1
dllexp CHAR * QueryStrA( VOID ) const;
dllexp WCHAR * QueryStrW( VOID ) const;
#else
//
// _pszEmptyString doesn't get imported corectly, results in unresolved
// externals
//
dllexp CHAR * QueryStrA( VOID ) const
{ return (QueryPtr() ? (CHAR *) QueryPtr() : (CHAR *) _pszEmptyString); }
dllexp WCHAR * QueryStrW( VOID ) const
{ return (QueryPtr() ? (WCHAR *) QueryPtr() : (WCHAR *) _pszEmptyString); }
#endif //!DBG
#ifdef UNICODE
dllexp WCHAR * QueryStr( VOID ) const
{ return QueryStrW(); }
#else
dllexp CHAR * QueryStr( VOID ) const
{ return QueryStrA(); }
#endif
dllexp BOOL IsUnicode( VOID ) const
{ return _fUnicode; }
dllexp VOID SetUnicode( BOOL fUnicode )
{ _fUnicode = fUnicode; }
dllexp BOOL IsValid( VOID ) const
{ return _fValid; }
//
// Checks and returns TRUE if this string has no valid data else FALSE
//
dllexp BOOL IsEmpty( VOID) const
{ return ( *QueryStr() == '\0'); }
//
// Makes a clone of the current string in the string pointer passed in.
//
dllexp BOOL
Clone( OUT STR * pstrClone) const
{
if ( pstrClone == NULL) {
SetLastError( ERROR_INVALID_PARAMETER);
return ( FALSE);
} else {
return ( pstrClone->Copy( *this));
}
} // STR::Clone()
private:
//
// TRUE if the string has already been mapped to Unicode
// FALSE if the string is in Latin1
//
BOOL _fUnicode;
BOOL _fValid;
//
// Returned when our buffer is empty
//
dllexp static WCHAR _pszEmptyString[];
VOID AuxInit( PBYTE pInit, BOOL fUnicode );
BOOL AuxAppend( PBYTE pInit, UINT cbStr, BOOL fAddSlop = TRUE );
};
#endif // !_STRING_HXX_