using System; using System.Text; namespace ICSharpCode.SharpZipLib.Tar { // Token: 0x02000037 RID: 55 public class TarHeader : ICloneable { // Token: 0x060001DE RID: 478 RVA: 0x0000AE4C File Offset: 0x00009E4C public TarHeader() { this.Magic = "ustar "; this.Version = " "; this.Name = ""; this.LinkName = ""; this.UserId = TarHeader.defaultUserId; this.GroupId = TarHeader.defaultGroupId; this.UserName = TarHeader.defaultUser; this.GroupName = TarHeader.defaultGroupName; this.Size = 0L; } // Token: 0x17000062 RID: 98 // (get) Token: 0x060001DF RID: 479 RVA: 0x0000AEBF File Offset: 0x00009EBF // (set) Token: 0x060001E0 RID: 480 RVA: 0x0000AEC7 File Offset: 0x00009EC7 public string Name { get { return this.name; } set { if (value == null) { throw new ArgumentNullException("value"); } this.name = value; } } // Token: 0x060001E1 RID: 481 RVA: 0x0000AEDE File Offset: 0x00009EDE [Obsolete("Use the Name property instead", true)] public string GetName() { return this.name; } // Token: 0x17000063 RID: 99 // (get) Token: 0x060001E2 RID: 482 RVA: 0x0000AEE6 File Offset: 0x00009EE6 // (set) Token: 0x060001E3 RID: 483 RVA: 0x0000AEEE File Offset: 0x00009EEE public int Mode { get { return this.mode; } set { this.mode = value; } } // Token: 0x17000064 RID: 100 // (get) Token: 0x060001E4 RID: 484 RVA: 0x0000AEF7 File Offset: 0x00009EF7 // (set) Token: 0x060001E5 RID: 485 RVA: 0x0000AEFF File Offset: 0x00009EFF public int UserId { get { return this.userId; } set { this.userId = value; } } // Token: 0x17000065 RID: 101 // (get) Token: 0x060001E6 RID: 486 RVA: 0x0000AF08 File Offset: 0x00009F08 // (set) Token: 0x060001E7 RID: 487 RVA: 0x0000AF10 File Offset: 0x00009F10 public int GroupId { get { return this.groupId; } set { this.groupId = value; } } // Token: 0x17000066 RID: 102 // (get) Token: 0x060001E8 RID: 488 RVA: 0x0000AF19 File Offset: 0x00009F19 // (set) Token: 0x060001E9 RID: 489 RVA: 0x0000AF21 File Offset: 0x00009F21 public long Size { get { return this.size; } set { if (value < 0L) { throw new ArgumentOutOfRangeException("value", "Cannot be less than zero"); } this.size = value; } } // Token: 0x17000067 RID: 103 // (get) Token: 0x060001EA RID: 490 RVA: 0x0000AF3F File Offset: 0x00009F3F // (set) Token: 0x060001EB RID: 491 RVA: 0x0000AF48 File Offset: 0x00009F48 public DateTime ModTime { get { return this.modTime; } set { if (value < TarHeader.dateTime1970) { throw new ArgumentOutOfRangeException("value", "ModTime cannot be before Jan 1st 1970"); } this.modTime = new DateTime(value.Year, value.Month, value.Day, value.Hour, value.Minute, value.Second); } } // Token: 0x17000068 RID: 104 // (get) Token: 0x060001EC RID: 492 RVA: 0x0000AFA7 File Offset: 0x00009FA7 public int Checksum { get { return this.checksum; } } // Token: 0x17000069 RID: 105 // (get) Token: 0x060001ED RID: 493 RVA: 0x0000AFAF File Offset: 0x00009FAF public bool IsChecksumValid { get { return this.isChecksumValid; } } // Token: 0x1700006A RID: 106 // (get) Token: 0x060001EE RID: 494 RVA: 0x0000AFB7 File Offset: 0x00009FB7 // (set) Token: 0x060001EF RID: 495 RVA: 0x0000AFBF File Offset: 0x00009FBF public byte TypeFlag { get { return this.typeFlag; } set { this.typeFlag = value; } } // Token: 0x1700006B RID: 107 // (get) Token: 0x060001F0 RID: 496 RVA: 0x0000AFC8 File Offset: 0x00009FC8 // (set) Token: 0x060001F1 RID: 497 RVA: 0x0000AFD0 File Offset: 0x00009FD0 public string LinkName { get { return this.linkName; } set { if (value == null) { throw new ArgumentNullException("value"); } this.linkName = value; } } // Token: 0x1700006C RID: 108 // (get) Token: 0x060001F2 RID: 498 RVA: 0x0000AFE7 File Offset: 0x00009FE7 // (set) Token: 0x060001F3 RID: 499 RVA: 0x0000AFEF File Offset: 0x00009FEF public string Magic { get { return this.magic; } set { if (value == null) { throw new ArgumentNullException("value"); } this.magic = value; } } // Token: 0x1700006D RID: 109 // (get) Token: 0x060001F4 RID: 500 RVA: 0x0000B006 File Offset: 0x0000A006 // (set) Token: 0x060001F5 RID: 501 RVA: 0x0000B00E File Offset: 0x0000A00E public string Version { get { return this.version; } set { if (value == null) { throw new ArgumentNullException("value"); } this.version = value; } } // Token: 0x1700006E RID: 110 // (get) Token: 0x060001F6 RID: 502 RVA: 0x0000B025 File Offset: 0x0000A025 // (set) Token: 0x060001F7 RID: 503 RVA: 0x0000B030 File Offset: 0x0000A030 public string UserName { get { return this.userName; } set { if (value != null) { this.userName = value.Substring(0, Math.Min(32, value.Length)); return; } string text = Environment.UserName; if (text.Length > 32) { text = text.Substring(0, 32); } this.userName = text; } } // Token: 0x1700006F RID: 111 // (get) Token: 0x060001F8 RID: 504 RVA: 0x0000B07C File Offset: 0x0000A07C // (set) Token: 0x060001F9 RID: 505 RVA: 0x0000B084 File Offset: 0x0000A084 public string GroupName { get { return this.groupName; } set { if (value == null) { this.groupName = "None"; return; } this.groupName = value; } } // Token: 0x17000070 RID: 112 // (get) Token: 0x060001FA RID: 506 RVA: 0x0000B09C File Offset: 0x0000A09C // (set) Token: 0x060001FB RID: 507 RVA: 0x0000B0A4 File Offset: 0x0000A0A4 public int DevMajor { get { return this.devMajor; } set { this.devMajor = value; } } // Token: 0x17000071 RID: 113 // (get) Token: 0x060001FC RID: 508 RVA: 0x0000B0AD File Offset: 0x0000A0AD // (set) Token: 0x060001FD RID: 509 RVA: 0x0000B0B5 File Offset: 0x0000A0B5 public int DevMinor { get { return this.devMinor; } set { this.devMinor = value; } } // Token: 0x060001FE RID: 510 RVA: 0x0000B0BE File Offset: 0x0000A0BE public object Clone() { return base.MemberwiseClone(); } // Token: 0x060001FF RID: 511 RVA: 0x0000B0C8 File Offset: 0x0000A0C8 public void ParseBuffer(byte[] header) { if (header == null) { throw new ArgumentNullException("header"); } int num = 0; this.name = TarHeader.ParseName(header, num, 100).ToString(); num += 100; this.mode = (int)TarHeader.ParseOctal(header, num, 8); num += 8; this.UserId = (int)TarHeader.ParseOctal(header, num, 8); num += 8; this.GroupId = (int)TarHeader.ParseOctal(header, num, 8); num += 8; this.Size = TarHeader.ParseOctal(header, num, 12); num += 12; this.ModTime = TarHeader.GetDateTimeFromCTime(TarHeader.ParseOctal(header, num, 12)); num += 12; this.checksum = (int)TarHeader.ParseOctal(header, num, 8); num += 8; this.TypeFlag = header[num++]; this.LinkName = TarHeader.ParseName(header, num, 100).ToString(); num += 100; this.Magic = TarHeader.ParseName(header, num, 6).ToString(); num += 6; this.Version = TarHeader.ParseName(header, num, 2).ToString(); num += 2; this.UserName = TarHeader.ParseName(header, num, 32).ToString(); num += 32; this.GroupName = TarHeader.ParseName(header, num, 32).ToString(); num += 32; this.DevMajor = (int)TarHeader.ParseOctal(header, num, 8); num += 8; this.DevMinor = (int)TarHeader.ParseOctal(header, num, 8); this.isChecksumValid = this.Checksum == TarHeader.MakeCheckSum(header); } // Token: 0x06000200 RID: 512 RVA: 0x0000B234 File Offset: 0x0000A234 public void WriteHeader(byte[] outBuffer) { if (outBuffer == null) { throw new ArgumentNullException("outBuffer"); } int i = 0; i = TarHeader.GetNameBytes(this.Name, outBuffer, i, 100); i = TarHeader.GetOctalBytes((long)this.mode, outBuffer, i, 8); i = TarHeader.GetOctalBytes((long)this.UserId, outBuffer, i, 8); i = TarHeader.GetOctalBytes((long)this.GroupId, outBuffer, i, 8); i = TarHeader.GetLongOctalBytes(this.Size, outBuffer, i, 12); i = TarHeader.GetLongOctalBytes((long)TarHeader.GetCTime(this.ModTime), outBuffer, i, 12); int num = i; for (int j = 0; j < 8; j++) { outBuffer[i++] = 32; } outBuffer[i++] = this.TypeFlag; i = TarHeader.GetNameBytes(this.LinkName, outBuffer, i, 100); i = TarHeader.GetAsciiBytes(this.Magic, 0, outBuffer, i, 6); i = TarHeader.GetNameBytes(this.Version, outBuffer, i, 2); i = TarHeader.GetNameBytes(this.UserName, outBuffer, i, 32); i = TarHeader.GetNameBytes(this.GroupName, outBuffer, i, 32); if (this.TypeFlag == 51 || this.TypeFlag == 52) { i = TarHeader.GetOctalBytes((long)this.DevMajor, outBuffer, i, 8); i = TarHeader.GetOctalBytes((long)this.DevMinor, outBuffer, i, 8); } while (i < outBuffer.Length) { outBuffer[i++] = 0; } this.checksum = TarHeader.ComputeCheckSum(outBuffer); TarHeader.GetCheckSumOctalBytes((long)this.checksum, outBuffer, num, 8); this.isChecksumValid = true; } // Token: 0x06000201 RID: 513 RVA: 0x0000B391 File Offset: 0x0000A391 public override int GetHashCode() { return this.Name.GetHashCode(); } // Token: 0x06000202 RID: 514 RVA: 0x0000B3A0 File Offset: 0x0000A3A0 public override bool Equals(object obj) { TarHeader tarHeader = obj as TarHeader; return tarHeader != null && (this.name == tarHeader.name && this.mode == tarHeader.mode && this.UserId == tarHeader.UserId && this.GroupId == tarHeader.GroupId && this.Size == tarHeader.Size && this.ModTime == tarHeader.ModTime && this.Checksum == tarHeader.Checksum && this.TypeFlag == tarHeader.TypeFlag && this.LinkName == tarHeader.LinkName && this.Magic == tarHeader.Magic && this.Version == tarHeader.Version && this.UserName == tarHeader.UserName && this.GroupName == tarHeader.GroupName && this.DevMajor == tarHeader.DevMajor) && this.DevMinor == tarHeader.DevMinor; } // Token: 0x06000203 RID: 515 RVA: 0x0000B4CD File Offset: 0x0000A4CD internal static void SetValueDefaults(int userId, string userName, int groupId, string groupName) { TarHeader.userIdAsSet = userId; TarHeader.defaultUserId = userId; TarHeader.userNameAsSet = userName; TarHeader.defaultUser = userName; TarHeader.groupIdAsSet = groupId; TarHeader.defaultGroupId = groupId; TarHeader.groupNameAsSet = groupName; TarHeader.defaultGroupName = groupName; } // Token: 0x06000204 RID: 516 RVA: 0x0000B4FF File Offset: 0x0000A4FF internal static void RestoreSetValues() { TarHeader.defaultUserId = TarHeader.userIdAsSet; TarHeader.defaultUser = TarHeader.userNameAsSet; TarHeader.defaultGroupId = TarHeader.groupIdAsSet; TarHeader.defaultGroupName = TarHeader.groupNameAsSet; } // Token: 0x06000205 RID: 517 RVA: 0x0000B52C File Offset: 0x0000A52C public static long ParseOctal(byte[] header, int offset, int length) { if (header == null) { throw new ArgumentNullException("header"); } long num = 0L; bool flag = true; int num2 = offset + length; int num3 = offset; while (num3 < num2 && header[num3] != 0) { if (header[num3] != 32 && header[num3] != 48) { goto IL_38; } if (!flag) { if (header[num3] != 32) { goto IL_38; } break; } IL_46: num3++; continue; IL_38: flag = false; num = (num << 3) + (long)(header[num3] - 48); goto IL_46; } return num; } // Token: 0x06000206 RID: 518 RVA: 0x0000B588 File Offset: 0x0000A588 public static StringBuilder ParseName(byte[] header, int offset, int length) { if (header == null) { throw new ArgumentNullException("header"); } if (offset < 0) { throw new ArgumentOutOfRangeException("offset", "Cannot be less than zero"); } if (length < 0) { throw new ArgumentOutOfRangeException("length", "Cannot be less than zero"); } if (offset + length > header.Length) { throw new ArgumentException("Exceeds header size", "length"); } StringBuilder stringBuilder = new StringBuilder(length); int num = offset; while (num < offset + length && header[num] != 0) { stringBuilder.Append((char)header[num]); num++; } return stringBuilder; } // Token: 0x06000207 RID: 519 RVA: 0x0000B608 File Offset: 0x0000A608 public static int GetNameBytes(StringBuilder name, int nameOffset, byte[] buffer, int bufferOffset, int length) { if (name == null) { throw new ArgumentNullException("name"); } if (buffer == null) { throw new ArgumentNullException("buffer"); } return TarHeader.GetNameBytes(name.ToString(), nameOffset, buffer, bufferOffset, length); } // Token: 0x06000208 RID: 520 RVA: 0x0000B638 File Offset: 0x0000A638 public static int GetNameBytes(string name, int nameOffset, byte[] buffer, int bufferOffset, int length) { if (name == null) { throw new ArgumentNullException("name"); } if (buffer == null) { throw new ArgumentNullException("buffer"); } int i; for (i = 0; i < length - 1; i++) { if (nameOffset + i >= name.Length) { break; } buffer[bufferOffset + i] = (byte)name[nameOffset + i]; } while (i < length) { buffer[bufferOffset + i] = 0; i++; } return bufferOffset + length; } // Token: 0x06000209 RID: 521 RVA: 0x0000B69F File Offset: 0x0000A69F public static int GetNameBytes(StringBuilder name, byte[] buffer, int offset, int length) { if (name == null) { throw new ArgumentNullException("name"); } if (buffer == null) { throw new ArgumentNullException("buffer"); } return TarHeader.GetNameBytes(name.ToString(), 0, buffer, offset, length); } // Token: 0x0600020A RID: 522 RVA: 0x0000B6CC File Offset: 0x0000A6CC public static int GetNameBytes(string name, byte[] buffer, int offset, int length) { if (name == null) { throw new ArgumentNullException("name"); } if (buffer == null) { throw new ArgumentNullException("buffer"); } return TarHeader.GetNameBytes(name, 0, buffer, offset, length); } // Token: 0x0600020B RID: 523 RVA: 0x0000B6F4 File Offset: 0x0000A6F4 public static int GetAsciiBytes(string toAdd, int nameOffset, byte[] buffer, int bufferOffset, int length) { if (toAdd == null) { throw new ArgumentNullException("toAdd"); } if (buffer == null) { throw new ArgumentNullException("buffer"); } int num = 0; while (num < length && nameOffset + num < toAdd.Length) { buffer[bufferOffset + num] = (byte)toAdd[nameOffset + num]; num++; } return bufferOffset + length; } // Token: 0x0600020C RID: 524 RVA: 0x0000B748 File Offset: 0x0000A748 public static int GetOctalBytes(long value, byte[] buffer, int offset, int length) { if (buffer == null) { throw new ArgumentNullException("buffer"); } int i = length - 1; buffer[offset + i] = 0; i--; if (value > 0L) { long num = value; while (i >= 0) { if (num <= 0L) { break; } buffer[offset + i] = 48 + (byte)(num & 7L); num >>= 3; i--; } } while (i >= 0) { buffer[offset + i] = 48; i--; } return offset + length; } // Token: 0x0600020D RID: 525 RVA: 0x0000B7AD File Offset: 0x0000A7AD public static int GetLongOctalBytes(long value, byte[] buffer, int offset, int length) { return TarHeader.GetOctalBytes(value, buffer, offset, length); } // Token: 0x0600020E RID: 526 RVA: 0x0000B7B8 File Offset: 0x0000A7B8 private static int GetCheckSumOctalBytes(long value, byte[] buffer, int offset, int length) { TarHeader.GetOctalBytes(value, buffer, offset, length - 1); return offset + length; } // Token: 0x0600020F RID: 527 RVA: 0x0000B7CC File Offset: 0x0000A7CC private static int ComputeCheckSum(byte[] buffer) { int num = 0; for (int i = 0; i < buffer.Length; i++) { num += (int)buffer[i]; } return num; } // Token: 0x06000210 RID: 528 RVA: 0x0000B7F0 File Offset: 0x0000A7F0 private static int MakeCheckSum(byte[] buffer) { int num = 0; for (int i = 0; i < 148; i++) { num += (int)buffer[i]; } for (int j = 0; j < 8; j++) { num += 32; } for (int k = 156; k < buffer.Length; k++) { num += (int)buffer[k]; } return num; } // Token: 0x06000211 RID: 529 RVA: 0x0000B840 File Offset: 0x0000A840 private static int GetCTime(DateTime dateTime) { return (int)((dateTime.Ticks - TarHeader.dateTime1970.Ticks) / 10000000L); } // Token: 0x06000212 RID: 530 RVA: 0x0000B86C File Offset: 0x0000A86C private static DateTime GetDateTimeFromCTime(long ticks) { DateTime dateTime; try { dateTime = new DateTime(TarHeader.dateTime1970.Ticks + ticks * 10000000L); } catch (ArgumentOutOfRangeException) { dateTime = TarHeader.dateTime1970; } return dateTime; } // Token: 0x040000FA RID: 250 public const int NAMELEN = 100; // Token: 0x040000FB RID: 251 public const int MODELEN = 8; // Token: 0x040000FC RID: 252 public const int UIDLEN = 8; // Token: 0x040000FD RID: 253 public const int GIDLEN = 8; // Token: 0x040000FE RID: 254 public const int CHKSUMLEN = 8; // Token: 0x040000FF RID: 255 public const int CHKSUMOFS = 148; // Token: 0x04000100 RID: 256 public const int SIZELEN = 12; // Token: 0x04000101 RID: 257 public const int MAGICLEN = 6; // Token: 0x04000102 RID: 258 public const int VERSIONLEN = 2; // Token: 0x04000103 RID: 259 public const int MODTIMELEN = 12; // Token: 0x04000104 RID: 260 public const int UNAMELEN = 32; // Token: 0x04000105 RID: 261 public const int GNAMELEN = 32; // Token: 0x04000106 RID: 262 public const int DEVLEN = 8; // Token: 0x04000107 RID: 263 public const byte LF_OLDNORM = 0; // Token: 0x04000108 RID: 264 public const byte LF_NORMAL = 48; // Token: 0x04000109 RID: 265 public const byte LF_LINK = 49; // Token: 0x0400010A RID: 266 public const byte LF_SYMLINK = 50; // Token: 0x0400010B RID: 267 public const byte LF_CHR = 51; // Token: 0x0400010C RID: 268 public const byte LF_BLK = 52; // Token: 0x0400010D RID: 269 public const byte LF_DIR = 53; // Token: 0x0400010E RID: 270 public const byte LF_FIFO = 54; // Token: 0x0400010F RID: 271 public const byte LF_CONTIG = 55; // Token: 0x04000110 RID: 272 public const byte LF_GHDR = 103; // Token: 0x04000111 RID: 273 public const byte LF_XHDR = 120; // Token: 0x04000112 RID: 274 public const byte LF_ACL = 65; // Token: 0x04000113 RID: 275 public const byte LF_GNU_DUMPDIR = 68; // Token: 0x04000114 RID: 276 public const byte LF_EXTATTR = 69; // Token: 0x04000115 RID: 277 public const byte LF_META = 73; // Token: 0x04000116 RID: 278 public const byte LF_GNU_LONGLINK = 75; // Token: 0x04000117 RID: 279 public const byte LF_GNU_LONGNAME = 76; // Token: 0x04000118 RID: 280 public const byte LF_GNU_MULTIVOL = 77; // Token: 0x04000119 RID: 281 public const byte LF_GNU_NAMES = 78; // Token: 0x0400011A RID: 282 public const byte LF_GNU_SPARSE = 83; // Token: 0x0400011B RID: 283 public const byte LF_GNU_VOLHDR = 86; // Token: 0x0400011C RID: 284 public const string TMAGIC = "ustar "; // Token: 0x0400011D RID: 285 public const string GNU_TMAGIC = "ustar "; // Token: 0x0400011E RID: 286 private const long timeConversionFactor = 10000000L; // Token: 0x0400011F RID: 287 private static readonly DateTime dateTime1970 = new DateTime(1970, 1, 1, 0, 0, 0, 0); // Token: 0x04000120 RID: 288 private string name; // Token: 0x04000121 RID: 289 private int mode; // Token: 0x04000122 RID: 290 private int userId; // Token: 0x04000123 RID: 291 private int groupId; // Token: 0x04000124 RID: 292 private long size; // Token: 0x04000125 RID: 293 private DateTime modTime; // Token: 0x04000126 RID: 294 private int checksum; // Token: 0x04000127 RID: 295 private bool isChecksumValid; // Token: 0x04000128 RID: 296 private byte typeFlag; // Token: 0x04000129 RID: 297 private string linkName; // Token: 0x0400012A RID: 298 private string magic; // Token: 0x0400012B RID: 299 private string version; // Token: 0x0400012C RID: 300 private string userName; // Token: 0x0400012D RID: 301 private string groupName; // Token: 0x0400012E RID: 302 private int devMajor; // Token: 0x0400012F RID: 303 private int devMinor; // Token: 0x04000130 RID: 304 internal static int userIdAsSet; // Token: 0x04000131 RID: 305 internal static int groupIdAsSet; // Token: 0x04000132 RID: 306 internal static string userNameAsSet; // Token: 0x04000133 RID: 307 internal static string groupNameAsSet = "None"; // Token: 0x04000134 RID: 308 internal static int defaultUserId; // Token: 0x04000135 RID: 309 internal static int defaultGroupId; // Token: 0x04000136 RID: 310 internal static string defaultGroupName = "None"; // Token: 0x04000137 RID: 311 internal static string defaultUser; } }