@@ -45,23 +45,42 @@ void ParseFile(pcstr path, CMemoryWriter& W, IReader* F, XMLDocument* xml)
4545 }
4646}
4747
48- void XMLDocument::Load (pcstr path_alias, pcstr path, pcstr _xml_filename )
48+ bool XMLDocument::Load (pcstr path_alias, pcstr path, pcstr xml_filename, bool fatal )
4949{
50- shared_str fn = correct_file_name (path, _xml_filename );
50+ shared_str fn = correct_file_name (path, xml_filename );
5151
5252 string_path str;
5353 xr_sprintf (str, " %s\\ %s" , path, *fn);
54- return Load (path_alias, str);
54+ return Load (path_alias, str, fatal );
5555}
5656
57- // инициализация и загрузка XML файла
58- void XMLDocument::Load (pcstr path, pcstr xml_filename)
57+ // Try to load from the first path, and if it's failed then try the second one
58+ bool XMLDocument::Load (pcstr path_alias, pcstr path, pcstr path2, pcstr xml_filename, bool fatal /* = true */ )
5959{
60- xr_strcpy (m_xml_file_name, xml_filename);
61- // Load and parse xml file
60+ shared_str fn = correct_file_name (path, xml_filename);
61+
62+ string_path str;
63+ xr_sprintf (str, " %s\\ %s" , path, *fn);
64+ if (Load (path_alias, str, false ))
65+ return true ;
6266
67+ xr_sprintf (str, " %s\\ %s" , path2, *fn);
68+ return Load (path_alias, str, fatal);
69+ }
70+
71+ // Load and parse xml file
72+ bool XMLDocument::Load (pcstr path, pcstr xml_filename, bool fatal)
73+ {
6374 IReader* F = FS.r_open (path, xml_filename);
64- R_ASSERT2 (F, xml_filename);
75+ if (!F)
76+ {
77+ if (fatal)
78+ R_ASSERT3 (F, " Can't find specified xml file" , xml_filename);
79+ else
80+ return false ;
81+ }
82+
83+ xr_strcpy (m_xml_file_name, xml_filename);
6584
6685 CMemoryWriter W;
6786 ParseFile (path, W, F, this );
@@ -79,6 +98,8 @@ void XMLDocument::Load(pcstr path, pcstr xml_filename)
7998 }
8099
81100 m_root = m_Doc.firstChildElement ();
101+
102+ return true ;
82103}
83104
84105XML_NODE XMLDocument::NavigateToNode (XML_NODE start_node, pcstr path, const size_t node_index) const
0 commit comments