From 92b2e445b6589cd6a0663620fcae57032ffe10ae Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Fri, 5 Sep 2025 03:14:55 +0100 Subject: [PATCH] [AMG] Implement ListXAttr and GetXAttr. --- Aaru.Archives/Amg/Unimplemented.cs | 8 ------ Aaru.Archives/Amg/Xattrs.cs | 44 ++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 Aaru.Archives/Amg/Xattrs.cs diff --git a/Aaru.Archives/Amg/Unimplemented.cs b/Aaru.Archives/Amg/Unimplemented.cs index 7fea2dea2..1a95e1641 100644 --- a/Aaru.Archives/Amg/Unimplemented.cs +++ b/Aaru.Archives/Amg/Unimplemented.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using Aaru.CommonTypes.Enums; using Aaru.CommonTypes.Interfaces; using Aaru.CommonTypes.Structs; @@ -10,13 +9,6 @@ public sealed partial class Amg { #region IArchive Members - /// - public ErrorNumber ListXAttr(int entryNumber, out List xattrs) => throw new NotImplementedException(); - - /// - public ErrorNumber GetXattr(int entryNumber, string xattr, ref byte[] buffer) => - throw new NotImplementedException(); - /// public ErrorNumber Stat(int entryNumber, out FileEntryInfo stat) => throw new NotImplementedException(); diff --git a/Aaru.Archives/Amg/Xattrs.cs b/Aaru.Archives/Amg/Xattrs.cs new file mode 100644 index 000000000..3a3eb1d24 --- /dev/null +++ b/Aaru.Archives/Amg/Xattrs.cs @@ -0,0 +1,44 @@ +using System.Collections.Generic; +using System.Text; +using Aaru.CommonTypes.Enums; + +namespace Aaru.Archives; + +public sealed partial class Amg +{ +#region IArchive Members + + /// + public ErrorNumber ListXAttr(int entryNumber, out List xattrs) + { + xattrs = null; + + if(!Opened) return ErrorNumber.NotOpened; + + if(entryNumber < 0 || entryNumber >= _files.Count) return ErrorNumber.OutOfRange; + + xattrs = []; + + if(_files[entryNumber].Comment is not null) xattrs.Add("comment"); + + return ErrorNumber.NoError; + } + + /// + public ErrorNumber GetXattr(int entryNumber, string xattr, ref byte[] buffer) + { + buffer = null; + + if(!Opened) return ErrorNumber.NotOpened; + + if(entryNumber < 0 || entryNumber >= _files.Count) return ErrorNumber.OutOfRange; + + if(xattr != "comment" || _files[entryNumber].Comment is null) return ErrorNumber.NoSuchExtendedAttribute; + + buffer = Encoding.UTF8.GetBytes(_files[entryNumber].Comment); + + return ErrorNumber.NoError; + } + +#endregion +} \ No newline at end of file