diff --git a/LibHac.Nand/DiscUtils.Fat/ClusterStream.cs b/LibHac.Nand/DiscUtils.Fat/ClusterStream.cs index f0756596..218e0d63 100644 --- a/LibHac.Nand/DiscUtils.Fat/ClusterStream.cs +++ b/LibHac.Nand/DiscUtils.Fat/ClusterStream.cs @@ -115,7 +115,7 @@ namespace DiscUtils.Fat if (_position > _length) { - throw new IOException("Attempt to read beyond end of file"); + return 0; } if (count < 0) diff --git a/LibHac.Nand/DiscUtils.Fat/Directory.cs b/LibHac.Nand/DiscUtils.Fat/Directory.cs index 7f91043d..a7d45313 100644 --- a/LibHac.Nand/DiscUtils.Fat/Directory.cs +++ b/LibHac.Nand/DiscUtils.Fat/Directory.cs @@ -414,7 +414,7 @@ namespace DiscUtils.Fat validChecksum = false; break; } - sb.Append(slot.Name.ToUpperInvariant()); + sb.Append(slot.Name); } if (validChecksum) diff --git a/LibHac/FileSystem.cs b/LibHac/FileSystem.cs index adcbc48d..1cb5e033 100644 --- a/LibHac/FileSystem.cs +++ b/LibHac/FileSystem.cs @@ -1,4 +1,6 @@ -using System.IO; +using System; +using System.Collections.Generic; +using System.IO; namespace LibHac { @@ -23,12 +25,12 @@ namespace LibHac public Stream OpenFile(string path, FileMode mode) { - return new FileStream(path, mode); + return new FileStream(Path.Combine(Root, path), mode); } public Stream OpenFile(string path, FileMode mode, FileAccess access) { - return new FileStream(path, mode, access); + return new FileStream(Path.Combine(Root, path), mode, access); } public string[] GetFileSystemEntries(string path, string searchPattern) @@ -38,7 +40,29 @@ namespace LibHac public string[] GetFileSystemEntries(string path, string searchPattern, SearchOption searchOption) { - return Directory.GetFileSystemEntries(Path.Combine(Root, path), searchPattern, searchOption); + //return Directory.GetFileSystemEntries(Path.Combine(Root, path), searchPattern, searchOption); + var result = new List(); + + try + { + result.AddRange(GetFileSystemEntries(Path.Combine(Root, path), searchPattern)); + } + catch (UnauthorizedAccessException) { /* Skip this directory */ } + + if (searchOption == SearchOption.TopDirectoryOnly) + return result.ToArray(); + + var searchDirectories = Directory.GetDirectories(Path.Combine(Root, path)); + foreach (var search in searchDirectories) + { + try + { + result.AddRange(GetFileSystemEntries(search, searchPattern, searchOption)); + } + catch (UnauthorizedAccessException) { /* Skip this result */ } + } + + return result.ToArray(); } public string GetFullPath(string path) diff --git a/LibHac/Streams/CombinationStream.cs b/LibHac/Streams/CombinationStream.cs index 5ef3b88c..937ae496 100644 --- a/LibHac/Streams/CombinationStream.cs +++ b/LibHac/Streams/CombinationStream.cs @@ -126,6 +126,7 @@ namespace LibHac.Streams break; _currentStream = _streams[_currentStreamIndex++]; + _currentStream.Position = 0; } }