diff --git a/LiteProtocolCore.cpp b/LiteProtocolCore.cpp index e4d2755..92ebdd8 100644 --- a/LiteProtocolCore.cpp +++ b/LiteProtocolCore.cpp @@ -196,6 +196,7 @@ bool CLiteProtocol::NewCommandStr() free( CommandStr ); CommandStr = NULL; BufferSize = 0; + Length = 0; }; IncCommandStr( 14 ); @@ -346,21 +347,31 @@ bool CLiteProtocol::AppendParam( const char * pString, const int pLength ) int StringLen; // Check if valid - if (!pString) - return false; + if (!pLength || (!pString && (pLength == -1))) + { + // Increase string length if required + StringLen = 0; + IncCommandStr( Length + 1 ); - // Increase string length if required - StringLen = (pLength < 0)? strlen(pString) : pLength; - IncCommandStr( Length + StringLen+1 ); + // Copy string + CommandStr[CurrPos+StringLen] = Separator; + Length += 1; // Allow for separator character + } + else + { + // Increase string length if required + StringLen = (pLength < 0)? strlen(pString) : pLength; + IncCommandStr( Length + StringLen+1 ); - // Copy string - memcpy( &CommandStr[CurrPos], (char*)pString, StringLen ); - CommandStr[CurrPos+StringLen] = Separator; - Length = Length + StringLen + 1; // Allow for separator character + // Copy string + memcpy( &CommandStr[CurrPos], (char*)pString, StringLen ); + CommandStr[CurrPos+StringLen] = Separator; + Length = Length + StringLen + 1; // Allow for separator character + } // Move pointer to end and set end char CurrParam++; - CurrPos = CurrPos + StringLen + 1; // Allow for separator character + CurrPos += StringLen + 1; // Allow for separator character CommandStr[CurrPos] = EndChar; // Update references diff --git a/LiteProtocolCore.h b/LiteProtocolCore.h index 50871fd..94451b4 100644 --- a/LiteProtocolCore.h +++ b/LiteProtocolCore.h @@ -88,8 +88,12 @@ class CLiteProtocol int * FromLen = NULL, int * ToLen = NULL, int * CommandLen = NULL ); // Read core parameters from structured command: To, From & Command // Read structured Command string - inline int GetNoOfDataParams() { return (NoOfParams - 3); }; // Return number for data (additional) params - inline bool GotoDataParam( int ParamNo ) { return (GotoParam( ParamNo+3 )); }; // Goto specific data (additional) param + inline int GetNoOfDataParams() { // Return number for data (additional) params + return (NoOfParams - 3); + }; + inline bool GotoDataParam( int ParamNo ) { // Goto specific data (additional) param + return (GotoParam( ParamNo+3 )); + }; inline char const * GetDataParamNo( int ParamNo, char ** pString = NULL, int * pLength = NULL ) { // Read specific data param (by number) return (GetParamNo( ParamNo+3, pString, pLength )); };