Fix SystemPathToSwitchPath platform issues and make sure to delete temporary NRO after sessions dispose (#293)

This commit is contained in:
Thomas Guillemard 2018-07-19 20:44:52 +02:00 committed by gdkchan
parent 8b67297711
commit c9fc52edb6
3 changed files with 7 additions and 8 deletions

View File

@ -96,7 +96,6 @@ namespace Ryujinx.HLE.OsHle
if (IsNro && (SwitchFilePath == null || !SwitchFilePath.StartsWith("sdmc:/")))
{
// TODO: avoid copying the file if we are already inside a sdmc directory
string SwitchPath = $"sdmc:/switch/{Name}{Homebrew.TemporaryNroSuffix}";
string TempPath = Ns.VFs.SwitchPathToSystemPath(SwitchPath);

View File

@ -403,11 +403,6 @@ namespace Ryujinx.HLE.OsHle
{
if (Disposing && !Disposed)
{
if (NeedsHbAbi && Executables[0].FilePath.EndsWith(Homebrew.TemporaryNroSuffix))
{
File.Delete(Executables[0].FilePath);
}
//If there is still some thread running, disposing the objects is not
//safe as the thread may try to access those resources. Instead, we set
//the flag to have the Process disposed when all threads finishes.
@ -431,6 +426,11 @@ namespace Ryujinx.HLE.OsHle
}
}
if (NeedsHbAbi && Executables.Count > 0 && Executables[0].FilePath.EndsWith(Homebrew.TemporaryNroSuffix))
{
File.Delete(Executables[0].FilePath);
}
INvDrvServices.UnloadProcess(this);
AppletState.Dispose();

View File

@ -57,11 +57,11 @@ namespace Ryujinx.HLE
public string SystemPathToSwitchPath(string SystemPath)
{
string BaseSystemPath = GetBasePath() + "/";
string BaseSystemPath = GetBasePath() + Path.DirectorySeparatorChar;
if (SystemPath.StartsWith(BaseSystemPath))
{
string RawPath = SystemPath.Replace(BaseSystemPath, "");
int FirstSeparatorOffset = RawPath.IndexOf('/');
int FirstSeparatorOffset = RawPath.IndexOf(Path.DirectorySeparatorChar);
if (FirstSeparatorOffset == -1)
{
return $"{RawPath}:/";