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