aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDioEgizio <83089242+DioEgizio@users.noreply.github.com>2023-06-05 20:32:30 +0200
committerGitHub <noreply@github.com>2023-06-05 20:32:30 +0200
commit0c24827a52994b2f6b441aaf7d7f68275b52cabc (patch)
tree0b9c1d4d2bcd2bcc38214c470dc5bb4e674894b2
parente6eee82fb93e3151b2819c6a2efa3f01f8f198d1 (diff)
parentf613b03efd58e04451e70d4e673adff5837492a9 (diff)
downloadPrismLauncher-0c24827a52994b2f6b441aaf7d7f68275b52cabc.tar.gz
PrismLauncher-0c24827a52994b2f6b441aaf7d7f68275b52cabc.tar.bz2
PrismLauncher-0c24827a52994b2f6b441aaf7d7f68275b52cabc.zip
Merge pull request #1103 from Ryex/fix/1.120-allowed_symlinks.txt
-rw-r--r--launcher/InstanceCopyTask.cpp30
1 files changed, 29 insertions, 1 deletions
diff --git a/launcher/InstanceCopyTask.cpp b/launcher/InstanceCopyTask.cpp
index 4ac3b51a..60dcd5a1 100644
--- a/launcher/InstanceCopyTask.cpp
+++ b/launcher/InstanceCopyTask.cpp
@@ -39,7 +39,16 @@ void InstanceCopyTask::executeTask()
setStatus(tr("Copying instance %1").arg(m_origInstance->name()));
auto copySaves = [&]() {
- FS::copy savesCopy(FS::PathCombine(m_origInstance->instanceRoot(), "saves"), FS::PathCombine(m_stagingPath, "saves"));
+ QFileInfo mcDir(FS::PathCombine(m_stagingPath, "minecraft"));
+ QFileInfo dotMCDir(FS::PathCombine(m_stagingPath, ".minecraft"));
+
+ QString staging_mc_dir;
+ if (mcDir.exists() && !dotMCDir.exists())
+ staging_mc_dir = mcDir.filePath();
+ else
+ staging_mc_dir = dotMCDir.filePath();
+
+ FS::copy savesCopy(FS::PathCombine(m_origInstance->gameRoot(), "saves"), FS::PathCombine(staging_mc_dir, "saves"));
savesCopy.followSymlinks(true);
return savesCopy();
@@ -123,6 +132,7 @@ void InstanceCopyTask::copyFinished()
emitFailed(tr("Instance folder copy failed."));
return;
}
+
// FIXME: shouldn't this be able to report errors?
auto instanceSettings = std::make_shared<INISettingsObject>(FS::PathCombine(m_stagingPath, "instance.cfg"));
@@ -134,6 +144,24 @@ void InstanceCopyTask::copyFinished()
}
if (m_useLinks)
inst->addLinkedInstanceId(m_origInstance->id());
+ if (m_useLinks) {
+ auto allowed_symlinks_file = QFileInfo(FS::PathCombine(inst->gameRoot(), "allowed_symlinks.txt"));
+
+ QByteArray allowed_symlinks;
+ if (allowed_symlinks_file.exists()) {
+ allowed_symlinks.append(FS::read(allowed_symlinks_file.path()));
+ if (allowed_symlinks.right(1) != "\n")
+ allowed_symlinks.append("\n"); // we want to be on a new line
+ }
+ allowed_symlinks.append(m_origInstance->gameRoot().toUtf8());
+ allowed_symlinks.append("\n");
+ if (allowed_symlinks_file.isSymLink())
+ FS::deletePath(allowed_symlinks_file
+ .path()); // we dont want to modify the original. also make sure the resulting file is not itself a link.
+
+ FS::write(allowed_symlinks_file.path(), allowed_symlinks);
+ }
+
emitSucceeded();
}