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
This commit is contained in:
Enrico Forestieri 2011-09-25 20:33:06 +00:00
parent a749b73d95
commit 9c365e841e
2 changed files with 22 additions and 9 deletions

View 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;

View 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 + " & ";