diff --git a/Aaru.Archives/Arc/Files.cs b/Aaru.Archives/Arc/Files.cs index 8d53e6a65..3a81f2859 100644 --- a/Aaru.Archives/Arc/Files.cs +++ b/Aaru.Archives/Arc/Files.cs @@ -86,7 +86,6 @@ public sealed partial class Arc /// public ErrorNumber GetAttributes(int entryNumber, out FileAttributes attributes) { - // DOS version of ZOO ignores the attributes, so we just say it's a file attributes = FileAttributes.None; if(!Opened) return ErrorNumber.NotOpened; diff --git a/Aaru.Archives/Stfs/Files.cs b/Aaru.Archives/Stfs/Files.cs index 4a41858d3..82ee92301 100644 --- a/Aaru.Archives/Stfs/Files.cs +++ b/Aaru.Archives/Stfs/Files.cs @@ -1,3 +1,4 @@ +using System; using Aaru.CommonTypes.Enums; namespace Aaru.Archives; @@ -20,5 +21,30 @@ public sealed partial class Stfs return ErrorNumber.NoError; } + /// + public ErrorNumber GetEntryNumber(string fileName, bool caseInsensitiveMatch, out int entryNumber) + { + entryNumber = -1; + + if(!Opened) return ErrorNumber.NotOpened; + + if(entryNumber < 0 || entryNumber >= _entries.Length) return ErrorNumber.OutOfRange; + + StringComparison comparison = caseInsensitiveMatch + ? StringComparison.CurrentCultureIgnoreCase + : StringComparison.CurrentCulture; + + for(int i = 0, count = _entries.Length; i < count; i++) + { + if(!_entries[i].Filename.Equals(fileName, comparison)) continue; + + entryNumber = i; + + return ErrorNumber.NoError; + } + + return ErrorNumber.NoSuchFile; + } + #endregion } \ No newline at end of file diff --git a/Aaru.Archives/Stfs/Unimplemented.cs b/Aaru.Archives/Stfs/Unimplemented.cs index 3d3f528bb..bf6986a10 100644 --- a/Aaru.Archives/Stfs/Unimplemented.cs +++ b/Aaru.Archives/Stfs/Unimplemented.cs @@ -11,10 +11,6 @@ public sealed partial class Stfs { #region IArchive Members - /// - public ErrorNumber GetEntryNumber(string fileName, bool caseInsensitiveMatch, out int entryNumber) => - throw new NotImplementedException(); - /// public ErrorNumber GetCompressedSize(int entryNumber, out long length) => throw new NotImplementedException();