summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarseny.kapoulkine <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640>2010-05-20 20:35:49 +0000
committerarseny.kapoulkine <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640>2010-05-20 20:35:49 +0000
commitba1b2017dbc865735bebe01a0f0da2e97f1dab12 (patch)
treeb8e9ab4de5ffa6b43825b5928ec1e2781bc45808
parent1f5be930d03c3704a524dad31464220ece1229e4 (diff)
as_* functions now all use strto*/wcsto* functions; this unifies the behavior and fixes large unsigned integer parsing in as_uint
git-svn-id: http://pugixml.googlecode.com/svn/trunk@438 99668b35-9821-0410-8761-19e4c4f06640
-rw-r--r--src/pugixml.cpp12
-rw-r--r--tests/test_dom_modify.cpp6
-rw-r--r--tests/test_dom_traverse.cpp3
3 files changed, 10 insertions, 11 deletions
diff --git a/src/pugixml.cpp b/src/pugixml.cpp
index 04fb1db..e6784ae 100644
--- a/src/pugixml.cpp
+++ b/src/pugixml.cpp
@@ -3067,7 +3067,7 @@ namespace pugi
#ifdef PUGIXML_WCHAR_MODE
return (int)wcstol(_attr->value, 0, 10);
#else
- return atoi(_attr->value);
+ return (int)strtol(_attr->value, 0, 10);
#endif
}
@@ -3076,12 +3076,10 @@ namespace pugi
if (!_attr || !_attr->value) return 0;
#ifdef PUGIXML_WCHAR_MODE
- int result = (int)wcstol(_attr->value, 0, 10);
+ return (unsigned int)wcstoul(_attr->value, 0, 10);
#else
- int result = atoi(_attr->value);
+ return (unsigned int)strtoul(_attr->value, 0, 10);
#endif
-
- return result < 0 ? 0 : static_cast<unsigned int>(result);
}
double xml_attribute::as_double() const
@@ -3091,7 +3089,7 @@ namespace pugi
#ifdef PUGIXML_WCHAR_MODE
return wcstod(_attr->value, 0);
#else
- return atof(_attr->value);
+ return strtod(_attr->value, 0);
#endif
}
@@ -3102,7 +3100,7 @@ namespace pugi
#ifdef PUGIXML_WCHAR_MODE
return (float)wcstod(_attr->value, 0);
#else
- return (float)atof(_attr->value);
+ return (float)strtod(_attr->value, 0);
#endif
}
diff --git a/tests/test_dom_modify.cpp b/tests/test_dom_modify.cpp
index 7d30420..cb4a5ab 100644
--- a/tests/test_dom_modify.cpp
+++ b/tests/test_dom_modify.cpp
@@ -34,8 +34,8 @@ TEST_XML(dom_attr_set_value, "<node attr1='' attr2='' attr3='' attr4='' attr5=''
CHECK(node.attribute(STR("attr2")).set_value(-2147483647 - 1));
CHECK(!xml_attribute().set_value(-2147483647 - 1));
- CHECK(node.attribute(STR("attr3")).set_value(2147483647u));
- CHECK(!xml_attribute().set_value(2147483647));
+ CHECK(node.attribute(STR("attr3")).set_value(4294967295u));
+ CHECK(!xml_attribute().set_value(4294967295u));
CHECK(node.attribute(STR("attr4")).set_value(0.5));
CHECK(!xml_attribute().set_value(0.5));
@@ -43,7 +43,7 @@ TEST_XML(dom_attr_set_value, "<node attr1='' attr2='' attr3='' attr4='' attr5=''
CHECK(node.attribute(STR("attr5")).set_value(true));
CHECK(!xml_attribute().set_value(true));
- CHECK_NODE(node, STR("<node attr1=\"v1\" attr2=\"-2147483648\" attr3=\"2147483647\" attr4=\"0.5\" attr5=\"true\" />"));
+ CHECK_NODE(node, STR("<node attr1=\"v1\" attr2=\"-2147483648\" attr3=\"4294967295\" attr4=\"0.5\" attr5=\"true\" />"));
}
TEST_XML(dom_node_set_name, "<node>text</node>")
diff --git a/tests/test_dom_traverse.cpp b/tests/test_dom_traverse.cpp
index 7d04bda..366c683 100644
--- a/tests/test_dom_traverse.cpp
+++ b/tests/test_dom_traverse.cpp
@@ -91,7 +91,7 @@ TEST_XML(dom_attr_as_int, "<node attr1='1' attr2='-1' attr3='-2147483648' attr4=
CHECK(node.attribute(STR("attr4")).as_int() == 2147483647);
}
-TEST_XML(dom_attr_as_uint, "<node attr1='0' attr2='1' attr3='2147483647'/>")
+TEST_XML(dom_attr_as_uint, "<node attr1='0' attr2='1' attr3='2147483647' attr4='4294967295'/>")
{
xml_node node = doc.child(STR("node"));
@@ -99,6 +99,7 @@ TEST_XML(dom_attr_as_uint, "<node attr1='0' attr2='1' attr3='2147483647'/>")
CHECK(node.attribute(STR("attr1")).as_uint() == 0);
CHECK(node.attribute(STR("attr2")).as_uint() == 1);
CHECK(node.attribute(STR("attr3")).as_uint() == 2147483647);
+ CHECK(node.attribute(STR("attr4")).as_uint() == 4294967295u);
}
TEST_XML(dom_attr_as_float, "<node attr1='0' attr2='1' attr3='0.12' attr4='-5.1' attr5='3e-4' attr6='3.14159265358979323846'/>")