diff --git a/src/librssguard/miscellaneous/iofactory.cpp b/src/librssguard/miscellaneous/iofactory.cpp index d8a144ac4..34fe0211e 100644 --- a/src/librssguard/miscellaneous/iofactory.cpp +++ b/src/librssguard/miscellaneous/iofactory.cpp @@ -93,13 +93,18 @@ bool IOFactory::startProcessDetached(const QString& program, const QStringList& return process.startDetached(nullptr); } -QString IOFactory::startProcessGetOutput(const QString& executable, const QStringList& arguments) { +QString IOFactory::startProcessGetOutput(const QString& executable, + const QStringList& arguments, + const QProcessEnvironment& pe) { QProcess proc; proc.setProgram(executable); proc.setArguments(arguments); - proc.setProcessEnvironment(QProcessEnvironment::systemEnvironment()); + QProcessEnvironment system_pe = QProcessEnvironment::systemEnvironment(); + + system_pe.insert(pe); + proc.setProcessEnvironment(system_pe); proc.start(); if (proc.waitForFinished() && @@ -142,6 +147,14 @@ void IOFactory::writeFile(const QString& file_path, const QByteArray& data) { bool IOFactory::copyFile(const QString& source, const QString& destination) { if (QFile::exists(destination)) { + QFile file(destination); + + file.setPermissions(file.permissions() | + QFileDevice::WriteOwner | + QFileDevice::WriteUser | + QFileDevice::WriteGroup | + QFileDevice::WriteOther); + if (!QFile::remove(destination)) { return false; } diff --git a/src/librssguard/miscellaneous/iofactory.h b/src/librssguard/miscellaneous/iofactory.h index 27ecb29b7..06f2cd020 100644 --- a/src/librssguard/miscellaneous/iofactory.h +++ b/src/librssguard/miscellaneous/iofactory.h @@ -7,6 +7,7 @@ #include "definitions/definitions.h" +#include #include class IOFactory { @@ -31,7 +32,9 @@ class IOFactory { const QStringList& arguments, const QString& native_arguments = {}, const QString& working_directory = {}); - static QString startProcessGetOutput(const QString& executable, const QStringList& arguments = {}); + static QString startProcessGetOutput(const QString& executable, + const QStringList& arguments = {}, + const QProcessEnvironment& pe = {}); // Returns contents of a file. // Throws exception when no such file exists.