From 0d7aa0a1a3fe2e11ae9eeaef2c419f6c475e802c Mon Sep 17 00:00:00 2001 From: whitequark Date: Tue, 17 May 2016 14:44:33 +0000 Subject: [PATCH] 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. --- src/file.cpp | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/file.cpp b/src/file.cpp index 25359a3..fe49590 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -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: