NBT: Only call free() if we allocated it
This commit is contained in:
parent
4569c1429d
commit
d38f673c63
|
@ -160,18 +160,19 @@ namespace NBT
|
|||
//==================================================
|
||||
|
||||
CompoundTag::CompoundTag(const char *filename)
|
||||
: CompoundTag(nbt_parse_path(filename))
|
||||
: CompoundTag(nbt_parse_path(filename), true) // m_isRoot = true, this calls malloc
|
||||
{
|
||||
}
|
||||
|
||||
CompoundTag::CompoundTag(const void* data, size_t length)
|
||||
: CompoundTag(nbt_parse_compressed(data, length))
|
||||
: CompoundTag(nbt_parse_compressed(data, length), true) // m_isRoot = true, this calls malloc
|
||||
{
|
||||
}
|
||||
|
||||
CompoundTag::~CompoundTag()
|
||||
{
|
||||
nbt_free(m_node);
|
||||
if (m_isRoot)
|
||||
nbt_free(m_node);
|
||||
}
|
||||
|
||||
const Tag CompoundTag::operator[](const char *name) const
|
||||
|
|
|
@ -135,12 +135,17 @@ namespace NBT
|
|||
// A Compound Tag is an unordered list of named tags
|
||||
class CompoundTag : public Tag
|
||||
{
|
||||
// only true if the tree was allocated by constructor
|
||||
const bool m_isRoot;
|
||||
|
||||
CompoundTag(nbt_node* node, bool isRoot) : Tag(node), m_isRoot(false) {}
|
||||
public:
|
||||
CompoundTag(nbt_node* node) : Tag(node) {}
|
||||
CompoundTag(nbt_node* node) : CompoundTag(node, false) {}
|
||||
|
||||
// Read tree from file
|
||||
CompoundTag(const char* filename);
|
||||
|
||||
// Read a compound tag from compressed data
|
||||
// Read tree from compressed data
|
||||
CompoundTag(const void* data, size_t length);
|
||||
|
||||
~CompoundTag();
|
||||
|
|
Loading…
Reference in New Issue