]> git.lyx.org Git - lyx.git/blobdiff - src/support/filetools.cpp
Fix bugs #6078 and #9364
[lyx.git] / src / support / filetools.cpp
index 5704aa1e1106a4bc91165db18d6e5e2d46ed38f1..db07d56e61c7e736b5628e4679a4ffb0cc340b1c 100644 (file)
@@ -37,7 +37,6 @@
 #include "support/qstring_helpers.h"
 
 #include <QDir>
-#include <QImage>
 #include <QTemporaryFile>
 
 #include "support/lassert.h"
@@ -416,24 +415,6 @@ FileName const imageLibFileSearch(string & dir, string const & name,
 }
 
 
-int iconScaleFactor(FileName const & image)
-{
-       int imgsize = QImage(toqstr(image.absFileName())).height();
-       if (imgsize <= 0)
-               return 100;
-
-       // default icon size
-       int iconsize = 20;
-
-       string dir = "images";
-       FileName const fn = imageLibFileSearch(dir, "iconsize.png");
-       if (!fn.empty())
-               iconsize = QImage(toqstr(fn.absFileName())).height();
-
-       return (100 * iconsize + imgsize / 2)/imgsize;
-}
-
-
 string const commandPrep(string const & command_in)
 {
        static string const token_scriptpath = "$$s/";
@@ -719,29 +700,40 @@ string const replaceEnvironmentPath(string const & path)
 
 
 // Return a command prefix for setting the environment of the TeX engine.
-string latexEnvCmdPrefix(string const & path)
+string latexEnvCmdPrefix(string const & path, string const & lpath)
 {
-       if (path.empty() || lyxrc.texinputs_prefix.empty())
+       bool use_lpath = !(lpath.empty() || lpath == "." || lpath == "./");
+
+       if (path.empty() || (lyxrc.texinputs_prefix.empty() && !use_lpath))
                return string();
 
-       string const texinputs_prefix = os::latex_path_list(
+       string texinputs_prefix = lyxrc.texinputs_prefix.empty() ? string()
+               : os::latex_path_list(
                        replaceCurdirPath(path, lyxrc.texinputs_prefix));
        string const sep = string(1, os::path_separator(os::TEXENGINE));
        string const texinputs = getEnv("TEXINPUTS");
 
+       if (use_lpath) {
+               string const abslpath = FileName::isAbsolute(lpath)
+                       ? os::latex_path(lpath)
+                       : os::latex_path(FileName(path + "/" + lpath).realPath());
+               if (texinputs_prefix.empty())
+                       texinputs_prefix = abslpath;
+               else if (suffixIs(texinputs_prefix, sep))
+                       texinputs_prefix.append(abslpath + sep);
+               else
+                       texinputs_prefix.append(sep + abslpath);
+       }
+
        if (os::shell() == os::UNIX)
                return "env TEXINPUTS=\"." + sep + texinputs_prefix
                                          + sep + texinputs + "\" ";
        else
-#ifndef USE_QPROCESS
-               return "cmd /d /c set \"TEXINPUTS=."
+               // NOTE: the dummy blank dir is necessary to force the
+               //       QProcess parser to quote the argument (see bug 9453)
+               return "cmd /d /c set \"TEXINPUTS=." + sep + " "
                                                + sep + texinputs_prefix
-                                               + sep + texinputs + "\"&";
-#else
-               return "cmd /d /c set \"\"\"TEXINPUTS=."
-                                               + sep + texinputs_prefix
-                                               + sep + texinputs + "\"\"\"&";
-#endif
+                                               + sep + texinputs + "\" & ";
 }
 
 
@@ -1015,7 +1007,6 @@ cmd_ret const runCommand(string const & cmd)
        // variants ipstream, opstream
 
 #if defined (_WIN32)
-       int fno;
        STARTUPINFO startup;
        PROCESS_INFORMATION process;
        SECURITY_ATTRIBUTES security;
@@ -1057,7 +1048,7 @@ cmd_ret const runCommand(string const & cmd)
                                0, 0, &startup, &process)) {
 
                        CloseHandle(process.hThread);
-                       fno = _open_osfhandle((long)in, _O_RDONLY);
+                       int fno = _open_osfhandle((long)in, _O_RDONLY);
                        CloseHandle(out);
                        inf = _fdopen(fno, "r");
                }
@@ -1227,14 +1218,17 @@ int fileLock(const char * lock_file)
        int fd = -1;
 #if defined(HAVE_LOCKF)
        fd = open(lock_file, O_CREAT|O_APPEND|O_SYNC|O_RDWR, 0666);
+       if (fd == -1)
+               return -1;
        if (lockf(fd, F_LOCK, 0) != 0) {
                close(fd);
-               return(-1);
+               return -1;
        }
 #endif
-       return(fd);
+       return fd;
 }
 
+
 void fileUnlock(int fd, const char * /* lock_file*/)
 {
 #if defined(HAVE_LOCKF)