diff options
author | Stefan Roellin <stefan@roellin-baumann.ch> | 2022-11-24 08:45:51 +0100 |
---|---|---|
committer | Stefan Roellin <stefan@roellin-baumann.ch> | 2023-08-26 11:30:49 +0200 |
commit | f4d4316eba8f2d26a8f78b87fb474a2fe238801f (patch) | |
tree | 749bbb17501f5d22aa673270bebd1159d0f79cfc | |
parent | c72a210ff78afcb16c1f06285644bab89d78a9b2 (diff) | |
download | pugixml-f4d4316eba8f2d26a8f78b87fb474a2fe238801f.zip pugixml-f4d4316eba8f2d26a8f78b87fb474a2fe238801f.tar.gz pugixml-f4d4316eba8f2d26a8f78b87fb474a2fe238801f.tar.bz2 |
Add overloads with size_t type argument
* bool xml_attribute::set_name(const char_t* rhs, size_t sz)
* bool xml_node::set_name(const char_t* rhs, size_t sz)
-rw-r--r-- | docs/manual.adoc | 2 | ||||
-rw-r--r-- | src/pugixml.cpp | 17 | ||||
-rw-r--r-- | src/pugixml.hpp | 2 | ||||
-rw-r--r-- | tests/test_dom_modify.cpp | 19 |
4 files changed, 40 insertions, 0 deletions
diff --git a/docs/manual.adoc b/docs/manual.adoc index 6464950..cae6285 100644 --- a/docs/manual.adoc +++ b/docs/manual.adoc @@ -1275,6 +1275,7 @@ As discussed before, nodes can have name and value, both of which are strings. D [source] ---- bool xml_node::set_name(const char_t* rhs); +bool xml_node::set_name(const char_t* rhs, size_t sz) bool xml_node::set_value(const char_t* rhs); bool xml_node::set_value(const char_t* rhs, size_t size); ---- @@ -1297,6 +1298,7 @@ All attributes have name and value, both of which are strings (value may be empt [source] ---- bool xml_attribute::set_name(const char_t* rhs); +bool xml_attribute::set_name(const char_t* rhs, size_t sz) bool xml_attribute::set_value(const char_t* rhs); bool xml_attribute::set_value(const char_t* rhs, size_t size); ---- diff --git a/src/pugixml.cpp b/src/pugixml.cpp index e02a137..00cd64a 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -5401,6 +5401,13 @@ namespace pugi return impl::strcpy_insitu(_attr->name, _attr->header, impl::xml_memory_page_name_allocated_mask, rhs, impl::strlength(rhs)); } + PUGI_IMPL_FN bool xml_attribute::set_name(const char_t* rhs, size_t sz) + { + if (!_attr) return false; + + return impl::strcpy_insitu(_attr->name, _attr->header, impl::xml_memory_page_name_allocated_mask, rhs, sz); + } + PUGI_IMPL_FN bool xml_attribute::set_value(const char_t* rhs, size_t sz) { if (!_attr) return false; @@ -5798,6 +5805,16 @@ namespace pugi return impl::strcpy_insitu(_root->name, _root->header, impl::xml_memory_page_name_allocated_mask, rhs, impl::strlength(rhs)); } + PUGI_IMPL_FN bool xml_node::set_name(const char_t* rhs, size_t sz) + { + xml_node_type type_ = _root ? PUGI_IMPL_NODETYPE(_root) : node_null; + + if (type_ != node_element && type_ != node_pi && type_ != node_declaration) + return false; + + return impl::strcpy_insitu(_root->name, _root->header, impl::xml_memory_page_name_allocated_mask, rhs, sz); + } + PUGI_IMPL_FN bool xml_node::set_value(const char_t* rhs, size_t sz) { xml_node_type type_ = _root ? PUGI_IMPL_NODETYPE(_root) : node_null; diff --git a/src/pugixml.hpp b/src/pugixml.hpp index 8749759..42414c3 100644 --- a/src/pugixml.hpp +++ b/src/pugixml.hpp @@ -418,6 +418,7 @@ namespace pugi // Set attribute name/value (returns false if attribute is empty or there is not enough memory) bool set_name(const char_t* rhs); + bool set_name(const char_t* rhs, size_t sz); bool set_value(const char_t* rhs, size_t sz); bool set_value(const char_t* rhs); @@ -553,6 +554,7 @@ namespace pugi // Set node name/value (returns false if node is empty, there is not enough memory, or node can not have name/value) bool set_name(const char_t* rhs); + bool set_name(const char_t* rhs, size_t sz); bool set_value(const char_t* rhs, size_t sz); bool set_value(const char_t* rhs); diff --git a/tests/test_dom_modify.cpp b/tests/test_dom_modify.cpp index 3451f19..be91609 100644 --- a/tests/test_dom_modify.cpp +++ b/tests/test_dom_modify.cpp @@ -46,6 +46,16 @@ TEST_XML(dom_attr_set_name, "<node attr='value' />") CHECK_NODE(doc, STR("<node n=\"value\"/>")); } +TEST_XML(dom_attr_set_name_with_size, "<node attr='value' />") +{ + xml_attribute attr = doc.child(STR("node")).attribute(STR("attr")); + + CHECK(attr.set_name(STR("n1234"), 1)); + CHECK(!xml_attribute().set_name(STR("nfail"), 1)); + + CHECK_NODE(doc, STR("<node n=\"value\"/>")); +} + TEST_XML(dom_attr_set_value, "<node/>") { xml_node node = doc.child(STR("node")); @@ -206,6 +216,15 @@ TEST_XML(dom_node_set_name, "<node>text</node>") CHECK_NODE(doc, STR("<n>text</n>")); } +TEST_XML(dom_node_set_name_with_size, "<node>text</node>") +{ + CHECK(doc.child(STR("node")).set_name(STR("nlongname"), 1)); + CHECK(!doc.child(STR("node")).first_child().set_name(STR("n42"), 1)); + CHECK(!xml_node().set_name(STR("nanothername"), 1)); + + CHECK_NODE(doc, STR("<n>text</n>")); +} + TEST_XML(dom_node_set_value, "<node>text</node>") { CHECK(doc.child(STR("node")).first_child().set_value(STR("no text"))); |