diff --git a/src/graphics/ChangeLog b/src/graphics/ChangeLog index f07a4568b1..3ac0b4c44e 100644 --- a/src/graphics/ChangeLog +++ b/src/graphics/ChangeLog @@ -1,3 +1,7 @@ +2005-04-17 Angus Leeming + + * GraphicsConverter.C (c-tor): quote conversion commands correctly. + 2004-12-07 Angus Leeming * *.[Ch]: remove all traces of #pragma interface/implementation diff --git a/src/graphics/GraphicsConverter.C b/src/graphics/GraphicsConverter.C index 80bfb5e12d..fae99456d9 100644 --- a/src/graphics/GraphicsConverter.C +++ b/src/graphics/GraphicsConverter.C @@ -145,9 +145,12 @@ Converter::Impl::Impl(string const & from_file, string const & to_file_base, if (!success) { script_command_ = - "sh " + LibFileSearch("scripts", "convertDefault.sh") + - ' ' + from_format + ':' + from_file + ' ' + - to_format + ':' + to_file_; + "sh " + + QuoteName(LibFileSearch("scripts", "convertDefault.sh")) + + ' ' + + QuoteName(from_format + ':' + from_file) + + ' ' + + QuoteName(to_format + ':' + to_file_); lyxerr[Debug::GRAPHICS] << "\tNo converter defined! I use convertDefault.sh\n\t" @@ -181,8 +184,9 @@ Converter::Impl::Impl(string const & from_file, string const & to_file_base, // We create a dummy command for ease of understanding of the // list of forked processes. // Note that 'sh ' is absolutely essential, or execvp will fail. - script_command_ = "sh " + script_file_ + ' ' + - OnlyFilename(from_file) + ' ' + to_format; + script_command_ = "sh " + QuoteName(script_file_) + ' ' + + QuoteName(OnlyFilename(from_file)) + ' ' + + QuoteName(to_format); } // All is ready to go valid_process_ = true; diff --git a/src/support/ChangeLog b/src/support/ChangeLog index 109a9be056..51a9f7d89a 100644 --- a/src/support/ChangeLog +++ b/src/support/ChangeLog @@ -1,3 +1,10 @@ +2005-04-17 Angus Leeming + + * forkedcall.C (generateChild): do not strip quotes from args on + Windows. + Wrap lyxerr output inside an if (lyxerr.debugging(Debug::FILES)) + block. + 2005-02-17 Angus Leeming * copy.C (copy): Pass the ios::in flag to the ifstream constructor. diff --git a/src/support/forkedcall.C b/src/support/forkedcall.C index 39063f02a5..3f823c8723 100644 --- a/src/support/forkedcall.C +++ b/src/support/forkedcall.C @@ -283,11 +283,23 @@ int Forkedcall::generateChild() if (c == ' ') *it = '\0'; else if (c == '\'' || c == '"') { +#if defined (_WIN32) + // How perverse! + // spawnvp *requires* the quotes or it will + // split the arg at the internal whitespace! + // Make shure the quote is a DOS-style one. + *it = '"'; +#else *it = '\0'; +#endif inside_quote = c; } } else if (c == inside_quote) { +#if defined (_WIN32) + *it = '"'; +#else *it = '\0'; +#endif inside_quote = 0; } } @@ -304,13 +316,16 @@ int Forkedcall::generateChild() argv.push_back(0); // Debug output. - vector::iterator ait = argv.begin(); - vector::iterator const aend = argv.end(); - lyxerr << "\n"; - for (; ait != aend; ++ait) - if (*ait) - lyxerr << '\t'<< *ait << '\n'; - lyxerr << "" << std::endl; + if (lyxerr.debugging(Debug::FILES)) { + vector::iterator ait = argv.begin(); + vector::iterator const aend = argv.end(); + lyxerr << "\n\t" << line + << "\n\tInterpretted as:\n\n"; + for (; ait != aend; ++ait) + if (*ait) + lyxerr << '\t'<< *ait << '\n'; + lyxerr << "" << std::endl; + } #ifndef __EMX__ pid_t const cpid = ::fork();