Fix launching Syncthing with program/args containing non-ASCII characters

* Pass program/args for Syncthing launcher using UTF-16 under Windows
* See https://github.com/Martchus/syncthingtray/issues/107
This commit is contained in:
Martchus 2021-08-25 00:15:00 +02:00
parent 6aac7b0eae
commit b828d7c274
1 changed files with 5 additions and 3 deletions

View File

@ -42,8 +42,10 @@ namespace Data {
#ifdef LIB_SYNCTHING_CONNECTOR_BOOST_PROCESS
#ifdef PLATFORM_WINDOWS
#define LIB_SYNCTHING_CONNECTOR_PLATFORM_ARGS boost::process::windows::create_no_window,
#define LIB_SYNCTHING_CONNECTOR_STRING_CONVERSION toStdWString
#else
#define LIB_SYNCTHING_CONNECTOR_PLATFORM_ARGS
#define LIB_SYNCTHING_CONNECTOR_STRING_CONVERSION toLocal8Bit().toStdString
#endif
/// \brief Holds data related to the process execution via Boost.Process.
@ -384,11 +386,11 @@ void SyncthingProcess::start(const QString &program, const QStringList &argument
emit stateChanged(m_process->state = QProcess::Starting);
// convert args
auto prog = program.toStdString();
auto args = std::vector<std::string>();
auto prog = program.LIB_SYNCTHING_CONNECTOR_STRING_CONVERSION();
auto args = std::vector<decltype(arguments.front().LIB_SYNCTHING_CONNECTOR_STRING_CONVERSION())>();
args.reserve(static_cast<std::size_t>(arguments.size()));
for (const auto &arg : arguments) {
args.emplace_back(arg.toStdString());
args.emplace_back(arg.LIB_SYNCTHING_CONNECTOR_STRING_CONVERSION());
}
m_process->program = program;
m_process->arguments = arguments;