diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llxml/llxmlnode.cpp | 29 | 
1 files changed, 23 insertions, 6 deletions
| diff --git a/indra/llxml/llxmlnode.cpp b/indra/llxml/llxmlnode.cpp index 2b4a0fc2a1..3d4e6f9a0b 100644 --- a/indra/llxml/llxmlnode.cpp +++ b/indra/llxml/llxmlnode.cpp @@ -631,13 +631,14 @@ bool LLXMLNode::updateNode(  	}  	//update all of node's children with updateNodes children that match name -	LLXMLNodePtr child; +	LLXMLNodePtr child = node->getFirstChild(); +	LLXMLNodePtr last_child = child;  	LLXMLNodePtr updateChild;  	for (updateChild = update_node->getFirstChild(); updateChild.notNull();   		 updateChild = updateChild->getNextSibling())  	{ -		for (child = node->getFirstChild(); child.notNull(); child = child->getNextSibling()) +		while(child.notNull())  		{  			std::string nodeName;  			std::string updateName; @@ -656,6 +657,22 @@ bool LLXMLNode::updateNode(  			if ((nodeName != "") && (updateName == nodeName))  			{  				updateNode(child, updateChild); +				last_child = child; +				child = child->getNextSibling(); +				if (child.isNull()) +				{ +					child = node->getFirstChild(); +				} +				break; +			} +			 +			child = child->getNextSibling(); +			if (child.isNull()) +			{ +				child = node->getFirstChild(); +			} +			if (child == last_child) +			{  				break;  			}  		} @@ -882,11 +899,8 @@ bool LLXMLNode::getLayeredXMLNode(LLXMLNodePtr& root,  	for (itor = paths.begin(), ++itor; itor != paths.end(); ++itor)  	{ -		std::string nodeName; -		std::string updateName; -  		std::string layer_filename = *itor; -		if(layer_filename.empty()) +		if(layer_filename.empty() || layer_filename == filename)  		{  			// no localized version of this file, that's ok, keep looking  			continue; @@ -898,6 +912,9 @@ bool LLXMLNode::getLayeredXMLNode(LLXMLNodePtr& root,  			return false;  		} +		std::string nodeName; +		std::string updateName; +  		updateRoot->getAttributeString("name", updateName);  		root->getAttributeString("name", nodeName); | 
