handle magic byte offsets in data format filters

This commit is contained in:
Michael Becker 2022-04-05 20:42:51 -04:00
parent 4f05e15621
commit ba02cf575e
No known key found for this signature in database
GPG Key ID: DA394832305DA332
2 changed files with 13 additions and 7 deletions

View File

@ -154,15 +154,15 @@ namespace UniversalEditor
byte[] cmp = new byte[bytes.Length];
long offset = accessor.Position;
if (i < mvarMagicByteOffsets.Length)
if (i < MagicByteOffsets.Length)
{
if (mvarMagicByteOffsets[i] < 0)
if (MagicByteOffsets[i] < 0)
{
accessor.Seek(mvarMagicByteOffsets[i], SeekOrigin.End);
accessor.Seek(MagicByteOffsets[i], SeekOrigin.End);
}
else
{
accessor.Seek(mvarMagicByteOffsets[i], SeekOrigin.Begin);
accessor.Seek(MagicByteOffsets[i], SeekOrigin.Begin);
}
}
accessor.Reader.Read(cmp, 0, cmp.Length);
@ -223,8 +223,7 @@ namespace UniversalEditor
return false;
}
private int[] mvarMagicByteOffsets = new int[0];
public int[] MagicByteOffsets { get { return mvarMagicByteOffsets; } set { mvarMagicByteOffsets = value; } }
public int[] MagicByteOffsets { get; set; } = new int[0];
public string ContentType { get; set; } = null;
public string PerceivedType { get; set; }

View File

@ -936,6 +936,13 @@ namespace UniversalEditor.DataFormats.UEPackage
if (tagMagicByteSequence == null) continue;
if (tagMagicByteSequence.FullName != "MagicByteSequence") continue;
int offset = 0;
MarkupAttribute attOffset = tagMagicByteSequence.Attributes["Offset"];
if (attOffset != null)
{
offset = Int32.Parse(attOffset.Value);
}
List<byte?> magicByteSequence = new List<byte?>();
foreach (MarkupElement elMagicByte in tagMagicByteSequence.Elements)
@ -1008,7 +1015,7 @@ namespace UniversalEditor.DataFormats.UEPackage
}
}
magicByteOffsets.Add(0);
magicByteOffsets.Add(offset);
filter.MagicBytes.Add(magicByteSequence.ToArray());
}
filter.MagicByteOffsets = magicByteOffsets.ToArray();