}
-string const quoteName(string const & name)
+string const quoteName(string const & name, quote_style style)
{
- return (os::shell() == os::UNIX) ?
- '\'' + name + '\'':
- '"' + name + '"';
+ switch(style) {
+ case quote_shell:
+ // This does not work for filenames containing " (windows)
+ // or ' (all other OSes). This can't be changed easily, since
+ // we would need to adapt the command line parser in
+ // Forkedcall::generateChild. Therefore we don't pass user
+ // filenames to child processes if possible. We store them in
+ // a python script instead, where we don't have these
+ // limitations.
+ return (os::shell() == os::UNIX) ?
+ '\'' + name + '\'':
+ '"' + name + '"';
+ case quote_python:
+ return "\"" + subst(subst(name, "\\", "\\\\"), "\"", "\\\"")
+ + "\"";
+ }
+ // shut up stupid compiler
+ return string();
}
}
-string const libScriptSearch(string const & command_in)
+string const libScriptSearch(string const & command_in, quote_style style)
{
static string const token_scriptpath = "$$s/";
} else {
// Replace "$$s/foo/some_script" with "<path to>/some_script".
string::size_type const size_replace = size_script + 4;
- command.replace(pos1, size_replace, quoteName(script));
+ command.replace(pos1, size_replace, quoteName(script, style));
}
return command;
bool destroyDir(string const & tmpdir)
{
- return fs::remove_all(tmpdir) > 0;
+ try {
+ return fs::remove_all(tmpdir) > 0;
+ } catch (fs::filesystem_error const & fe){
+ lyxerr << "Could not delete " << tmpdir << ". (" << fe.what() << ")" << std::endl;
+ return false;
+ }
}