diff --git a/SabreTools.Serialization/Models/PKZIP/AesEncryptionStructure.cs b/SabreTools.Serialization/Models/PKZIP/AesEncryptionStructure.cs index 3f95bdf7..db208c70 100644 --- a/SabreTools.Serialization/Models/PKZIP/AesEncryptionStructure.cs +++ b/SabreTools.Serialization/Models/PKZIP/AesEncryptionStructure.cs @@ -4,7 +4,7 @@ namespace SabreTools.Data.Models.PKZIP /// WinZip AES encryption data /// /// Header ID = 0x9901 - /// + /// public class AesEncryptionStructure : ExtensibleDataField { /// diff --git a/SabreTools.Serialization/Models/PKZIP/CentralDirectoryFileHeader.cs b/SabreTools.Serialization/Models/PKZIP/CentralDirectoryFileHeader.cs index b0b5ff0b..bd027224 100644 --- a/SabreTools.Serialization/Models/PKZIP/CentralDirectoryFileHeader.cs +++ b/SabreTools.Serialization/Models/PKZIP/CentralDirectoryFileHeader.cs @@ -3,7 +3,7 @@ namespace SabreTools.Data.Models.PKZIP /// /// Central directory file header /// - /// + /// public class CentralDirectoryFileHeader { /// diff --git a/SabreTools.Serialization/Models/PKZIP/DataDescriptor.cs b/SabreTools.Serialization/Models/PKZIP/DataDescriptor.cs index c1b6f987..3c36513f 100644 --- a/SabreTools.Serialization/Models/PKZIP/DataDescriptor.cs +++ b/SabreTools.Serialization/Models/PKZIP/DataDescriptor.cs @@ -3,7 +3,7 @@ namespace SabreTools.Data.Models.PKZIP /// /// Data descriptor /// - /// + /// public class DataDescriptor { /// diff --git a/SabreTools.Serialization/Models/PKZIP/DataDescriptor64.cs b/SabreTools.Serialization/Models/PKZIP/DataDescriptor64.cs index f088a0e0..aaa6bea8 100644 --- a/SabreTools.Serialization/Models/PKZIP/DataDescriptor64.cs +++ b/SabreTools.Serialization/Models/PKZIP/DataDescriptor64.cs @@ -3,7 +3,7 @@ namespace SabreTools.Data.Models.PKZIP /// /// Data descriptor (ZIP64) /// - /// + /// public class DataDescriptor64 { /// diff --git a/SabreTools.Serialization/Models/PKZIP/EndOfCentralDirectoryLocator64.cs b/SabreTools.Serialization/Models/PKZIP/EndOfCentralDirectoryLocator64.cs index 8d1dea20..1db87a2c 100644 --- a/SabreTools.Serialization/Models/PKZIP/EndOfCentralDirectoryLocator64.cs +++ b/SabreTools.Serialization/Models/PKZIP/EndOfCentralDirectoryLocator64.cs @@ -5,7 +5,7 @@ namespace SabreTools.Data.Models.PKZIP /// /// Zip64 end of central directory locator /// - /// + /// [StructLayout(LayoutKind.Sequential)] public class EndOfCentralDirectoryLocator64 { diff --git a/SabreTools.Serialization/Models/PKZIP/EndOfCentralDirectoryRecord.cs b/SabreTools.Serialization/Models/PKZIP/EndOfCentralDirectoryRecord.cs index 606ed194..e932c88e 100644 --- a/SabreTools.Serialization/Models/PKZIP/EndOfCentralDirectoryRecord.cs +++ b/SabreTools.Serialization/Models/PKZIP/EndOfCentralDirectoryRecord.cs @@ -3,7 +3,7 @@ namespace SabreTools.Data.Models.PKZIP /// /// End of central directory record /// - /// + /// public class EndOfCentralDirectoryRecord { /// diff --git a/SabreTools.Serialization/Models/PKZIP/Enums.cs b/SabreTools.Serialization/Models/PKZIP/Enums.cs index cf0df56c..e74df5fd 100644 --- a/SabreTools.Serialization/Models/PKZIP/Enums.cs +++ b/SabreTools.Serialization/Models/PKZIP/Enums.cs @@ -1,7 +1,7 @@ using System; -/// -/// +/// +/// namespace SabreTools.Data.Models.PKZIP { [Flags] @@ -503,7 +503,7 @@ namespace SabreTools.Data.Models.PKZIP NoCRC = 0b0000_0000_0000_1000, /// - /// Reserved for use with method 8, for enhanced deflating. + /// Reserved for use with method 8, for enhanced deflating. /// EnhancedDeflateReserved = 0b0000_0000_0001_0000, @@ -992,13 +992,13 @@ namespace SabreTools.Data.Models.PKZIP Bit2 = 0b0000_0000_0000_0100, /* - 4.4.14.2 The 0x0002 bit of this field indicates, if set, that - a 4 byte variable record length control field precedes each - logical record indicating the length of the record. The + 4.4.14.2 The 0x0002 bit of this field indicates, if set, that + a 4 byte variable record length control field precedes each + logical record indicating the length of the record. The record length control field is stored in little-endian byte - order. This flag is independent of text control characters, - and if used in conjunction with text data, includes any - control characters in the total length of the record. This + order. This flag is independent of text control characters, + and if used in conjunction with text data, includes any + control characters in the total length of the record. This value is provided for mainframe data transfer support. */ } diff --git a/SabreTools.Serialization/Models/PKZIP/ExtendedTimestampExtraField.cs b/SabreTools.Serialization/Models/PKZIP/ExtendedTimestampExtraField.cs index 3673510e..6218b1ae 100644 --- a/SabreTools.Serialization/Models/PKZIP/ExtendedTimestampExtraField.cs +++ b/SabreTools.Serialization/Models/PKZIP/ExtendedTimestampExtraField.cs @@ -4,7 +4,7 @@ namespace SabreTools.Data.Models.PKZIP /// The unix modified time, last access time, and creation time, if set /// /// Header ID = 0x5455 - /// + /// public class ExtendedTimestampExtraField : ExtensibleDataField { /// @@ -15,19 +15,19 @@ namespace SabreTools.Data.Models.PKZIP /// /// Last modified time /// - /// Only available when is set + /// Only available when is set public uint? LastModified { get; set; } /// /// Last accessed time /// - /// Only available when is set + /// Only available when is set public uint? LastAccessed { get; set; } /// /// Created on time /// - /// Only available when is set + /// Only available when is set public uint? CreatedOn { get; set; } } } diff --git a/SabreTools.Serialization/Models/PKZIP/ExtensibleDataField.cs b/SabreTools.Serialization/Models/PKZIP/ExtensibleDataField.cs index d4ca9ac6..8521249e 100644 --- a/SabreTools.Serialization/Models/PKZIP/ExtensibleDataField.cs +++ b/SabreTools.Serialization/Models/PKZIP/ExtensibleDataField.cs @@ -6,7 +6,7 @@ namespace SabreTools.Data.Models.PKZIP /// files, the following structure MUST be used for all /// programs storing data in this field /// - /// + /// public abstract class ExtensibleDataField { /// diff --git a/SabreTools.Serialization/Models/PKZIP/InfoZIPUnicodeCommentExtraField.cs b/SabreTools.Serialization/Models/PKZIP/InfoZIPUnicodeCommentExtraField.cs index 9c5c696c..6a33e2f5 100644 --- a/SabreTools.Serialization/Models/PKZIP/InfoZIPUnicodeCommentExtraField.cs +++ b/SabreTools.Serialization/Models/PKZIP/InfoZIPUnicodeCommentExtraField.cs @@ -3,20 +3,20 @@ namespace SabreTools.Data.Models.PKZIP /// /// Stores the UTF-8 version of the file comment as stored in the /// central directory header. (Last Revision 20070912) - /// + /// /// Currently Version is set to the number 1. If there is a need /// to change this field, the version will be incremented. Changes /// MAY NOT be backward compatible so this extra field SHOULD NOT be /// used if the version is not recognized. - /// + /// /// The ComCRC32 is the standard zip CRC32 checksum of the File Comment /// field in the central directory header. This is used to verify that /// the comment field has not changed since the Unicode Comment extra field - /// was created. This can happen if a utility changes the File Comment - /// field but does not update the UTF-8 Comment extra field. If the CRC - /// check fails, this Unicode Comment extra field SHOULD be ignored and + /// was created. This can happen if a utility changes the File Comment + /// field but does not update the UTF-8 Comment extra field. If the CRC + /// check fails, this Unicode Comment extra field SHOULD be ignored and /// the File Comment field in the header SHOULD be used instead. - /// + /// /// The UnicodeCom field is the UTF-8 version of the File Comment field /// in the header. As UnicodeCom is defined to be UTF-8, no UTF-8 byte /// order mark (BOM) is used. The length of this field is determined by @@ -33,7 +33,7 @@ namespace SabreTools.Data.Models.PKZIP /// Directory Header for a file. /// /// Header ID = 0x6375 - /// + /// public class InfoZIPUnicodeCommentExtraField : ExtensibleDataField { /// @@ -49,6 +49,6 @@ namespace SabreTools.Data.Models.PKZIP /// /// UTF-8 version of the entry comment /// - public string? UnicodeCom { get; set; } + public string UnicodeCom { get; set; } } } diff --git a/SabreTools.Serialization/Models/PKZIP/InfoZIPUnicodePathExtraField.cs b/SabreTools.Serialization/Models/PKZIP/InfoZIPUnicodePathExtraField.cs index 1edf71bd..0c1b84fe 100644 --- a/SabreTools.Serialization/Models/PKZIP/InfoZIPUnicodePathExtraField.cs +++ b/SabreTools.Serialization/Models/PKZIP/InfoZIPUnicodePathExtraField.cs @@ -3,12 +3,12 @@ namespace SabreTools.Data.Models.PKZIP /// /// Stores the UTF-8 version of the file name field as stored in the /// local header and central directory header. (Last Revision 20070912) - /// + /// /// Currently Version is set to the number 1. If there is a need /// to change this field, the version will be incremented. Changes /// MAY NOT be backward compatible so this extra field SHOULD NOT be /// used if the version is not recognized. - /// + /// /// The NameCRC32 is the standard zip CRC32 checksum of the File Name /// field in the header. This is used to verify that the header /// File Name field has not changed since the Unicode Path extra field @@ -16,7 +16,7 @@ namespace SabreTools.Data.Models.PKZIP /// does not update the UTF-8 path extra field. If the CRC check fails, /// this UTF-8 Path Extra Field SHOULD be ignored and the File Name field /// in the header SHOULD be used instead. - /// + /// /// The UnicodeName is the UTF-8 version of the contents of the File Name /// field in the header. As UnicodeName is defined to be UTF-8, no UTF-8 /// byte order mark (BOM) is used. The length of this field is determined @@ -33,7 +33,7 @@ namespace SabreTools.Data.Models.PKZIP /// Directory Header for a file. /// /// Header ID = 0x7075 - /// + /// public class InfoZIPUnicodePathExtraField : ExtensibleDataField { /// @@ -49,6 +49,6 @@ namespace SabreTools.Data.Models.PKZIP /// /// UTF-8 version of the entry File Name /// - public string? UnicodeName { get; set; } + public string UnicodeName { get; set; } } } diff --git a/SabreTools.Serialization/Models/PKZIP/LocalFile.cs b/SabreTools.Serialization/Models/PKZIP/LocalFile.cs index 56caaffd..6b23c59b 100644 --- a/SabreTools.Serialization/Models/PKZIP/LocalFile.cs +++ b/SabreTools.Serialization/Models/PKZIP/LocalFile.cs @@ -10,7 +10,7 @@ namespace SabreTools.Data.Models.PKZIP /// /// Local file header /// - public LocalFileHeader? LocalFileHeader { get; set; } + public LocalFileHeader LocalFileHeader { get; set; } /// /// Encryption header diff --git a/SabreTools.Serialization/Models/PKZIP/LocalFileHeader.cs b/SabreTools.Serialization/Models/PKZIP/LocalFileHeader.cs index 597e4809..ae0db25e 100644 --- a/SabreTools.Serialization/Models/PKZIP/LocalFileHeader.cs +++ b/SabreTools.Serialization/Models/PKZIP/LocalFileHeader.cs @@ -3,8 +3,8 @@ namespace SabreTools.Data.Models.PKZIP /// /// PKZIP local file header /// - /// - /// + /// + /// public class LocalFileHeader { /// diff --git a/SabreTools.Serialization/Models/PKZIP/NTFSExtraField.cs b/SabreTools.Serialization/Models/PKZIP/NTFSExtraField.cs index 02397481..dabe1477 100644 --- a/SabreTools.Serialization/Models/PKZIP/NTFSExtraField.cs +++ b/SabreTools.Serialization/Models/PKZIP/NTFSExtraField.cs @@ -6,7 +6,7 @@ namespace SabreTools.Data.Models.PKZIP /// and Ctime values MAY be used on any WIN32 system.) /// /// Header ID = 0x000A - /// + /// public class NTFSExtraField : ExtensibleDataField { /// @@ -17,6 +17,6 @@ namespace SabreTools.Data.Models.PKZIP /// /// NTFS attribute tags /// - public TagSizeVar[]? TagSizeVars { get; set; } + public TagSizeVar[] TagSizeVars { get; set; } } } diff --git a/SabreTools.Serialization/Models/PKZIP/OpenVMSExtraField.cs b/SabreTools.Serialization/Models/PKZIP/OpenVMSExtraField.cs index f7319f35..cb4d0404 100644 --- a/SabreTools.Serialization/Models/PKZIP/OpenVMSExtraField.cs +++ b/SabreTools.Serialization/Models/PKZIP/OpenVMSExtraField.cs @@ -3,24 +3,24 @@ namespace SabreTools.Data.Models.PKZIP /// /// The following is the layout of the OpenVMS attributes /// "extra" block. - /// + /// /// OpenVMS Extra Field Rules: - /// + /// /// - There will be one or more attributes present, which /// will each be preceded by the above TagX & SizeX values. /// These values are identical to the ATR$C_XXXX and ATR$S_XXXX /// constants which are defined in ATR.H under OpenVMS C. Neither /// of these values will ever be zero. - /// + /// /// - No word alignment or padding is performed. - /// + /// /// - A well-behaved PKZIP/OpenVMS program SHOULD NOT produce /// more than one sub-block with the same TagX value. Also, there MUST /// NOT be more than one "extra" block of type 0x000c in a particular /// directory record. /// /// Header ID = 0x000C - /// + /// public class OpenVMSExtraField : ExtensibleDataField { /// @@ -31,6 +31,6 @@ namespace SabreTools.Data.Models.PKZIP /// /// OpenVMS attribute tags /// - public TagSizeVar[]? TagSizeVars { get; set; } + public TagSizeVar[] TagSizeVars { get; set; } } } diff --git a/SabreTools.Serialization/Models/PKZIP/PatchDescriptorExtraField.cs b/SabreTools.Serialization/Models/PKZIP/PatchDescriptorExtraField.cs index 364d0bf5..57cd6538 100644 --- a/SabreTools.Serialization/Models/PKZIP/PatchDescriptorExtraField.cs +++ b/SabreTools.Serialization/Models/PKZIP/PatchDescriptorExtraField.cs @@ -3,7 +3,7 @@ namespace SabreTools.Data.Models.PKZIP /// /// The following is the layout of the Patch Descriptor /// "extra" block. - /// + /// /// Patch support is provided by PKPatchMaker(tm) technology /// and is covered under U.S. Patents and Patents Pending. The use or /// implementation in a product of certain technological aspects set @@ -14,7 +14,7 @@ namespace SabreTools.Data.Models.PKZIP /// information. /// /// Header ID = 0x000F - /// + /// public class PatchDescriptorExtraField : ExtensibleDataField { /// diff --git a/SabreTools.Serialization/Models/PKZIP/RecordManagementControls.cs b/SabreTools.Serialization/Models/PKZIP/RecordManagementControls.cs index d852e255..b81ea74d 100644 --- a/SabreTools.Serialization/Models/PKZIP/RecordManagementControls.cs +++ b/SabreTools.Serialization/Models/PKZIP/RecordManagementControls.cs @@ -1,12 +1,12 @@ namespace SabreTools.Data.Models.PKZIP { /// Header ID = 0x0018 - /// + /// public class RecordManagementControls : ExtensibleDataField { /// /// Record management control attribute tags /// - public TagSizeVar[]? TagSizeVars { get; set; } + public TagSizeVar[] TagSizeVars { get; set; } } } diff --git a/SabreTools.Serialization/Models/PKZIP/Zip64ExtendedInformationExtraField.cs b/SabreTools.Serialization/Models/PKZIP/Zip64ExtendedInformationExtraField.cs index 933a87e2..a0abf5d6 100644 --- a/SabreTools.Serialization/Models/PKZIP/Zip64ExtendedInformationExtraField.cs +++ b/SabreTools.Serialization/Models/PKZIP/Zip64ExtendedInformationExtraField.cs @@ -1,24 +1,24 @@ namespace SabreTools.Data.Models.PKZIP { /// - /// The following is the layout of the zip64 extended + /// The following is the layout of the zip64 extended /// information "extra" block. If one of the size or /// offset fields in the Local or Central directory /// record is too small to hold the required data, /// a Zip64 extended information record is created. - /// The order of the fields in the zip64 extended + /// The order of the fields in the zip64 extended /// information record is fixed, but the fields MUST /// only appear if the corresponding Local or Central /// directory record field is set to 0xFFFF or 0xFFFFFFFF. - /// + /// /// This entry in the Local header MUST include BOTH original - /// and compressed file size fields. If encrypting the + /// and compressed file size fields. If encrypting the /// central directory and bit 13 of the general purpose bit /// flag is set indicating masking, the value stored in the /// Local Header for the original file size will be zero. /// /// Header ID = 0x0001 - /// + /// public class Zip64ExtendedInformationExtraField : ExtensibleDataField { /// diff --git a/SabreTools.Serialization/Models/PKZIP/ZipItMacintoshShortDirectoryExtraField.cs b/SabreTools.Serialization/Models/PKZIP/ZipItMacintoshShortDirectoryExtraField.cs index 7b4489e5..198f79d6 100644 --- a/SabreTools.Serialization/Models/PKZIP/ZipItMacintoshShortDirectoryExtraField.cs +++ b/SabreTools.Serialization/Models/PKZIP/ZipItMacintoshShortDirectoryExtraField.cs @@ -3,12 +3,12 @@ namespace SabreTools.Data.Models.PKZIP /// /// The following is the layout of a shortened variant of the /// ZipIt extra block for Macintosh used only for directory - /// entries. This variant is used by ZipIt 1.3.5 and newer to + /// entries. This variant is used by ZipIt 1.3.5 and newer to /// save some optional Mac-specific information about directories. /// The local-header and central-header versions are identical. /// /// Header ID = 0x2805 - /// + /// public class ZipItMacintoshShortDirectoryExtraField : ExtensibleDataField { /// diff --git a/SabreTools.Serialization/Wrappers/PKZIP.Printing.cs b/SabreTools.Serialization/Wrappers/PKZIP.Printing.cs index 67be1ead..f42df79b 100644 --- a/SabreTools.Serialization/Wrappers/PKZIP.Printing.cs +++ b/SabreTools.Serialization/Wrappers/PKZIP.Printing.cs @@ -53,26 +53,19 @@ namespace SabreTools.Serialization.Wrappers #region Local File Header var localFileHeader = localFile.LocalFileHeader; - if (localFileHeader == null) - { - builder.AppendLine(" [Local File Header] [NULL]"); - } - else - { - builder.AppendLine(localFileHeader.Signature, " [Local File Header] Signature"); - builder.AppendLine(localFileHeader.Version, " [Local File Header] Version"); - builder.AppendLine($" [Local File Header] Flags: {localFileHeader.Flags} (0x{localFileHeader.Flags:X})"); - builder.AppendLine($" [Local File Header] Compression method: {localFileHeader.CompressionMethod} (0x{localFileHeader.CompressionMethod:X})"); - builder.AppendLine(localFileHeader.LastModifedFileTime, " [Local File Header] Last modified file time"); // TODO: Parse from MS-DOS - builder.AppendLine(localFileHeader.LastModifiedFileDate, " [Local File Header] Last modified file date"); // TODO: Parse from MS-DOS - builder.AppendLine(localFileHeader.CRC32, " [Local File Header] CRC-32"); - builder.AppendLine(localFileHeader.CompressedSize, " [Local File Header] Compressed size"); - builder.AppendLine(localFileHeader.UncompressedSize, " [Local File Header] Uncompressed size"); - builder.AppendLine(localFileHeader.FileNameLength, " [Local File Header] File name length"); - builder.AppendLine(localFileHeader.ExtraFieldLength, " [Local File Header] Extra field length"); - builder.AppendLine(localFileHeader.FileName, " [Local File Header] File name"); - Print(builder, " [Local File Header] Extra Fields", localFileHeader.ExtraFields); - } + builder.AppendLine(localFileHeader.Signature, " [Local File Header] Signature"); + builder.AppendLine(localFileHeader.Version, " [Local File Header] Version"); + builder.AppendLine($" [Local File Header] Flags: {localFileHeader.Flags} (0x{localFileHeader.Flags:X})"); + builder.AppendLine($" [Local File Header] Compression method: {localFileHeader.CompressionMethod} (0x{localFileHeader.CompressionMethod:X})"); + builder.AppendLine(localFileHeader.LastModifedFileTime, " [Local File Header] Last modified file time"); // TODO: Parse from MS-DOS + builder.AppendLine(localFileHeader.LastModifiedFileDate, " [Local File Header] Last modified file date"); // TODO: Parse from MS-DOS + builder.AppendLine(localFileHeader.CRC32, " [Local File Header] CRC-32"); + builder.AppendLine(localFileHeader.CompressedSize, " [Local File Header] Compressed size"); + builder.AppendLine(localFileHeader.UncompressedSize, " [Local File Header] Uncompressed size"); + builder.AppendLine(localFileHeader.FileNameLength, " [Local File Header] File name length"); + builder.AppendLine(localFileHeader.ExtraFieldLength, " [Local File Header] Extra field length"); + builder.AppendLine(localFileHeader.FileName, " [Local File Header] File name"); + Print(builder, " [Local File Header] Extra Fields", localFileHeader.ExtraFields); #endregion @@ -485,11 +478,11 @@ namespace SabreTools.Serialization.Wrappers builder.AppendLine(field.Data, " Data"); } - private static void Print(StringBuilder builder, TagSizeVar[]? tuples) + private static void Print(StringBuilder builder, TagSizeVar[] tuples) { builder.AppendLine(" Tag/Size/Var Tuples:"); builder.AppendLine(" -------------------------"); - if (tuples == null) + if (tuples.Length == 0) { builder.AppendLine(" No tuples"); return;