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
}
}