]> git.lyx.org Git - lyx.git/blobdiff - src/support/filetools.cpp
Correct comment
[lyx.git] / src / support / filetools.cpp
index 7a2739bda1cc60bce104c908674452274aa3e346..151d78c56841fc03cd3eecac822cfa31aff072b3 100644 (file)
@@ -110,7 +110,7 @@ bool isBinaryFile(FileName const & filename)
        magic_t magic_cookie = magic_open(MAGIC_MIME_ENCODING);
        if (magic_cookie) {
                bool detected = true;
-               if (magic_load(magic_cookie, NULL) != 0) {
+               if (magic_load(magic_cookie, nullptr) != 0) {
                        LYXERR(Debug::FILES, "isBinaryFile: "
                                "Could not load magic database - "
                                << magic_error(magic_cookie));
@@ -442,9 +442,20 @@ string const commandPrep(string const & command_in)
 }
 
 
+FileName const tempFileName(FileName tempdir, string const & mask, bool const dir)
+{
+       return tempFileName(TempFile(tempdir, mask).name(), dir);
+}
+
+
 FileName const tempFileName(string const & mask, bool const dir)
 {
-       FileName tempfile = TempFile(mask).name();
+       return tempFileName(TempFile(mask).name(), dir);
+}
+
+
+FileName const tempFileName(FileName tempfile, bool const dir)
+{
        // Since the QTemporaryFile object is destroyed at function return
        // (which is what is intended here), the next call to this function
        // may return the same file name again.
@@ -499,7 +510,8 @@ static FileName createTmpDir(FileName const & tempdir, string const & mask)
 
        QFileInfo tmp_fi(QDir(toqstr(tempdir.absFileName())), toqstr(mask));
        FileName const tmpfl =
-               tempFileName(fromqstr(tmp_fi.absoluteFilePath()) + ".XXXXXXXXXXXX", true);
+               tempFileName(FileName(fromqstr(tmp_fi.absolutePath())),
+                            fromqstr(tmp_fi.fileName()) + ".XXXXXXXXXXXX", true);
 
        if (tmpfl.empty() || !tmpfl.createDirectory(0700)) {
                LYXERR0("LyX could not create temporary directory in " << tempdir
@@ -635,7 +647,7 @@ string const addName(string const & path, string const & fname)
 
        if (path != "." && path != "./" && !path.empty()) {
                buf = os::internal_path(path);
-               if (!suffixIs(path, '/'))
+               if (!suffixIs(buf, '/'))
                        buf += '/';
        }
 
@@ -931,6 +943,9 @@ docstring const makeDisplayPath(string const & path, unsigned int threshold)
 {
        string str = path;
 
+       // Recode URL encoded chars.
+       str = from_percent_encoding(str);
+
        // If file is from LyXDir, display it as if it were relative.
        string const system = package().system_support().absFileName();
        if (prefixIs(str, system) && str != system)
@@ -1036,7 +1051,7 @@ cmd_ret const runCommand(string const & cmd)
                command = rtrim(command, "2>&1");
                err2out = true;
        }
-       string const cmdarg = "/d /c " + command;
+       string const cmdarg = "/d /c \"" + command + "\"";
        string const comspec = getEnv("COMSPEC");
 
        security.nLength = sizeof(SECURITY_ATTRIBUTES);
@@ -1080,38 +1095,40 @@ cmd_ret const runCommand(string const & cmd)
        // (Claus Hentschel) Check if popen was successful ;-)
        if (!inf) {
                lyxerr << "RunCommand:: could not start child process" << endl;
-               return make_pair(-1, string());
+               return { false, string() };
        }
 
-       string ret;
+       string result;
        int c = fgetc(inf);
        while (c != EOF) {
-               ret += static_cast<char>(c);
+               result += static_cast<char>(c);
                c = fgetc(inf);
        }
 
 #if defined (_WIN32)
        WaitForSingleObject(process.hProcess, INFINITE);
        DWORD pret;
-       if (!GetExitCodeProcess(process.hProcess, &pret))
-               pret = -1;
+       BOOL success = GetExitCodeProcess(process.hProcess, &pret);
+       bool valid = (pret == 0) && success;
        if (!infile.empty())
                CloseHandle(startup.hStdInput);
        CloseHandle(process.hProcess);
        if (fclose(inf) != 0)
-               pret = -1;
+               valid = false;
 #elif defined (HAVE_PCLOSE)
        int const pret = pclose(inf);
+       bool const valid = (pret != -1);
 #elif defined (HAVE__PCLOSE)
        int const pret = _pclose(inf);
+       bool const valid = (pret != -1);
 #else
 #error No pclose() function.
 #endif
 
-       if (pret == -1)
+       if (!valid)
                perror("RunCommand:: could not terminate child process");
 
-       return make_pair(pret, ret);
+       return { valid, result };
 }
 
 
@@ -1144,7 +1161,7 @@ FileName const findtexfile(string const & fil, string const & /*format*/,
        // is used."
        // However, we want to take advantage of the format sine almost all
        // the different formats has environment variables that can be used
-       // to controll which paths to search. f.ex. bib looks in
+       // to control which paths to search. f.ex. bib looks in
        // BIBINPUTS and TEXBIB. Small list follows:
        // bib - BIBINPUTS, TEXBIB
        // bst - BSTINPUTS
@@ -1159,10 +1176,10 @@ FileName const findtexfile(string const & fil, string const & /*format*/,
 
        cmd_ret const c = runCommand(kpsecmd);
 
-       LYXERR(Debug::LATEX, "kpse status = " << c.first << '\n'
-                << "kpse result = `" << rtrim(c.second, "\n\r") << '\'');
-       if (c.first != -1)
-               return FileName(rtrim(to_utf8(from_filesystem8bit(c.second)), "\n\r"));
+       LYXERR(Debug::LATEX, "kpse status = " << c.valid << '\n'
+                << "kpse result = `" << rtrim(c.result, "\n\r") << '\'');
+       if (c.valid)
+               return FileName(rtrim(to_utf8(from_filesystem8bit(c.result)), "\n\r"));
        else
                return FileName();
 }
@@ -1208,7 +1225,7 @@ bool prefs2prefs(FileName const & filename, FileName const & tempfile, bool lfun
        LYXERR(Debug::FILES, "Running `" << command_str << '\'');
 
        cmd_ret const ret = runCommand(command_str);
-       if (ret.first != 0) {
+       if (!ret.valid) {
                LYXERR0("Could not run file conversion script prefs2prefs.py.");
                return false;
        }