diff --git a/src/LibHac/FsSystem/PathParser.cs b/src/LibHac/FsSystem/PathParser.cs index e6c3f51e..3182b1af 100644 --- a/src/LibHac/FsSystem/PathParser.cs +++ b/src/LibHac/FsSystem/PathParser.cs @@ -27,7 +27,7 @@ namespace LibHac.FsSystem _path = path; _offset = 0; _length = 0; - _finished = path.Length == 1; + _finished = path.Length == 1 || path[1] == '\0'; } /// @@ -57,12 +57,12 @@ namespace LibHac.FsSystem _offset = _offset + _length + 1; int end = _offset; - while (end < _path.Length && _path[end] != '/') + while (end < _path.Length && _path[end] != '\0' && _path[end] != '/') { end++; } - _finished = end + 1 >= _path.Length; + _finished = end + 1 >= _path.Length || _path[end + 1] == '\0'; _length = end - _offset; return true; diff --git a/src/LibHac/FsSystem/Save/SaveFsList.cs b/src/LibHac/FsSystem/Save/SaveFsList.cs index 2d83c572..add73f18 100644 --- a/src/LibHac/FsSystem/Save/SaveFsList.cs +++ b/src/LibHac/FsSystem/Save/SaveFsList.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +using LibHac.Common; using LibHac.Fs; namespace LibHac.FsSystem.Save @@ -44,7 +45,7 @@ namespace LibHac.FsSystem.Save ReadEntry(index, out entry); - if (entry.Parent == key.Parent && Util.StringSpansEqual(name, key.Name)) + if (entry.Parent == key.Parent && StringUtils.Compare(name, key.Name) == 0) { return (index, prevIndex); } diff --git a/src/LibHac/Util.cs b/src/LibHac/Util.cs index cd41f537..7c226b5e 100644 --- a/src/LibHac/Util.cs +++ b/src/LibHac/Util.cs @@ -64,42 +64,6 @@ namespace LibHac return true; } - /// - /// Compares two strings stored int byte spans. For the strings to be equal, - /// they must terminate in the same place. - /// A string can be terminated by either a null character or the end of the span. - /// - /// The first string to be compared. - /// The first string to be compared. - /// if the strings are equal; - /// otherwise . - public static bool StringSpansEqual(ReadOnlySpan s1, ReadOnlySpan s2) - { - // Make s1 the long string for simplicity - if (s1.Length < s2.Length) - { - ReadOnlySpan tmp = s1; - s1 = s2; - s2 = tmp; - } - - int shortLength = s2.Length; - int i; - - for (i = 0; i < shortLength; i++) - { - if (s1[i] != s2[i]) return false; - - // Both strings are null-terminated - if (s1[i] == 0) return true; - } - - // The bytes in the short string equal those in the long. - // Check if the strings are the same length or if the next - // character in the long string is a null character - return s1.Length == s2.Length || s1[i] == 0; - } - public static ReadOnlySpan GetUtf8Bytes(string value) { return Encoding.UTF8.GetBytes(value).AsSpan();