]> git.lyx.org Git - features.git/commitdiff
Apparently, the env program does not strip quotes around the values of the
authorEnrico Forestieri <forenr@lyx.org>
Sun, 25 Sep 2011 20:33:06 +0000 (20:33 +0000)
committerEnrico Forestieri <forenr@lyx.org>
Sun, 25 Sep 2011 20:33:06 +0000 (20:33 +0000)
environment variables. So, replace single quotes by double ones, such that
the QProcess parser will strip them, and strip them by ourselves in ForkedCall.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@39761 a592a061-630c-0410-9148-cb99ea01b6c8

src/support/ForkedCalls.cpp
src/support/filetools.cpp

index bf8f3490568194c1341a3eef210d744bba3c3e8e..9957af2119e1f74ca50f380da10dabffe0324c27 100644 (file)
@@ -324,30 +324,43 @@ int ForkedCall::generateChild()
        //    but do remove the quotes themselves. We do this naively by
        //    replacing the quote with '\0' which is fine if quotes
        //    delimit the entire word. However, if quotes do not delimit the
-       //    entire word (i.e., open quote is inside word), leave them alone.
+       //    entire word (i.e., open quote is inside word), simply discard
+       //    them such as not to break the current word.
        char inside_quote = 0;
        char c_before_open_quote = ' ';
        vector<char>::iterator it = vec.begin();
+       vector<char>::iterator itc = vec.begin();
        vector<char>::iterator const end = vec.end();
-       for (; it != end; ++it) {
+       for (; it != end; ++it, ++itc) {
                char const c = *it;
                if (!inside_quote) {
                        if (c == '\'' || c == '"') {
                                if (c_before_open_quote == ' ')
-                                       *it = '\0';
+                                       *itc = '\0';
+                               else
+                                       --itc;
                                inside_quote = c;
                        } else {
                                if (c == ' ')
-                                       *it = '\0';
+                                       *itc = '\0';
+                               else
+                                       *itc = c;
                                c_before_open_quote = c;
                        }
                } else if (c == inside_quote) {
-                       if (c_before_open_quote = ' ')
-                               *it = '\0';
+                       if (c_before_open_quote == ' ')
+                               *itc = '\0';
+                       else
+                               --itc;
                        inside_quote = 0;
-               }
+               } else
+                       *itc = c;
        }
 
+       // Clear what remains.
+       for (; itc != end; ++itc)
+               *itc = '\0';
+
        // Build an array of pointers to each word.
        it = vec.begin();
        vector<char *> argv;
index 47b54b46524bf74bab98854db31e5a3bae4b6a78..2cab1aa980261b9ba1f5b2e7258a525cd9ef66bc 100644 (file)
@@ -590,8 +590,8 @@ string latexEnvCmdPrefix(string const & path)
        string const texinputs = getEnv("TEXINPUTS");
 
        if (os::shell() == os::UNIX)
-               return "env TEXINPUTS='." + sep + texinputs_prefix
-                                         + sep + texinputs + "' ";
+               return "env TEXINPUTS=\"." + sep + texinputs_prefix
+                                         + sep + texinputs + "\" ";
        else
                return "cmd /d /c set TEXINPUTS=." + sep + texinputs_prefix
                                                   + sep + texinputs + " & ";