Important Update:

- Bug fix: Create wrong member name because not zero terminated
- Bug fix: Only create array element if brackets empty
This commit is contained in:
Charl Wentzel
2017-04-06 05:35:30 +02:00
parent 200f7e1f8b
commit 23db2539d9
2 changed files with 13 additions and 8 deletions

View File

@@ -33,16 +33,20 @@ CDataTree::~CDataTree()
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
TDataMember * CDataTree::CreateMember( const char * Name ) TDataMember * CDataTree::CreateMember( const char * Name, const int Len )
{ {
TDataMember * Member; TDataMember * Member;
// Create data structure
Member = (TDataMember *)calloc( 1, sizeof(TDataMember) ); Member = (TDataMember *)calloc( 1, sizeof(TDataMember) );
if (Name && *Name)
// Set name
if (Name)
{ {
Member->Len = strlen( Name ); Member->NameLen = (Len == -1)? strlen( Name ) : Len ;
Member->Name = (char *)malloc( Member->Len+1 ); Member->Name = (char *)malloc( Member->NameLen+1 );
strcpy( Member->Name, Name ); memcpy( Member->Name, Name, Member->NameLen );
Member->Name[ Member->NameLen ] = 0;
} }
return Member; return Member;
} }
@@ -178,6 +182,7 @@ TDataMember ** CDataTree::GetMemberPtr( TDataMember * BaseMember, const char *
// Empty bracket only allowed for create // Empty bracket only allowed for create
if (!Create) if (!Create)
break; break;
Index = -1;
// find end of list // find end of list
Child = &(Member->FirstChild); Child = &(Member->FirstChild);
@@ -201,7 +206,7 @@ TDataMember ** CDataTree::GetMemberPtr( TDataMember * BaseMember, const char *
// Create element if needed // Create element if needed
if (!*Child && Create) { if (!*Child && Create) {
if (!Index || (Index = Count + 1)) { if ((Index == -1) || (Index = Count + 1)) {
*Child = CreateMember( NULL ); *Child = CreateMember( NULL );
Member->Len++; Member->Len++;
} }
@@ -241,7 +246,7 @@ TDataMember ** CDataTree::GetMemberPtr( TDataMember * BaseMember, const char *
Child = &((*Child)->Next); Child = &((*Child)->Next);
} }
if (!*Child && Create) { if (!*Child && Create) {
*Child = CreateMember( Key ); *Child = CreateMember( Key, KeyLen );
Member->Len++; Member->Len++;
} }
} }

View File

@@ -48,7 +48,7 @@ private:
TDataMember * RootMember; TDataMember * RootMember;
// Manage Members // Manage Members
TDataMember * CreateMember( const char * Name ); TDataMember * CreateMember( const char * Name, const int Len = -1 );
bool AddMember( TDataMember * Parent, TDataMember * Member ); bool AddMember( TDataMember * Parent, TDataMember * Member );
bool DestroyMember( TDataMember ** Member ); bool DestroyMember( TDataMember ** Member );
bool DestroyValue( TDataMember * Member ); bool DestroyValue( TDataMember * Member );