Beispiel #1
0
void xml_file_free(xml_data_node *node)
{
	/* ensure this is a root node */
	assert_always(node->name == NULL, "xml_file_free called with a non-root node");

	free_node_recursive(node);
}
Beispiel #2
0
void xml_file_free(xml_data_node *node)
{
	/* ensure this is a root node */
	if (node->name != nullptr)
		return;

	free_node_recursive(node);
}
Beispiel #3
0
void xml_delete_node(xml_data_node *node)
{
	xml_data_node **pnode;

	/* first unhook us from the list of children of our parent */
	for (pnode = &node->parent->child; *pnode; pnode = &(*pnode)->next)
		if (*pnode == node)
		{
			*pnode = node->next;
			break;
		}

	/* now free ourselves and our children */
	free_node_recursive(node);
}
Beispiel #4
0
static void free_node_recursive(xml_data_node *node)
{
	xml_attribute_node *anode, *nanode;
	xml_data_node *child, *nchild;

	/* free name/value */
	if (node->name != nullptr)
		free((void *)node->name);
	if (node->value != nullptr)
		free((void *)node->value);

	/* free attributes */
	for (anode = node->attribute; anode; anode = nanode)
	{
		/* free name/value */
		if (anode->name != nullptr)
			free((void *)anode->name);
		if (anode->value != nullptr)
			free((void *)anode->value);

		/* note the next node and free this node */
		nanode = anode->next;
		free(anode);
	}

	/* free the children */
	for (child = node->child; child; child = nchild)
	{
		/* note the next node and free this node */
		nchild = child->next;
		free_node_recursive(child);
	}

	/* finally free ourself */
	free(node);
}