diff options
| -rw-r--r-- | indra/llui/lltransutil.cpp | 20 | ||||
| -rw-r--r-- | indra/llxml/llxmlnode.cpp | 3 | 
2 files changed, 18 insertions, 5 deletions
| diff --git a/indra/llui/lltransutil.cpp b/indra/llui/lltransutil.cpp index 58fa8a0828..97a72b55e1 100644 --- a/indra/llui/lltransutil.cpp +++ b/indra/llui/lltransutil.cpp @@ -31,15 +31,27 @@  #include "lltrans.h"  #include "lluictrlfactory.h"  #include "llxmlnode.h" - +#include "lldir.h"  bool LLTransUtil::parseStrings(const std::string& xml_filename, const std::set<std::string>& default_args)  { +	// LLUICtrlFactory::getLayeredXMLNode() just calls +	// gDirUtilp->findSkinnedFilenames(merge=false) and then passes the +	// resulting paths to LLXMLNode::getLayeredXMLNode(). Bypass that and call +	// LLXMLNode::getLayeredXMLNode() directly: we want merge=true. +	std::vector<std::string> paths = +		gDirUtilp->findSkinnedFilenames(LLDir::XUI, xml_filename, true); +	if (paths.empty()) +	{ +		// xml_filename not found at all in any skin -- check whether entire +		// path was passed (but I hope we no longer have callers who do that) +		paths.push_back(xml_filename); +	}  	LLXMLNodePtr root; -	BOOL success = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root); +	bool success = LLXMLNode::getLayeredXMLNode(root, paths);  	if (!success)  	{ -		llerrs << "Couldn't load string table" << llendl; +		llerrs << "Couldn't load string table " << xml_filename << llendl;  		return false;  	} @@ -54,7 +66,7 @@ bool LLTransUtil::parseLanguageStrings(const std::string& xml_filename)  	if (!success)  	{ -		llerrs << "Couldn't load string table " << xml_filename << llendl; +		llerrs << "Couldn't load localization table " << xml_filename << llendl;  		return false;  	} diff --git a/indra/llxml/llxmlnode.cpp b/indra/llxml/llxmlnode.cpp index 2ffb0d8503..b775249219 100644 --- a/indra/llxml/llxmlnode.cpp +++ b/indra/llxml/llxmlnode.cpp @@ -897,7 +897,8 @@ bool LLXMLNode::getLayeredXMLNode(LLXMLNodePtr& root,  	std::vector<std::string>::const_iterator itor; -	for (itor = paths.begin(), ++itor; itor != paths.end(); ++itor) +	// We've already dealt with the first item, skip that one +	for (itor = paths.begin() + 1; itor != paths.end(); ++itor)  	{  		std::string layer_filename = *itor;  		if(layer_filename.empty() || layer_filename == filename) | 
