This commit is contained in:
niko
2026-06-04 11:42:34 +02:00
parent f39ba70a9f
commit e720b98cd1
7488 changed files with 2493818 additions and 0 deletions
+855
View File
@@ -0,0 +1,855 @@
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;
}
}