/*****************************************************************/ /** Microsoft Windows for Workgroups **/ /** Copyright (C) Microsoft Corp., 1991-1992 **/ /*****************************************************************/ /* strparty.cxx NLS/DBCS-aware string class: party support This file contains the implementation of the Party() and DonePartying() methods of NLS_STR, used for string operations outside the set supported by NLS_STR itself. FILE HISTORY: gregj 03/25/93 Created */ #include "npcommon.h" extern "C" { #include } #if defined(DEBUG) static const CHAR szFileName[] = __FILE__; #define _FILENAME_DEFINED_ONCE szFileName #endif #include #include /******************************************************************* NAME: NLS_STR::Party SYNOPSIS: Obtains read-write access to the string buffer, and disables standard member function access to the string. ENTRY: No parameters EXIT: Returns a pointer to the string, NULL if in an error state NOTES: Use Party() with care. Check your partying code to make sure it's DBCS-safe, doesn't overflow the string buffer, etc. Each Party() must be matched with a DonePartying() call. They cannot be nested. It's probably not a good idea to leave a string in the Party()ing state for long. HISTORY: gregj 03/25/93 Created ********************************************************************/ CHAR *NLS_STR::Party() { if (QueryError()) return NULL; ReportError( WN_ACCESS_DENIED ); // keep other folks out return _pchData; // OK, go party } /******************************************************************* NAME: NLS_STR::DonePartying SYNOPSIS: Releases read-write access to the string buffer, and re-enables standard member access. ENTRY: cchNew - new string length (may be omitted, in which case it's determined by strlenf()) EXIT: No return value NOTES: HISTORY: gregj 03/25/93 Created lens 03/16/94 Don't let Party/DonePartying pairs lose hard allocation errors. ********************************************************************/ VOID NLS_STR::DonePartying( INT cchNew ) { _cchLen = cchNew; // store new length if (QueryError() == WN_ACCESS_DENIED ) { ReportError( WN_SUCCESS ); // standard members can access now } IncVers(); // all ISTRs are invalid now } VOID NLS_STR::DonePartying( VOID ) { DonePartying( ::strlenf( _pchData ) ); }