svg_loader: free allocated data properly.

also renamed internal function for consistency.

createNode()
cloneNode()
freeSVGNode() ?

Change-Id: Ie9b22e92d5e918e947f8476ad0d4682fc7a3be65
This commit is contained in:
Hermet Park 2020-08-13 19:41:34 +09:00
parent 8abef404cf
commit 3b9bb51321

View file

@ -33,7 +33,7 @@
typedef SvgNode* (*FactoryMethod)(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength);
typedef SvgStyleGradient* (*GradientFactoryMethod)(SvgLoaderData* loader, const char* buf, unsigned bufLength);
static void _freeNode(SvgNode* node);
static char* _skipSpace(const char* str, const char* end)
{
@ -1459,6 +1459,8 @@ static void _cloneNode(SvgNode* from, SvgNode* parent)
for (vector<SvgNode*>::iterator itrChild = from->child.begin(); itrChild != from->child.end(); itrChild++) {
_cloneNode(*itrChild, newNode);
}
_freeNode(newNode);
}
@ -2161,12 +2163,12 @@ static void _freeNodeStyle(SvgStyleProperty* style)
free(style);
}
static void _freeSvgNode(SvgNode* node)
static void _freeNode(SvgNode* node)
{
if (!node) return;
for(vector<SvgNode*>::iterator itrChild = node->child.begin(); itrChild != node->child.end(); itrChild++) {
_freeSvgNode(*itrChild);
_freeNode(*itrChild);
}
node->child.clear();
@ -2187,7 +2189,7 @@ static void _freeSvgNode(SvgNode* node)
break;
}
case SvgNodeType::Doc: {
_freeSvgNode(node->node.doc.defs);
_freeNode(node->node.doc.defs);
break;
}
case SvgNodeType::Defs: {
@ -2360,7 +2362,7 @@ bool SvgLoader::close()
free(loaderData.svgParse);
loaderData.svgParse = nullptr;
}
_freeSvgNode(loaderData.doc);
_freeNode(loaderData.doc);
loaderData.doc = nullptr;
return true;