diff --git a/src/GUI/DefaultAircraftLocator.cxx b/src/GUI/DefaultAircraftLocator.cxx index 043a82d05..d0dfb6acb 100644 --- a/src/GUI/DefaultAircraftLocator.cxx +++ b/src/GUI/DefaultAircraftLocator.cxx @@ -2,6 +2,7 @@ #include <simgear/props/props_io.hxx> #include <simgear/debug/logstream.hxx> +#include <simgear/structure/exception.hxx> #include <Main/globals.hxx> #include <Main/locale.hxx> @@ -10,11 +11,21 @@ static SGPropertyNode_ptr loadXMLDefaults() { SGPropertyNode_ptr root(new SGPropertyNode); const SGPath defaultsXML = globals->get_fg_root() / "defaults.xml"; - readProperties(defaultsXML, root); + if (!defaultsXML.exists()) { + SG_LOG(SG_GUI, SG_POPUP, "Failed to find required data file (defaults.xml)"); + return {}; + } + + try { + readProperties(defaultsXML, root); + } catch (sg_exception& e) { + SG_LOG(SG_GUI, SG_POPUP, "Failed to read required data file (defaults.xml)"); + return {}; + } if (!root->hasChild("sim")) { SG_LOG(SG_GUI, SG_POPUP, "Failed to find /sim node in defaults.xml, broken"); - return SGPropertyNode_ptr(); + return {}; } return root; @@ -28,7 +39,7 @@ std::string defaultAirportICAO() { SGPropertyNode_ptr root = loadXMLDefaults(); if (!root) { - return std::string(); + return {}; } std::string airportCode = root->getStringValue("/sim/presets/airport-id");