From 1d34b96d4954ef2c1da673fae83ac22c778d24d4 Mon Sep 17 00:00:00 2001 From: Florent Rougon Date: Sat, 26 Sep 2015 00:04:28 +0200 Subject: [PATCH] Don't load resources for the current aircraft from several aircraft dirs MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit * If one has the same aircraft in several aircraft directories, FlightGear should not mix resources from the various aircraft directories. For instance, if one starts FG with: --fg-aircraft=/my/personal/dir:/path/to/fgaddon/Aircraft and one has in /my/personal/dir/ec130 a clone of the upstream developer repo, FlightGear should use either the upstream version from /my/personal/dir/ec130 or the FGAddon version from /path/to/fgaddon/Aircraft/ec130, but not some strange, untested hybrid of both. * This commit makes sure that when the looked-up resource starts with Aircraft/, where is the current aircraft name [last component of aircraftDir = fgGetString("/sim/aircraft-dir")], then AircraftResourceProvider::resolve() doesn't search other aircraft directories if the resource isn't found under 'aircraftDir'. * To reproduce the bug before this commit, you may add the following code (there is nothing specific about the SenecaII here, it's just the aircraft I used for testing): var file_path = resolvepath("Aircraft/SenecaII/flo-test"); if (file_path != "") gui.popupTip("flo-test found", 2); else gui.popupTip("flo-test not found", 2); in a keyboard binding for the SenecaII (for instance; you may use the F11 binding that otherwise only prints a short message). You should add this to the SenecaII/SenecaII-base.xml file *that will be loaded by FlightGear*, let's say the one under /my/personal/dir in the example above (beware of the in autosave_X_Y.xml). Then, by creating or removing a file named "flo-test" in the SenecaII subdirectory of other aircraft dirs (for instance, /path/to/fgaddon/Aircraft in the example above), you can see that the behavior of the loaded aircraft is influenced by the contents of unrelated versions of the same aircraft that might be present in other aircraft dirs (e.g., loaded /my/personal/dir/SenecaII influenced by /path/to/fgaddon/Aircraft/SenecaII). * Aircrafts loading resources using paths relative to the current aircraft directory (e.g., with 'resolvepath("flo-test")') are not affected by this kind of problem, because this scheme is handled by CurrentAircraftDirProvider, which does not exhibit this bug. --- src/Main/globals.cxx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index d41e00d5f..8812564a1 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -91,6 +91,11 @@ public: if (r.exists()) { return r; + } else { + // Stop here, otherwise we could end up returning a resource that + // belongs to an unrelated version of the same aircraft (from a + // different aircraft directory). + return SGPath(); } } -- 2.39.5