using System.Runtime.InteropServices; namespace SabreTools.Data.Models.TAR { /// [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public sealed class Header { /// /// File name without a forward slash /// [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)] public string FileName = string.Empty; /// /// File mode /// /// Octal string representation [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] public string Mode = string.Empty; /// /// Owner's numeric user ID /// /// Octal string representation [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] public string UID = string.Empty; /// /// Owner's numeric group ID /// /// Octal string representation [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] public string GID = string.Empty; /// /// File size in bytes /// /// Octal string representation [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)] public string Size = string.Empty; /// /// Last modification time in numeric Unix time format /// /// Octal string representation [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)] public string ModifiedTime = string.Empty; /// /// Checksum for header record /// /// Octal string representation [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] public string Checksum = string.Empty; /// /// Link indicator (file type) / Type flag /// public TypeFlag TypeFlag; /// /// Linked path name or file name /// [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)] public string LinkName = string.Empty; #region USTAR Extension /// /// UStar indicator, "ustar" /// [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)] public string? Magic; /// /// UStar version, "00" /// [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 3)] public string? Version; /// /// Owner user name /// [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string? UserName; /// /// Owner group name /// [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string? GroupName; /// /// Device major number /// /// Octal string representation(?) [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] public string? DevMajor; /// /// Device minor number /// /// Octal string representation(?) [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] public string? DevMinor; /// /// Path name without trailing slashes /// /// 155 bytes [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 155)] public string? Prefix; #endregion } }