mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
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:
parent
a749b73d95
commit
9c365e841e
@ -324,30 +324,43 @@ int ForkedCall::generateChild()
|
|||||||
// but do remove the quotes themselves. We do this naively by
|
// but do remove the quotes themselves. We do this naively by
|
||||||
// replacing the quote with '\0' which is fine if quotes
|
// replacing the quote with '\0' which is fine if quotes
|
||||||
// delimit the entire word. However, if quotes do not delimit the
|
// 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 inside_quote = 0;
|
||||||
char c_before_open_quote = ' ';
|
char c_before_open_quote = ' ';
|
||||||
vector<char>::iterator it = vec.begin();
|
vector<char>::iterator it = vec.begin();
|
||||||
|
vector<char>::iterator itc = vec.begin();
|
||||||
vector<char>::iterator const end = vec.end();
|
vector<char>::iterator const end = vec.end();
|
||||||
for (; it != end; ++it) {
|
for (; it != end; ++it, ++itc) {
|
||||||
char const c = *it;
|
char const c = *it;
|
||||||
if (!inside_quote) {
|
if (!inside_quote) {
|
||||||
if (c == '\'' || c == '"') {
|
if (c == '\'' || c == '"') {
|
||||||
if (c_before_open_quote == ' ')
|
if (c_before_open_quote == ' ')
|
||||||
*it = '\0';
|
*itc = '\0';
|
||||||
|
else
|
||||||
|
--itc;
|
||||||
inside_quote = c;
|
inside_quote = c;
|
||||||
} else {
|
} else {
|
||||||
if (c == ' ')
|
if (c == ' ')
|
||||||
*it = '\0';
|
*itc = '\0';
|
||||||
|
else
|
||||||
|
*itc = c;
|
||||||
c_before_open_quote = c;
|
c_before_open_quote = c;
|
||||||
}
|
}
|
||||||
} else if (c == inside_quote) {
|
} else if (c == inside_quote) {
|
||||||
if (c_before_open_quote = ' ')
|
if (c_before_open_quote == ' ')
|
||||||
*it = '\0';
|
*itc = '\0';
|
||||||
|
else
|
||||||
|
--itc;
|
||||||
inside_quote = 0;
|
inside_quote = 0;
|
||||||
}
|
} else
|
||||||
|
*itc = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clear what remains.
|
||||||
|
for (; itc != end; ++itc)
|
||||||
|
*itc = '\0';
|
||||||
|
|
||||||
// Build an array of pointers to each word.
|
// Build an array of pointers to each word.
|
||||||
it = vec.begin();
|
it = vec.begin();
|
||||||
vector<char *> argv;
|
vector<char *> argv;
|
||||||
|
@ -590,8 +590,8 @@ string latexEnvCmdPrefix(string const & path)
|
|||||||
string const texinputs = getEnv("TEXINPUTS");
|
string const texinputs = getEnv("TEXINPUTS");
|
||||||
|
|
||||||
if (os::shell() == os::UNIX)
|
if (os::shell() == os::UNIX)
|
||||||
return "env TEXINPUTS='." + sep + texinputs_prefix
|
return "env TEXINPUTS=\"." + sep + texinputs_prefix
|
||||||
+ sep + texinputs + "' ";
|
+ sep + texinputs + "\" ";
|
||||||
else
|
else
|
||||||
return "cmd /d /c set TEXINPUTS=." + sep + texinputs_prefix
|
return "cmd /d /c set TEXINPUTS=." + sep + texinputs_prefix
|
||||||
+ sep + texinputs + " & ";
|
+ sep + texinputs + " & ";
|
||||||
|
Loading…
Reference in New Issue
Block a user