Compare commits

..

2 Commits

Author SHA1 Message Date
siegmund-heiss-ich
f7ec310231 Check if existing oldConfigPath is a Symlink (#5271) 2023-06-09 15:31:19 +02:00
Marco Carvalho
e94d24f508 Prefer a 'TryGetValue' call over a Dictionary indexer access guarded by a 'ContainsKey' (#5231)
* Prefer a 'TryGetValue' call over a Dictionary indexer access guarded by a 'ContainsKey' check to avoid double lookup

* fix
2023-06-09 13:05:32 +02:00
3 changed files with 22 additions and 18 deletions

View File

@@ -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);

View File

@@ -181,7 +181,7 @@ namespace Ryujinx.HLE.FileSystem
}
}
if (_locationEntries.ContainsKey(storageId) && _locationEntries[storageId]?.Count == 0)
if (_locationEntries.TryGetValue(storageId, out var locationEntriesItem) && locationEntriesItem?.Count == 0)
{
_locationEntries.Remove(storageId);
}
@@ -347,9 +347,9 @@ namespace Ryujinx.HLE.FileSystem
{
lock (_lock)
{
if (_contentDictionary.ContainsKey((titleId, contentType)))
if (_contentDictionary.TryGetValue((titleId, contentType), out var contentDictionaryItem))
{
return UInt128Utils.FromHex(_contentDictionary[(titleId, contentType)]);
return UInt128Utils.FromHex(contentDictionaryItem);
}
}
@@ -719,9 +719,9 @@ namespace Ryujinx.HLE.FileSystem
Nca nca = new Nca(_virtualFileSystem.KeySet, storage);
if (updateNcas.ContainsKey(nca.Header.TitleId))
if (updateNcas.TryGetValue(nca.Header.TitleId, out var updateNcasItem))
{
updateNcas[nca.Header.TitleId].Add((nca.Header.ContentType, entry.FullName));
updateNcasItem.Add((nca.Header.ContentType, entry.FullName));
}
else
{
@@ -732,10 +732,8 @@ namespace Ryujinx.HLE.FileSystem
}
}
if (updateNcas.ContainsKey(SystemUpdateTitleId))
if (updateNcas.TryGetValue(SystemUpdateTitleId, out var ncaEntry))
{
var ncaEntry = updateNcas[SystemUpdateTitleId];
string metaPath = ncaEntry.Find(x => x.type == NcaContentType.Meta).path;
CnmtContentMetaEntry[] metaEntries = null;
@@ -770,9 +768,9 @@ namespace Ryujinx.HLE.FileSystem
throw new FileNotFoundException("System update title was not found in the firmware package.");
}
if (updateNcas.ContainsKey(SystemVersionTitleId))
if (updateNcas.TryGetValue(SystemVersionTitleId, out var updateNcasItem))
{
string versionEntry = updateNcas[SystemVersionTitleId].Find(x => x.type != NcaContentType.Meta).path;
string versionEntry = updateNcasItem.Find(x => x.type != NcaContentType.Meta).path;
using (Stream ncaStream = GetZipStream(archive.GetEntry(versionEntry)))
{
@@ -916,9 +914,9 @@ namespace Ryujinx.HLE.FileSystem
}
}
if (updateNcas.ContainsKey(nca.Header.TitleId))
if (updateNcas.TryGetValue(nca.Header.TitleId, out var updateNcasItem))
{
updateNcas[nca.Header.TitleId].Add((nca.Header.ContentType, entry.FullPath));
updateNcasItem.Add((nca.Header.ContentType, entry.FullPath));
}
else
{

View File

@@ -338,12 +338,10 @@ namespace Ryujinx.Input.Motion.CemuHook
{
int slot = inputData.Shared.Slot;
if (_motionData.ContainsKey(clientId))
if (_motionData.TryGetValue(clientId, out var motionDataItem))
{
if (_motionData[clientId].ContainsKey(slot))
if (motionDataItem.TryGetValue(slot, out var previousData))
{
MotionInput previousData = _motionData[clientId][slot];
previousData.Update(accelerometer, gyroscrope, timestamp, cemuHookConfig.Sensitivity, (float)cemuHookConfig.GyroDeadzone);
}
else
@@ -352,7 +350,7 @@ namespace Ryujinx.Input.Motion.CemuHook
input.Update(accelerometer, gyroscrope, timestamp, cemuHookConfig.Sensitivity, (float)cemuHookConfig.GyroDeadzone);
_motionData[clientId].Add(slot, input);
motionDataItem.Add(slot, input);
}
}
else