When opening imported files, first try relative path.

Without this, if we have e.g.:
  * a/x.slvs
  * a/y.slvs importing a/x.slvs
and copy a/ to b/, then loading b/y.slvs would load a/x.slvs, which
is rather surprising.
This commit is contained in:
whitequark 2016-05-17 14:44:33 +00:00
parent 3bdaa53725
commit 0d7aa0a1a3

View File

@ -806,22 +806,17 @@ bool SolveSpaceUI::ReloadAllImported(bool canCancel)
g->linkFile = newPath;
}
FILE *test = ssfopen(g->linkFile, "rb");
std::string rel = PathSepUNIXToPlatform(g->linkFileRel);
std::string fromRel = MakePathAbsolute(SS.saveFile, rel);
FILE *test = ssfopen(fromRel, "rb");
if(test) {
fclose(test); // okay, exists
fclose(test);
// Okay, exists; update the absolute path.
g->linkFile = fromRel;
} else {
// It doesn't exist. Perhaps the entire tree has moved, and we
// can use the relative filename to get us back.
if(!SS.saveFile.empty()) {
std::string rel = PathSepUNIXToPlatform(g->linkFileRel);
std::string fromRel = MakePathAbsolute(SS.saveFile, rel);
test = ssfopen(fromRel, "rb");
if(test) {
fclose(test);
// It worked, this is our new absolute path
g->linkFile = fromRel;
}
}
// It doesn't exist. Perhaps the file was moved but the tree wasn't, and we
// can use the absolute filename to get us back. The relative path will be
// updated below.
}
try_load_file: