mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Implement getxattr for ISO9660.
This commit is contained in:
@@ -16,14 +16,44 @@ namespace DiscImageChef.Filesystems.ISO9660
|
||||
|
||||
xattrs = new List<string>();
|
||||
|
||||
if(entry.AssociatedFile != null)
|
||||
{
|
||||
xattrs.Add("org.iso.9660.ea");
|
||||
}
|
||||
if(entry.AssociatedFile != null) xattrs.Add("org.iso.9660.ea");
|
||||
|
||||
return Errno.NoError;
|
||||
}
|
||||
|
||||
public Errno GetXattr(string path, string xattr, ref byte[] buf) => throw new NotImplementedException();
|
||||
public Errno GetXattr(string path, string xattr, ref byte[] buf)
|
||||
{
|
||||
buf = null;
|
||||
if(!mounted) return Errno.AccessDenied;
|
||||
|
||||
Errno err = GetFileEntry(path, out DecodedDirectoryEntry entry);
|
||||
if(err != Errno.NoError) return err;
|
||||
|
||||
switch(xattr)
|
||||
{
|
||||
case "org.iso.9660.ea":
|
||||
if(entry.AssociatedFile is null) return Errno.NoSuchExtendedAttribute;
|
||||
|
||||
if(entry.AssociatedFile.Extent == 0) return Errno.InvalidArgument;
|
||||
|
||||
if(entry.AssociatedFile.Size == 0)
|
||||
{
|
||||
buf = new byte[0];
|
||||
return Errno.NoError;
|
||||
}
|
||||
|
||||
// TODO: XA
|
||||
uint eaSizeInSectors = entry.AssociatedFile.Size / 2048;
|
||||
if(entry.AssociatedFile.Size % 2048 > 0) eaSizeInSectors++;
|
||||
|
||||
byte[] ea = image.ReadSectors(entry.AssociatedFile.Extent, eaSizeInSectors);
|
||||
|
||||
buf = new byte[entry.AssociatedFile.Size];
|
||||
Array.Copy(ea, 0, buf, 0, buf.LongLength);
|
||||
|
||||
return Errno.NoError;
|
||||
default: return Errno.NoSuchExtendedAttribute;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user