summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--MultiMC.cpp7
-rw-r--r--logic/updater/DownloadUpdateTask.cpp6
2 files changed, 12 insertions, 1 deletions
diff --git a/MultiMC.cpp b/MultiMC.cpp
index 110accc2..cf626fc7 100644
--- a/MultiMC.cpp
+++ b/MultiMC.cpp
@@ -528,7 +528,12 @@ void MultiMC::installUpdates(const QString &updateFilesDir, bool restartOnFinish
QLOG_INFO() << "Running updater with command" << updaterBinary << args.join(" ");
- QProcess::startDetached(updaterBinary, args);
+ QFile::setPermissions(updaterBinary, (QFileDevice::Permission) 0755);
+ if(!QProcess::startDetached(updaterBinary, args))
+ {
+ QLOG_ERROR() << "Failed to start the updater process!";
+ return;
+ }
// Now that we've started the updater, quit MultiMC.
MMC->quit();
diff --git a/logic/updater/DownloadUpdateTask.cpp b/logic/updater/DownloadUpdateTask.cpp
index 0b09ad2a..9282c4d8 100644
--- a/logic/updater/DownloadUpdateTask.cpp
+++ b/logic/updater/DownloadUpdateTask.cpp
@@ -412,6 +412,7 @@ DownloadUpdateTask::processFileLists(NetJob *job,
if (isUpdater)
{
download->setProperty("finalPath", entry.path);
+ download->setProperty("finalPerms", entry.mode);
connect(download.get(), &MD5EtagDownload::succeeded, this, &DownloadUpdateTask::directDeployFile);
}
}
@@ -549,11 +550,16 @@ void DownloadUpdateTask::directDeployFile(const int index)
{
Md5EtagDownloadPtr download = std::dynamic_pointer_cast<MD5EtagDownload>(m_filesNetJob->operator[](index));
const QString finalPath = download->property("finalPath").toString();
+ bool ok = true;
+ int finalMode = download->property("finalPerms").toInt(&ok);
+ if(!ok)
+ finalMode = 0755;
QLOG_INFO() << "Replacing" << finalPath << "with" << download->m_output_file.fileName();
if (QFile::remove(finalPath))
{
if (download->m_output_file.copy(finalPath))
{
+ QFile::setPermissions(finalPath, (QFileDevice::Permission) finalMode);
return;
}
}