From 4fd1e219a44f7fe1913a76daf90c393bba9bfa73 Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Sun, 3 Jul 2011 13:06:41 +0200 Subject: [PATCH] #348 related: More places where missing files were not reported properly Whenever resolving a (relative) path to an absolute path with 'resolve_maybe_aircraft_path', check if the result is empty and report original (relative) path as missing. Otherwise no or a meaningless message is issued ("File '' not found."). --- src/Autopilot/autopilotgroup.cxx | 40 ++++++++++++++++++-------------- src/Instrumentation/HUD/HUD.cxx | 7 +++++- src/Main/fg_commands.cxx | 10 +++++++- src/Main/splash.cxx | 19 +++++++++++---- src/Scripting/NasalSys.cxx | 7 +++++- 5 files changed, 58 insertions(+), 25 deletions(-) diff --git a/src/Autopilot/autopilotgroup.cxx b/src/Autopilot/autopilotgroup.cxx index 347a39e0e..cf06bb4b4 100644 --- a/src/Autopilot/autopilotgroup.cxx +++ b/src/Autopilot/autopilotgroup.cxx @@ -119,23 +119,29 @@ void FGXMLAutopilotGroupImplementation::initFrom( SGPropertyNode_ptr rootNode, c } SGPath config = globals->resolve_maybe_aircraft_path(pathNode->getStringValue()); - - SG_LOG( SG_ALL, SG_INFO, "Reading property-rule configuration from " << config.str() ); - - try { - SGPropertyNode_ptr root = new SGPropertyNode(); - readProperties( config.str(), root ); - - SG_LOG( SG_AUTOPILOT, SG_INFO, "adding property-rule subsystem " << apName ); - FGXMLAutopilot::Autopilot * ap = new FGXMLAutopilot::Autopilot( autopilotNodes[i], root ); - ap->set_name( apName ); - set_subsystem( apName, ap ); - _autopilotNames.push_back( apName ); - - } catch (const sg_exception& e) { - SG_LOG( SG_AUTOPILOT, SG_ALERT, "Failed to load property-rule configuration: " - << config.str() << ":" << e.getMessage() ); - continue; + if (config.isNull()) + { + SG_LOG( SG_ALL, SG_ALERT, "Cannot find property-rule configuration file '" << pathNode->getStringValue() << "'." ); + } + else + { + SG_LOG( SG_ALL, SG_INFO, "Reading property-rule configuration from " << config.str() ); + + try { + SGPropertyNode_ptr root = new SGPropertyNode(); + readProperties( config.str(), root ); + + SG_LOG( SG_AUTOPILOT, SG_INFO, "adding property-rule subsystem " << apName ); + FGXMLAutopilot::Autopilot * ap = new FGXMLAutopilot::Autopilot( autopilotNodes[i], root ); + ap->set_name( apName ); + set_subsystem( apName, ap ); + _autopilotNames.push_back( apName ); + + } catch (const sg_exception& e) { + SG_LOG( SG_AUTOPILOT, SG_ALERT, "Failed to load property-rule configuration: " + << config.str() << ":" << e.getMessage() ); + continue; + } } } } diff --git a/src/Instrumentation/HUD/HUD.cxx b/src/Instrumentation/HUD/HUD.cxx index eace97cc0..6d9e0bd90 100644 --- a/src/Instrumentation/HUD/HUD.cxx +++ b/src/Instrumentation/HUD/HUD.cxx @@ -346,6 +346,11 @@ int HUD::load(const char *file, float x, float y, int level, const string& inden const int MAXNEST = 10; SGPath path(globals->resolve_maybe_aircraft_path(file)); + if (path.isNull()) + { + SG_LOG(SG_INPUT, SG_ALERT, "HUD: Cannot find configuration file '" << file << "'."); + return 0x2; + } if (!level) { SG_LOG(SG_INPUT, TREE, endl << "load " << file); @@ -362,7 +367,7 @@ int HUD::load(const char *file, float x, float y, int level, const string& inden int ret = 0; ifstream input(path.c_str()); if (!input.good()) { - SG_LOG(SG_INPUT, SG_ALERT, "HUD: Cannot read configuration from " << path.str()); + SG_LOG(SG_INPUT, SG_ALERT, "HUD: Cannot read configuration from '" << path.c_str() << "'"); return 0x4; } diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx index f9933243d..7711f6b4f 100644 --- a/src/Main/fg_commands.cxx +++ b/src/Main/fg_commands.cxx @@ -1229,7 +1229,15 @@ do_load_xml_to_proptree(const SGPropertyNode * arg) std::string icao = arg->getStringValue("icao"); if (icao.empty()) { if (file.isRelative()) { - file = globals->resolve_maybe_aircraft_path(file.str()); + SGPath absPath = globals->resolve_maybe_aircraft_path(file.str()); + if (!absPath.isNull()) + file = absPath; + else + { + SG_LOG(SG_IO, SG_ALERT, "loadxml: Cannot find XML property file '" + << file.str() << "'."); + return false; + } } } else { if (!XMLLoader::findAirportData(icao, file.str(), file)) { diff --git a/src/Main/splash.cxx b/src/Main/splash.cxx index 36cc60326..a21064cab 100644 --- a/src/Main/splash.cxx +++ b/src/Main/splash.cxx @@ -187,8 +187,19 @@ static osg::Node* fgCreateSplashCamera() fgSetString("/sim/startup/program-name", namestring); delete[] namestring; - SGPath tpath( globals->get_fg_root() ); - if (splash_texture == NULL || !strcmp(splash_texture, "")) { + SGPath tpath; + if (splash_texture && strcmp(splash_texture, "")) { + tpath = globals->resolve_maybe_aircraft_path(splash_texture); + if (tpath.isNull()) + { + SG_LOG( SG_GENERAL, SG_ALERT, "Cannot find splash screen file '" << splash_texture + << "'. Using default." ); + } + } + + if (tpath.isNull()) { + // no splash screen specified - select random image + tpath = globals->get_fg_root(); // load in the texture data int num = (int)(sg_random() * 5.0 + 1.0); char num_str[5]; @@ -197,10 +208,8 @@ static osg::Node* fgCreateSplashCamera() tpath.append( "Textures/Splash" ); tpath.concat( num_str ); tpath.concat( ".png" ); - } else { - tpath = globals->resolve_maybe_aircraft_path(splash_texture); } - + osg::Texture2D* splashTexture = new osg::Texture2D; splashTexture->setImage(osgDB::readImageFile(tpath.c_str())); diff --git a/src/Scripting/NasalSys.cxx b/src/Scripting/NasalSys.cxx index 9542c5d55..e2bc88619 100644 --- a/src/Scripting/NasalSys.cxx +++ b/src/Scripting/NasalSys.cxx @@ -880,8 +880,13 @@ void FGNasalSys::loadPropertyScripts(SGPropertyNode* n) if (!p.isAbsolute() || !p.exists()) { p = globals->resolve_maybe_aircraft_path(file); + if (p.isNull()) + { + SG_LOG(SG_NASAL, SG_ALERT, "Cannot find Nasal script '" << + file << "' for module '" << module << "'."); + } } - ok &= loadModule(p, module); + ok &= p.isNull() ? false : loadModule(p, module); j++; } -- 2.39.5