internal static ExtraData Create(ExtraDataType type, ushort length, byte[] extraData) { switch (type) { case ExtraDataType.UnicodePathExtraField: return(new ExtraUnicodePathExtraField { Type = type, Length = length, DataBytes = extraData }); case ExtraDataType.Zip64ExtendedInformationExtraField: return(new Zip64ExtendedInformationExtraField ( type, length, extraData )); default: return(new ExtraData { Type = type, Length = length, DataBytes = extraData }); } }
public Zip64ExtendedInformationExtraField(ExtraDataType type, ushort length, byte[] dataBytes) { Type = type; Length = length; DataBytes = dataBytes; Process(); }
protected void LoadExtra(byte[] extra) { for (int i = 0; i < extra.Length - 4;) { ExtraDataType type = (ExtraDataType)BinaryPrimitives.ReadUInt16LittleEndian(extra.AsSpan(i)); if (!Enum.IsDefined(typeof(ExtraDataType), type)) { type = ExtraDataType.NotImplementedExtraData; } ushort length = BinaryPrimitives.ReadUInt16LittleEndian(extra.AsSpan(i + 2)); // 7zip has this same kind of check to ignore extras blocks that don't conform to the standard 2-byte ID, 2-byte length, N-byte value. // CPP/7Zip/Zip/ZipIn.cpp: CInArchive::ReadExtra if (length > extra.Length) { // bad extras block return; } byte[] data = new byte[length]; Buffer.BlockCopy(extra, i + 4, data, 0, length); Extra.Add(LocalEntryHeaderExtraFactory.Create(type, length, data)); i += length + 4; } }
protected void LoadExtra(byte[] extra) { if (extra.Length % 2 != 0) { return; } for (int i = 0; i < extra.Length;) { ExtraDataType type = (ExtraDataType)BitConverter.ToUInt16(extra, i); if (!Enum.IsDefined(typeof(ExtraDataType), type)) { return; } ushort length = BitConverter.ToUInt16(extra, i + 2); byte[] data = new byte[length]; Buffer.BlockCopy(extra, i + 4, data, 0, length); Extra.Add(new ExtraData { Type = type, Length = length, DataBytes = data }); i += length + 4; } }
internal static ExtraData Create(ExtraDataType type, ushort length, byte[] extraData) { return(type switch { ExtraDataType.UnicodePathExtraField => new ExtraUnicodePathExtraField(type, length, extraData), ExtraDataType.Zip64ExtendedInformationExtraField => new Zip64ExtendedInformationExtraField(type, length, extraData), _ => new ExtraData(type, length, extraData) });
public object GetExtra(ExtraDataType type) { if (!HasExtra(type)) { return(null); } return(Extra.Where(e => e.Type == ExtraDataType.Traceback).First().Data); }
internal static ExtraData Create(ExtraDataType type, ushort length, byte[] extraData) { switch (type) { case ExtraDataType.UnicodePathExtraField: return(new ExtraUnicodePathExtraField(type, length, extraData)); case ExtraDataType.Zip64ExtendedInformationExtraField: return(new Zip64ExtendedInformationExtraField(type, length, extraData)); } return(new ExtraData(type, length, extraData)); }
internal static ExtraData Create(ExtraDataType type, ushort length, byte[] extraData) { if (type == ExtraDataType.UnicodePathExtraField) { ExtraUnicodePathExtraField field = new ExtraUnicodePathExtraField(); field.Type = type; field.Length = length; field.DataBytes = extraData; return field; } ExtraData data = new ExtraData(); data.Type = type; data.Length = length; data.DataBytes = extraData; return data; }
internal static ExtraData Create(ExtraDataType type, ushort length, byte[] extraData) { if (type == ExtraDataType.UnicodePathExtraField) { ExtraUnicodePathExtraField field = new ExtraUnicodePathExtraField(); field.Type = type; field.Length = length; field.DataBytes = extraData; return(field); } ExtraData data = new ExtraData(); data.Type = type; data.Length = length; data.DataBytes = extraData; return(data); }
protected void LoadExtra(byte[] extra) { ushort num2; for (int i = 0; i < (extra.Length - 4); i += num2 + 4) { ExtraDataType notImplementedExtraData = (ExtraDataType)BitConverter.ToUInt16(extra, i); if (!Enum.IsDefined(typeof(ExtraDataType), notImplementedExtraData)) { notImplementedExtraData = ExtraDataType.NotImplementedExtraData; } num2 = BitConverter.ToUInt16(extra, i + 2); byte[] dst = new byte[num2]; Buffer.BlockCopy(extra, i + 4, dst, 0, num2); this.Extra.Add(LocalEntryHeaderExtraFactory.Create(notImplementedExtraData, num2, dst)); } }
protected void LoadExtra(byte[] extra) { for (int i = 0; i < extra.Length - 4;) { ExtraDataType type = (ExtraDataType)DataConverter.LittleEndian.GetUInt16(extra, i); if (!Enum.IsDefined(typeof(ExtraDataType), type)) { type = ExtraDataType.NotImplementedExtraData; } ushort length = DataConverter.LittleEndian.GetUInt16(extra, i + 2); byte[] data = new byte[length]; Buffer.BlockCopy(extra, i + 4, data, 0, length); Extra.Add(LocalEntryHeaderExtraFactory.Create(type, length, data)); i += length + 4; } }
internal static ExtraData Create(ExtraDataType type,ushort length, byte[] extraData) { switch (type) { case ExtraDataType.UnicodePathExtraField: return new ExtraUnicodePathExtraField() { Type = type, Length = length, DataBytes = extraData }; default: return new ExtraData { Type = type, Length = length, DataBytes = extraData }; } }
internal static ExtraData Create(ExtraDataType type, ushort length, byte[] extraData) { switch (type) { case ExtraDataType.UnicodePathExtraField: return(new ExtraUnicodePathExtraField() { Type = type, Length = length, DataBytes = extraData }); default: return(new ExtraData { Type = type, Length = length, DataBytes = extraData }); } }
public bool HasExtra(ExtraDataType type) { return(Extra.Any(e => e.Type == type)); }
public Zip64ExtendedInformationExtraField(ExtraDataType type, ushort length, byte[] dataBytes) : base(type, length, dataBytes) { }
public ExtraUnicodePathExtraField(ExtraDataType type, ushort length, byte[] dataBytes) : base(type, length, dataBytes) { }
public ExtraData(ExtraDataType type, ushort length, byte[] dataBytes) { Type = type; Length = length; DataBytes = dataBytes; }
public ExtraData(ExtraDataType type, object data) { Type = type; Data = data; }