aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsiegmund-heiss-ich <119589995+siegmund-heiss-ich@users.noreply.github.com>2023-06-09 15:31:19 +0200
committerGitHub <noreply@github.com>2023-06-09 15:31:19 +0200
commitf7ec3102316cb209614f52afc5b069e33bcf6924 (patch)
treeecf4268e85a1818c065623bd93d2a02c77405f8b
parente94d24f5086e6bd371fe74661ad8a650fb99ea55 (diff)
Check if existing oldConfigPath is a Symlink (#5271)1.1.878
-rw-r--r--src/Ryujinx.Common/Configuration/AppDataManager.cs10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/Ryujinx.Common/Configuration/AppDataManager.cs b/src/Ryujinx.Common/Configuration/AppDataManager.cs
index d6e77843..b685e706 100644
--- a/src/Ryujinx.Common/Configuration/AppDataManager.cs
+++ b/src/Ryujinx.Common/Configuration/AppDataManager.cs
@@ -96,7 +96,7 @@ namespace Ryujinx.Common.Configuration
if (OperatingSystem.IsMacOS() && Mode == LaunchMode.UserProfile)
{
string oldConfigPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), DefaultBaseDir);
- if (Path.Exists(oldConfigPath) && !Path.Exists(BaseDirPath))
+ if (Path.Exists(oldConfigPath) && !IsPathSymlink(oldConfigPath) && !Path.Exists(BaseDirPath))
{
CopyDirectory(oldConfigPath, BaseDirPath);
Directory.Delete(oldConfigPath, true);
@@ -115,6 +115,14 @@ namespace Ryujinx.Common.Configuration
Directory.CreateDirectory(KeysDirPath = Path.Combine(BaseDirPath, KeysDir));
}
+ // Check if existing old baseDirPath is a symlink, to prevent possible errors.
+ // Should be removed, when the existance of the old directory isn't checked anymore.
+ private static bool IsPathSymlink(string path)
+ {
+ FileAttributes attributes = File.GetAttributes(path);
+ return (attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint;
+ }
+
private static void CopyDirectory(string sourceDir, string destinationDir)
{
var dir = new DirectoryInfo(sourceDir);