]> git.lyx.org Git - lyx.git/blobdiff - src/support/filetools.cpp
there is no trunk/src/intl folder
[lyx.git] / src / support / filetools.cpp
index f84891c349e6d08ffa421582fe8dabe6da4702e3..e388bc317bb2de5db48f4514dce756682614f4a6 100644 (file)
@@ -36,7 +36,7 @@
 
 #include <QDir>
 
-#include <boost/assert.hpp>
+#include "support/assert.h"
 #include <boost/regex.hpp>
 
 #include <fcntl.h>
@@ -407,6 +407,15 @@ FileName const makeAbsPath(string const & relPath, string const & basePath)
        string rTemp = tempRel;
        string temp;
 
+       // Check for a leading "~"
+       // Split by first /
+       rTemp = split(rTemp, temp, '/');
+       if (temp == "~") {
+               tempBase = package().home_dir().absFilename();
+               tempRel = rTemp;
+       }
+
+       rTemp = tempRel;
        while (!rTemp.empty()) {
                // Split by next /
                rTemp = split(rTemp, temp, '/');
@@ -414,15 +423,22 @@ FileName const makeAbsPath(string const & relPath, string const & basePath)
                if (temp == ".") continue;
                if (temp == "..") {
                        // Remove one level of TempBase
-                       string::difference_type i = tempBase.length() - 2;
-                       if (i < 0)
-                               i = 0;
+                       if (tempBase.length() <= 1) {
+                               //this is supposed to be an absolute path, so...
+                               tempBase = "/";
+                               continue;
+                       }
+                       //erase a trailing slash if there is one
+                       if (suffixIs(tempBase, "/"))
+                               tempBase.erase(tempBase.length() - 1, string::npos);
+
+                       string::size_type i = tempBase.length() - 1;
                        while (i > 0 && tempBase[i] != '/')
                                --i;
                        if (i > 0)
                                tempBase.erase(i, string::npos);
                        else
-                               tempBase += '/';
+                               tempBase = '/';
                } else if (temp.empty() && !rTemp.empty()) {
                                tempBase = os::current_root() + rTemp;
                                rTemp.erase();
@@ -649,7 +665,7 @@ string const unzippedFileName(string const & zipped_file)
        string const ext = getExtension(zipped_file);
        if (ext == "gz" || ext == "z" || ext == "Z")
                return changeExtension(zipped_file, string());
-       return "unzipped_" + zipped_file;
+       return onlyPath(zipped_file) + "unzipped_" + onlyFilename(zipped_file);
 }