Some cleanups to IDirectory, fix for OpenDirectory on a non-existent directory.

This commit is contained in:
Ezekiel Bethel 2018-02-19 20:19:22 +00:00
commit 69c9996089
2 changed files with 21 additions and 10 deletions

View file

@ -70,7 +70,7 @@ namespace Ryujinx.OsHle.Objects.FspSrv
} }
} }
private int ReadedItem = 0; private int LastItem = 0;
const int DirectoryEntrySize = 0x310; const int DirectoryEntrySize = 0x310;
public long Read(ServiceCtx Context) public long Read(ServiceCtx Context)
{ {
@ -80,9 +80,9 @@ namespace Ryujinx.OsHle.Objects.FspSrv
if (MaxDirectories >= DirectoryEntries.Count) MaxDirectories = DirectoryEntries.Count; if (MaxDirectories >= DirectoryEntries.Count) MaxDirectories = DirectoryEntries.Count;
int CurrentItem; int CurrentIndex, CurrentItem;
byte[] DirectoryEntry = new byte[DirectoryEntrySize]; byte[] DirectoryEntry = new byte[DirectoryEntrySize];
for (CurrentItem = 0; CurrentItem < MaxDirectories; CurrentItem++) for (CurrentIndex = 0, CurrentItem = LastItem; CurrentItem < MaxDirectories; CurrentIndex++, CurrentItem++)
{ {
MemoryStream MemStream = new MemoryStream(); MemoryStream MemStream = new MemoryStream();
BinaryWriter Writer = new BinaryWriter(MemStream); BinaryWriter Writer = new BinaryWriter(MemStream);
@ -95,15 +95,18 @@ namespace Ryujinx.OsHle.Objects.FspSrv
MemStream.Seek(0, SeekOrigin.Begin); MemStream.Seek(0, SeekOrigin.Begin);
MemStream.Read(DirectoryEntry, 0, 0x310); MemStream.Read(DirectoryEntry, 0, 0x310);
AMemoryHelper.WriteBytes(Context.Memory, BufferPosition + DirectoryEntrySize * CurrentItem, DirectoryEntry); AMemoryHelper.WriteBytes(Context.Memory, BufferPosition + DirectoryEntrySize * CurrentIndex, DirectoryEntry);
} }
if (ReadedItem == 0) if (LastItem < DirectoryEntries.Count)
{ {
ReadedItem = CurrentItem; LastItem = CurrentItem;
Context.ResponseData.Write((long)CurrentItem); Context.ResponseData.Write((long)CurrentIndex); // index = number of entries written this call.
}
else
{
Context.ResponseData.Write((long)0);
} }
else Context.ResponseData.Write((long)0);
return 0; return 0;
} }

View file

@ -223,8 +223,16 @@ namespace Ryujinx.OsHle.Objects.FspSrv
if(DirName != null) if(DirName != null)
{ {
MakeObject(Context, new IDirectory(DirName, FilterFlags)); if (Directory.Exists(DirName))
return 0; {
MakeObject(Context, new IDirectory(DirName, FilterFlags));
return 0;
}
else
{
// TODO: correct error code.
return -1;
}
} }
// TODO: Correct error code. // TODO: Correct error code.