diff options
| -rw-r--r-- | src/pugixml.cpp | 37 | 
1 files changed, 17 insertions, 20 deletions
| diff --git a/src/pugixml.cpp b/src/pugixml.cpp index c943f7f..7326dcf 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -9070,37 +9070,34 @@ namespace pugi  		return _root->eval_number(c, sd.stack);  	} -	 -#ifndef PUGIXML_NO_STL -	string_t xpath_query::evaluate_string(const xpath_node& n) const + +	static xpath_string evaluate_string_impl(xpath_ast_node* root, const xpath_node& n, xpath_stack_data& sd)  	{ -		if (!_root) return string_t(); -		 -		xpath_context c(n, 1, 1); -		xpath_stack_data sd; +		if (!root) return xpath_string();  	#ifdef PUGIXML_NO_EXCEPTIONS -		if (setjmp(sd.error_handler)) return string_t(); +		if (setjmp(sd.error_handler)) return xpath_string();  	#endif -		return _root->eval_string(c, sd.stack).c_str(); +		xpath_context c(n, 1, 1); + +		return root->eval_string(c, sd.stack);  	} -#endif -	size_t xpath_query::evaluate_string(char_t* buffer, volatile size_t capacity, const xpath_node& n) const +#ifndef PUGIXML_NO_STL +	string_t xpath_query::evaluate_string(const xpath_node& n) const  	{ -		xpath_context c(n, 1, 1);  		xpath_stack_data sd; -	#ifdef PUGIXML_NO_EXCEPTIONS -		if (setjmp(sd.error_handler)) -		{ -			if (capacity > 0) *buffer = 0; -			return 1; -		} -	#endif +		return evaluate_string_impl(_root, n, sd).c_str(); +	} +#endif + +	size_t xpath_query::evaluate_string(char_t* buffer, size_t capacity, const xpath_node& n) const +	{ +		xpath_stack_data sd; -		xpath_string r = _root ? _root->eval_string(c, sd.stack) : xpath_string(); +		xpath_string r = evaluate_string_impl(_root, n, sd);  		size_t size = r.length() + 1; | 
