From 9c365e841ea9ffce74d8b1e3466b12d848062f94 Mon Sep 17 00:00:00 2001 From: Enrico Forestieri Date: Sun, 25 Sep 2011 20:33:06 +0000 Subject: [PATCH] Apparently, the env program does not strip quotes around the values of the 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 | 27 ++++++++++++++++++++------- src/support/filetools.cpp | 4 ++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/support/ForkedCalls.cpp b/src/support/ForkedCalls.cpp index bf8f349056..9957af2119 100644 --- a/src/support/ForkedCalls.cpp +++ b/src/support/ForkedCalls.cpp @@ -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::iterator it = vec.begin(); + vector::iterator itc = vec.begin(); vector::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 argv; diff --git a/src/support/filetools.cpp b/src/support/filetools.cpp index 47b54b4652..2cab1aa980 100644 --- a/src/support/filetools.cpp +++ b/src/support/filetools.cpp @@ -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 + " & "; -- 2.39.2