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:/"))) 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 SwitchPath = $"sdmc:/switch/{Name}{Homebrew.TemporaryNroSuffix}";
string TempPath = Ns.VFs.SwitchPathToSystemPath(SwitchPath); string TempPath = Ns.VFs.SwitchPathToSystemPath(SwitchPath);

View file

@ -403,11 +403,6 @@ namespace Ryujinx.HLE.OsHle
{ {
if (Disposing && !Disposed) 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 //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 //safe as the thread may try to access those resources. Instead, we set
//the flag to have the Process disposed when all threads finishes. //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); INvDrvServices.UnloadProcess(this);
AppletState.Dispose(); AppletState.Dispose();

View file

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