commit f7a8c5b4ebd93f29ea8085e1199c354ab289d559
Author: Kornel Benko <[email protected]>
Date:   Sun Dec 13 12:25:32 2015 +0100

    \origin handling. Use realPath() intead of absFileName()
    
    This change avoids misinterpreting paths containing symbolic parts.
    Without this, lyx may not find its own sysdir.

diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp
index 029e5b5..ee9f535 100644
--- a/src/BufferParams.cpp
+++ b/src/BufferParams.cpp
@@ -1016,10 +1016,15 @@ void BufferParams::writeFile(ostream & os, Buffer const 
* buf) const
        // Prints out the buffer info into the .lyx file given by file
 
        // the document directory
-       string filepath = buf->filePath();
-       string const sysdir = package().system_support().absFileName();
-       if (prefixIs(filepath, sysdir))
+       // use realPath() instead of absFileName() for comparing
+       // so we can catch also eventually used symbolic parts of the path.
+       string filepath = buf->fileName().onlyPath().realPath();
+       string const sysdir = package().system_support().realPath();
+       if (prefixIs(filepath, sysdir)) {
                filepath.replace(0, sysdir.length(), "/systemlyxdir/");
+               // Remove eventually added superfluous "/"
+               filepath = subst(filepath, "//", "/");
+       }
        else if (!lyxrc.save_origin)
                filepath = "unavailable";
        os << "\\origin " << quoteIfNeeded(filepath) << '\n';

Reply via email to