From abaa560ed5af56b095a388351a9bd61a4e4e4fd1 Mon Sep 17 00:00:00 2001 From: TSR Berry <20988865+TSRBerry@users.noreply.github.com> Date: Thu, 11 Jul 2024 01:01:08 +0200 Subject: [PATCH] Fix FileNotFoundException when resolving non-existent paths in FileSystemUtils --- .../Utilities/FileSystemUtils.cs | 25 +++++++++++++++---- .../FileSystem/VirtualFileSystem.cs | 2 +- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/Ryujinx.Common/Utilities/FileSystemUtils.cs b/src/Ryujinx.Common/Utilities/FileSystemUtils.cs index 06bcbff760..2628efc74f 100644 --- a/src/Ryujinx.Common/Utilities/FileSystemUtils.cs +++ b/src/Ryujinx.Common/Utilities/FileSystemUtils.cs @@ -57,31 +57,46 @@ namespace Ryujinx.Common.Utilities { FileSystemInfo pathInfo = isDirectory ? new DirectoryInfo(path) : new FileInfo(path); - return pathInfo.ResolveLinkTarget(true)?.FullName ?? pathInfo.FullName; + if (pathInfo.Exists) + { + return pathInfo.ResolveLinkTarget(true)?.FullName ?? pathInfo.FullName; + } + + return pathInfo.FullName; } public static FileInfo GetActualFileInfo(this FileInfo fileInfo) { - return (FileInfo)(fileInfo.ResolveLinkTarget(true) ?? fileInfo); + if (fileInfo.Exists) + { + return (FileInfo)(fileInfo.ResolveLinkTarget(true) ?? fileInfo); + } + + return fileInfo; } public static FileInfo GetActualFileInfo(string filePath) { FileInfo fileInfo = new(filePath); - return (FileInfo)(fileInfo.ResolveLinkTarget(true) ?? fileInfo); + return fileInfo.GetActualFileInfo(); } public static DirectoryInfo GetActualDirectoryInfo(this DirectoryInfo directoryInfo) { - return (DirectoryInfo)(directoryInfo.ResolveLinkTarget(true) ?? directoryInfo); + if (directoryInfo.Exists) + { + return (DirectoryInfo)(directoryInfo.ResolveLinkTarget(true) ?? directoryInfo); + } + + return directoryInfo; } public static DirectoryInfo GetActualDirectoryInfo(string directoryPath) { DirectoryInfo directoryInfo = new(directoryPath); - return (DirectoryInfo)(directoryInfo.ResolveLinkTarget(true) ?? directoryInfo); + return directoryInfo.GetActualDirectoryInfo(); } } } diff --git a/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs b/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs index ecdd6ea83e..19b793008c 100644 --- a/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs +++ b/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs @@ -65,7 +65,7 @@ namespace Ryujinx.HLE.FileSystem { FileInfo fileInfo = FileSystemUtils.GetActualFileInfo(fileName); - var romfsStream = fileInfo.Open(FileMode.Open, FileAccess.Read); + var romfsStream = fileInfo.Open(FileMode.Open, FileAccess.Read); _romFsByPid.AddOrUpdate(pid, romfsStream, (pid, oldStream) => {