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