Important update:

- DataTreeCore:
  - Renamed Get/SetMemXxx() methods to Get/SetChXxx()
  - Renamed GetMember() to GetChild()
  - Updated: JSONparse, ApplicationCore, FunctionCore, SelectableCore,
             and WatchdogCore
  - Remove unused PrevChild & Last vars in GetChild (GetMember)
- JSONparseCore:
  - Use return values from write() and PrintXxx() methods to report fail
- SelectableCore:
  - Fix possible uninitialised FlowCtrl & Parity value
- DateTimeCore:
  - Fix possible memory overrun in temp buffer
- EventBufferCore:
  - Fix possible uninitialised value error in AddEvent
This commit is contained in:
Charl Wentzel
2018-11-20 11:27:09 +02:00
parent 278198171d
commit 6263c0f508
9 changed files with 248 additions and 213 deletions

View File

@@ -148,18 +148,16 @@ bool CDataMember::Clear()
}
//---------------------------------------------------------------------------
CDataMember * CDataMember::GetMember( const char * Path, bool Create )
CDataMember * CDataMember::GetChild( const char * Path, bool Create )
{
CDataMember * Member;
CDataMember ** Child;
CDataMember * PrevChild;
char * Pos;
char * EndPos;
char * Key;
unsigned short KeyLen;
int Index;
int Count;
bool Last = false;
// Validate
if (!Path || !*Path) {
@@ -197,11 +195,7 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
Pos++;
if (!*Pos)
break;
// Check if last
Pos++;
if (!*Pos)
Last = true;
if (Pos == Key+1) {
// Empty bracket only allowed for create
@@ -210,10 +204,8 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
Index = -1;
// find end of list
PrevChild = NULL;
Child = &(Member->FirstChild);
while (*Child) {
PrevChild = *Child;
Child = &((*Child)->NextPeer);
}
}
@@ -224,11 +216,9 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
break;
// Find element at requested index
PrevChild = NULL;
Child = &(Member->FirstChild);
Count = 0;
while (*Child && (Count < Index)) {
PrevChild = *Child;
Child = &((*Child)->NextPeer);
Count++;
}
@@ -264,16 +254,9 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
Pos++;
}
// More elements?
if (!*Pos) {
Last = true;
}
// Find next parent
PrevChild = NULL;
Child = &(Member->FirstChild);
while (*Child && (((*Child)->NameLen != KeyLen) || strncasecmp( (*Child)->Name, Key, KeyLen ))) {
PrevChild = *Child;
Child = &((*Child)->NextPeer);
}
if (!*Child && Create) {
@@ -288,12 +271,12 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
}
//---------------------------------------------------------------------------
CDataMember * CDataMember::GetMemFirstChild( const char * Path )
CDataMember * CDataMember::GetChFirstChild( const char * Path )
{
CDataMember * Member = NULL;
// Find member
Member = (!Path || !*Path)? this : GetMember( Path, false );
Member = (!Path || !*Path)? this : GetChild( Path, false );
// Check if valid type
if (!Member || ((Member->Type != jtObject) && (Member->Type != jtNull))) {
@@ -304,14 +287,14 @@ CDataMember * CDataMember::GetMemFirstChild( const char * Path )
}
//---------------------------------------------------------------------------
CDataMember * CDataMember::GetMemElement( const char * Path, const int Index )
CDataMember * CDataMember::GetChElement( const char * Path, const int Index )
{
CDataMember * Member = NULL;
CDataMember * Child = NULL;
int Count;
// Find Member
Member = (!Path || !*Path)? this : GetMember( Path, false );
Member = (!Path || !*Path)? this : GetChild( Path, false );
// Check if valid type
if (!Member || ((Member->Type != jtArray) && (Member->Type != jtNull))) {
@@ -340,7 +323,7 @@ bool CDataMember::Delete( const char * Path )
Clear();
return true;
}
else if ((Member = GetMember( Path, false ))) {
else if ((Member = GetChild( Path, false ))) {
// If valid path, destroy member
delete Member;
return true;
@@ -381,12 +364,12 @@ bool CDataMember::SetValue( EDataType pType, const char * pValue, int pLen )
}
//---------------------------------------------------------------------------
bool CDataMember::SetMemObject( const char * Path )
bool CDataMember::SetChObject( const char * Path )
{
CDataMember * Member;
// Validate
if (!(Member = GetMember( Path, true ))) {
if (!(Member = GetChild( Path, true ))) {
return false;
}
@@ -396,12 +379,12 @@ bool CDataMember::SetMemObject( const char * Path )
}
//---------------------------------------------------------------------------
bool CDataMember::SetMemArray( const char * Path )
bool CDataMember::SetChArray( const char * Path )
{
CDataMember * Member;
// Validate
if (!(Member = GetMember( Path, true ))) {
if (!(Member = GetChild( Path, true ))) {
return false;
}
@@ -411,12 +394,12 @@ bool CDataMember::SetMemArray( const char * Path )
}
//---------------------------------------------------------------------------
bool CDataMember::SetMemStr( const char * Path, const char * Value, const int Len )
bool CDataMember::SetChStr( const char * Path, const char * Value, const int Len )
{
CDataMember * Member;
// Validate
if (!(Member = GetMember( Path, true ))) {
if (!(Member = GetChild( Path, true ))) {
return false;
}
@@ -431,13 +414,13 @@ bool CDataMember::SetMemStr( const char * Path, const char * Value, const int L
}
//---------------------------------------------------------------------------
bool CDataMember::SetMemInt( const char * Path, const long Value, const char * Mask )
bool CDataMember::SetChInt( const char * Path, const long Value, const char * Mask )
{
CDataMember * Member;
char ValueStr[20];
// Validate
if (!(Member = GetMember( Path, true ))) {
if (!(Member = GetChild( Path, true ))) {
return false;
}
@@ -448,13 +431,13 @@ bool CDataMember::SetMemInt( const char * Path, const long Value, const char *
}
//---------------------------------------------------------------------------
bool CDataMember::SetMemFloat( const char * Path, const double Value, const char * Mask )
bool CDataMember::SetChFloat( const char * Path, const double Value, const char * Mask )
{
CDataMember * Member;
char ValueStr[20];
// Validate
if (!(Member = GetMember( Path, true ))) {
if (!(Member = GetChild( Path, true ))) {
return false;
}
@@ -465,12 +448,12 @@ bool CDataMember::SetMemFloat( const char * Path, const double Value, const cha
}
//---------------------------------------------------------------------------
bool CDataMember::SetMemBool( const char * Path, const bool Value )
bool CDataMember::SetChBool( const char * Path, const bool Value )
{
CDataMember * Member;
// Validate
if (!(Member = GetMember( Path, true ))) {
if (!(Member = GetChild( Path, true ))) {
return false;
}
@@ -480,12 +463,12 @@ bool CDataMember::SetMemBool( const char * Path, const bool Value )
}
//---------------------------------------------------------------------------
bool CDataMember::SetMemNull( const char * Path )
bool CDataMember::SetChNull( const char * Path )
{
CDataMember * Member;
// Validate
if (!(Member = GetMember( Path, true ))) {
if (!(Member = GetChild( Path, true ))) {
return false;
}
@@ -500,7 +483,7 @@ const char * CDataMember::GetName( const char * Path )
CDataMember * Member;
// Validate
if (!(Member = GetMember( Path, false ))) {
if (!(Member = GetChild( Path, false ))) {
return NULL;
}
return Member->Name;
@@ -512,7 +495,7 @@ EDataType CDataMember::GetType( const char * Path )
CDataMember * Member;
// Validate
if (!(Member = GetMember( Path, false ))) {
if (!(Member = GetChild( Path, false ))) {
return jtNull;
}
return Member->Type;
@@ -524,7 +507,7 @@ const int CDataMember::GetLen( const char * Path )
CDataMember * Member;
// Validate
if ((Member = GetMember( Path, false ))) {
if ((Member = GetChild( Path, false ))) {
return Member->Len;
}
else {
@@ -533,12 +516,12 @@ const int CDataMember::GetLen( const char * Path )
}
//---------------------------------------------------------------------------
const char * CDataMember::GetMemStr( const char * Path, const char * Default, bool Create )
const char * CDataMember::GetChStr( const char * Path, const char * Default, bool Create )
{
CDataMember * Member;
// Validate
if ((Member = GetMember( Path, Create )) &&
if ((Member = GetChild( Path, Create )) &&
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
return Member->Value;
}
@@ -552,12 +535,12 @@ const char * CDataMember::GetMemStr( const char * Path, const char * Default, bo
}
//---------------------------------------------------------------------------
const char * CDataMember::GetMemStr( const char * Path, int &Len, const char * Default, bool Create )
const char * CDataMember::GetChStr( const char * Path, int &Len, const char * Default, bool Create )
{
CDataMember * Member;
// Validate
if ((Member = GetMember( Path, Create )) &&
if ((Member = GetChild( Path, Create )) &&
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
Len = Member->Len;
return Member->Value;
@@ -574,12 +557,12 @@ const char * CDataMember::GetMemStr( const char * Path, int &Len, const char * D
}
//---------------------------------------------------------------------------
const long CDataMember::GetMemInt( const char * Path, long Default, bool Create, const char * Mask )
const long CDataMember::GetChInt( const char * Path, long Default, bool Create, const char * Mask )
{
CDataMember * Member;
// Validate
if ((Member = GetMember( Path, Create )) &&
if ((Member = GetChild( Path, Create )) &&
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
return strtol( Member->Value, NULL, 10 );
}
@@ -595,12 +578,12 @@ const long CDataMember::GetMemInt( const char * Path, long Default, bool Create
}
//---------------------------------------------------------------------------
const double CDataMember::GetMemFloat( const char * Path, double Default, bool Create, const char * Mask )
const double CDataMember::GetChFloat( const char * Path, double Default, bool Create, const char * Mask )
{
CDataMember * Member;
// Validate
if ((Member = GetMember( Path, Create )) &&
if ((Member = GetChild( Path, Create )) &&
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
return strtod( Member->Value, NULL );
}
@@ -616,12 +599,12 @@ const double CDataMember::GetMemFloat( const char * Path, double Default, bool
}
//---------------------------------------------------------------------------
const bool CDataMember::GetMemBool( const char * Path, bool Default, bool Create )
const bool CDataMember::GetChBool( const char * Path, bool Default, bool Create )
{
CDataMember * Member;
// Validate
if ((Member = GetMember( Path, Create ))) {
if ((Member = GetChild( Path, Create ))) {
if (Member->Type == jtString) {
return ((!*Member->Value)? false : true);
}