fix: update code as per comments
This commit is contained in:
parent
da99f38681
commit
8dcc278d18
@ -6061,17 +6061,22 @@ namespace pugi
|
|||||||
|
|
||||||
PUGI__FN bool xml_node::remove_attributes()
|
PUGI__FN bool xml_node::remove_attributes()
|
||||||
{
|
{
|
||||||
for (xml_attribute_struct* attr = this->_root->first_attribute; attr; attr = attr->next_attribute)
|
if (!_root) return false;
|
||||||
|
impl::xml_allocator& alloc = impl::get_allocator(_root);
|
||||||
|
if (!alloc.reserve()) return false;
|
||||||
|
|
||||||
|
for (xml_attribute_struct* attr = _root->first_attribute; attr;)
|
||||||
{
|
{
|
||||||
if (!_root || !attr) return false;
|
if (!attr) return false;
|
||||||
if (!impl::is_attribute_of(attr, _root)) return false;
|
if (!impl::is_attribute_of(attr, _root)) return false;
|
||||||
|
|
||||||
impl::xml_allocator& alloc = impl::get_allocator(_root);
|
xml_attribute_struct* next = attr->next_attribute;
|
||||||
if (!alloc.reserve()) return false;
|
|
||||||
|
|
||||||
impl::destroy_attribute(attr, alloc);
|
impl::destroy_attribute(attr, alloc);
|
||||||
|
|
||||||
|
attr = next;
|
||||||
}
|
}
|
||||||
this->_root->first_attribute = 0;
|
_root->first_attribute = 0;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -6096,16 +6101,21 @@ namespace pugi
|
|||||||
|
|
||||||
PUGI__FN bool xml_node::remove_children()
|
PUGI__FN bool xml_node::remove_children()
|
||||||
{
|
{
|
||||||
for (xml_node_struct* child = this->_root->first_child; child; child = child->next_sibling)
|
if (!_root) return false;
|
||||||
|
|
||||||
|
impl::xml_allocator& alloc = impl::get_allocator(_root);
|
||||||
|
if (!alloc.reserve()) return false;
|
||||||
|
|
||||||
|
for (xml_node_struct* child = _root->first_child; child; )
|
||||||
{
|
{
|
||||||
if (!_root || !child || child->parent != _root) return false;
|
xml_node_struct* next = child->next_sibling;
|
||||||
|
|
||||||
impl::xml_allocator& alloc = impl::get_allocator(_root);
|
destroy_node(child, alloc);
|
||||||
if (!alloc.reserve()) return false;
|
|
||||||
|
|
||||||
impl::destroy_node(child, alloc);
|
child = next;
|
||||||
}
|
}
|
||||||
this->_root->first_child = 0;
|
|
||||||
|
_root->first_child = 0;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -494,6 +494,7 @@ TEST_XML(dom_node_remove_attribute, "<node a1='v1' a2='v2' a3='v3'><child a4='v4
|
|||||||
|
|
||||||
TEST_XML(dom_node_remove_attributes, "<node a1='v1' a2='v2' a3='v3'><child a4='v4'/></node>")
|
TEST_XML(dom_node_remove_attributes, "<node a1='v1' a2='v2' a3='v3'><child a4='v4'/></node>")
|
||||||
{
|
{
|
||||||
|
CHECK(!xml_node().remove_attributes());
|
||||||
xml_node node = doc.child(STR("node"));
|
xml_node node = doc.child(STR("node"));
|
||||||
xml_node child = node.child(STR("child"));
|
xml_node child = node.child(STR("child"));
|
||||||
|
|
||||||
@ -721,6 +722,7 @@ TEST_XML(dom_node_remove_child, "<node><n1/><n2/><n3/><child><n4/></child></node
|
|||||||
|
|
||||||
TEST_XML(dom_node_remove_children, "<node><n1/><n2/><n3/><child><n4/></child></node>")
|
TEST_XML(dom_node_remove_children, "<node><n1/><n2/><n3/><child><n4/></child></node>")
|
||||||
{
|
{
|
||||||
|
CHECK(!xml_node().remove_children());
|
||||||
xml_node node = doc.child(STR("node"));
|
xml_node node = doc.child(STR("node"));
|
||||||
xml_node child = node.child(STR("child"));
|
xml_node child = node.child(STR("child"));
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user