Don't load resources for the current aircraft from several aircraft dirs
* 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/<ac>, where <ac> 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 <path-cache> 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.
This commit is contained in:
parent
a64cf82296
commit
1d34b96d49
1 changed files with 5 additions and 0 deletions
|
@ -91,6 +91,11 @@ public:
|
||||||
|
|
||||||
if (r.exists()) {
|
if (r.exists()) {
|
||||||
return r;
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue