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:
@@ -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++;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user