341 lines
8.1 KiB
C#
341 lines
8.1 KiB
C#
using System;
|
|
using System.IO;
|
|
|
|
namespace ICSharpCode.SharpZipLib.Tar
|
|
{
|
|
// Token: 0x02000036 RID: 54
|
|
public class TarEntry : ICloneable
|
|
{
|
|
// Token: 0x060001BD RID: 445 RVA: 0x0000A960 File Offset: 0x00009960
|
|
private TarEntry()
|
|
{
|
|
this.header = new TarHeader();
|
|
}
|
|
|
|
// Token: 0x060001BE RID: 446 RVA: 0x0000A973 File Offset: 0x00009973
|
|
public TarEntry(byte[] headerBuffer)
|
|
{
|
|
this.header = new TarHeader();
|
|
this.header.ParseBuffer(headerBuffer);
|
|
}
|
|
|
|
// Token: 0x060001BF RID: 447 RVA: 0x0000A992 File Offset: 0x00009992
|
|
public TarEntry(TarHeader header)
|
|
{
|
|
if (header == null)
|
|
{
|
|
throw new ArgumentNullException("header");
|
|
}
|
|
this.header = (TarHeader)header.Clone();
|
|
}
|
|
|
|
// Token: 0x060001C0 RID: 448 RVA: 0x0000A9BC File Offset: 0x000099BC
|
|
public object Clone()
|
|
{
|
|
return new TarEntry
|
|
{
|
|
file = this.file,
|
|
header = (TarHeader)this.header.Clone(),
|
|
Name = this.Name
|
|
};
|
|
}
|
|
|
|
// Token: 0x060001C1 RID: 449 RVA: 0x0000AA00 File Offset: 0x00009A00
|
|
public static TarEntry CreateTarEntry(string name)
|
|
{
|
|
TarEntry tarEntry = new TarEntry();
|
|
TarEntry.NameTarHeader(tarEntry.header, name);
|
|
return tarEntry;
|
|
}
|
|
|
|
// Token: 0x060001C2 RID: 450 RVA: 0x0000AA20 File Offset: 0x00009A20
|
|
public static TarEntry CreateEntryFromFile(string fileName)
|
|
{
|
|
TarEntry tarEntry = new TarEntry();
|
|
tarEntry.GetFileTarHeader(tarEntry.header, fileName);
|
|
return tarEntry;
|
|
}
|
|
|
|
// Token: 0x060001C3 RID: 451 RVA: 0x0000AA44 File Offset: 0x00009A44
|
|
public override bool Equals(object obj)
|
|
{
|
|
TarEntry tarEntry = obj as TarEntry;
|
|
return tarEntry != null && this.Name.Equals(tarEntry.Name);
|
|
}
|
|
|
|
// Token: 0x060001C4 RID: 452 RVA: 0x0000AA6E File Offset: 0x00009A6E
|
|
public override int GetHashCode()
|
|
{
|
|
return this.Name.GetHashCode();
|
|
}
|
|
|
|
// Token: 0x060001C5 RID: 453 RVA: 0x0000AA7B File Offset: 0x00009A7B
|
|
public bool IsDescendent(TarEntry toTest)
|
|
{
|
|
if (toTest == null)
|
|
{
|
|
throw new ArgumentNullException("toTest");
|
|
}
|
|
return toTest.Name.StartsWith(this.Name);
|
|
}
|
|
|
|
// Token: 0x17000058 RID: 88
|
|
// (get) Token: 0x060001C6 RID: 454 RVA: 0x0000AA9C File Offset: 0x00009A9C
|
|
public TarHeader TarHeader
|
|
{
|
|
get
|
|
{
|
|
return this.header;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000059 RID: 89
|
|
// (get) Token: 0x060001C7 RID: 455 RVA: 0x0000AAA4 File Offset: 0x00009AA4
|
|
// (set) Token: 0x060001C8 RID: 456 RVA: 0x0000AAB1 File Offset: 0x00009AB1
|
|
public string Name
|
|
{
|
|
get
|
|
{
|
|
return this.header.Name;
|
|
}
|
|
set
|
|
{
|
|
this.header.Name = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x1700005A RID: 90
|
|
// (get) Token: 0x060001C9 RID: 457 RVA: 0x0000AABF File Offset: 0x00009ABF
|
|
// (set) Token: 0x060001CA RID: 458 RVA: 0x0000AACC File Offset: 0x00009ACC
|
|
public int UserId
|
|
{
|
|
get
|
|
{
|
|
return this.header.UserId;
|
|
}
|
|
set
|
|
{
|
|
this.header.UserId = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x1700005B RID: 91
|
|
// (get) Token: 0x060001CB RID: 459 RVA: 0x0000AADA File Offset: 0x00009ADA
|
|
// (set) Token: 0x060001CC RID: 460 RVA: 0x0000AAE7 File Offset: 0x00009AE7
|
|
public int GroupId
|
|
{
|
|
get
|
|
{
|
|
return this.header.GroupId;
|
|
}
|
|
set
|
|
{
|
|
this.header.GroupId = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x1700005C RID: 92
|
|
// (get) Token: 0x060001CD RID: 461 RVA: 0x0000AAF5 File Offset: 0x00009AF5
|
|
// (set) Token: 0x060001CE RID: 462 RVA: 0x0000AB02 File Offset: 0x00009B02
|
|
public string UserName
|
|
{
|
|
get
|
|
{
|
|
return this.header.UserName;
|
|
}
|
|
set
|
|
{
|
|
this.header.UserName = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x1700005D RID: 93
|
|
// (get) Token: 0x060001CF RID: 463 RVA: 0x0000AB10 File Offset: 0x00009B10
|
|
// (set) Token: 0x060001D0 RID: 464 RVA: 0x0000AB1D File Offset: 0x00009B1D
|
|
public string GroupName
|
|
{
|
|
get
|
|
{
|
|
return this.header.GroupName;
|
|
}
|
|
set
|
|
{
|
|
this.header.GroupName = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x060001D1 RID: 465 RVA: 0x0000AB2B File Offset: 0x00009B2B
|
|
public void SetIds(int userId, int groupId)
|
|
{
|
|
this.UserId = userId;
|
|
this.GroupId = groupId;
|
|
}
|
|
|
|
// Token: 0x060001D2 RID: 466 RVA: 0x0000AB3B File Offset: 0x00009B3B
|
|
public void SetNames(string userName, string groupName)
|
|
{
|
|
this.UserName = userName;
|
|
this.GroupName = groupName;
|
|
}
|
|
|
|
// Token: 0x1700005E RID: 94
|
|
// (get) Token: 0x060001D3 RID: 467 RVA: 0x0000AB4B File Offset: 0x00009B4B
|
|
// (set) Token: 0x060001D4 RID: 468 RVA: 0x0000AB58 File Offset: 0x00009B58
|
|
public DateTime ModTime
|
|
{
|
|
get
|
|
{
|
|
return this.header.ModTime;
|
|
}
|
|
set
|
|
{
|
|
this.header.ModTime = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x1700005F RID: 95
|
|
// (get) Token: 0x060001D5 RID: 469 RVA: 0x0000AB66 File Offset: 0x00009B66
|
|
public string File
|
|
{
|
|
get
|
|
{
|
|
return this.file;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000060 RID: 96
|
|
// (get) Token: 0x060001D6 RID: 470 RVA: 0x0000AB6E File Offset: 0x00009B6E
|
|
// (set) Token: 0x060001D7 RID: 471 RVA: 0x0000AB7B File Offset: 0x00009B7B
|
|
public long Size
|
|
{
|
|
get
|
|
{
|
|
return this.header.Size;
|
|
}
|
|
set
|
|
{
|
|
this.header.Size = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000061 RID: 97
|
|
// (get) Token: 0x060001D8 RID: 472 RVA: 0x0000AB8C File Offset: 0x00009B8C
|
|
public bool IsDirectory
|
|
{
|
|
get
|
|
{
|
|
if (this.file != null)
|
|
{
|
|
return Directory.Exists(this.file);
|
|
}
|
|
return this.header != null && (this.header.TypeFlag == 53 || this.Name.EndsWith("/"));
|
|
}
|
|
}
|
|
|
|
// Token: 0x060001D9 RID: 473 RVA: 0x0000ABDC File Offset: 0x00009BDC
|
|
public void GetFileTarHeader(TarHeader header, string file)
|
|
{
|
|
if (header == null)
|
|
{
|
|
throw new ArgumentNullException("header");
|
|
}
|
|
if (file == null)
|
|
{
|
|
throw new ArgumentNullException("file");
|
|
}
|
|
this.file = file;
|
|
string text = file;
|
|
if (text.IndexOf(Environment.CurrentDirectory) == 0)
|
|
{
|
|
text = text.Substring(Environment.CurrentDirectory.Length);
|
|
}
|
|
text = text.Replace(Path.DirectorySeparatorChar, '/');
|
|
while (text.StartsWith("/"))
|
|
{
|
|
text = text.Substring(1);
|
|
}
|
|
header.LinkName = string.Empty;
|
|
header.Name = text;
|
|
if (Directory.Exists(file))
|
|
{
|
|
header.Mode = 1003;
|
|
header.TypeFlag = 53;
|
|
if (header.Name.Length == 0 || header.Name[header.Name.Length - 1] != '/')
|
|
{
|
|
header.Name += "/";
|
|
}
|
|
header.Size = 0L;
|
|
}
|
|
else
|
|
{
|
|
header.Mode = 33216;
|
|
header.TypeFlag = 48;
|
|
header.Size = new FileInfo(file.Replace('/', Path.DirectorySeparatorChar)).Length;
|
|
}
|
|
header.ModTime = global::System.IO.File.GetLastWriteTime(file.Replace('/', Path.DirectorySeparatorChar)).ToUniversalTime();
|
|
header.DevMajor = 0;
|
|
header.DevMinor = 0;
|
|
}
|
|
|
|
// Token: 0x060001DA RID: 474 RVA: 0x0000AD28 File Offset: 0x00009D28
|
|
public TarEntry[] GetDirectoryEntries()
|
|
{
|
|
if (this.file == null || !Directory.Exists(this.file))
|
|
{
|
|
return new TarEntry[0];
|
|
}
|
|
string[] fileSystemEntries = Directory.GetFileSystemEntries(this.file);
|
|
TarEntry[] array = new TarEntry[fileSystemEntries.Length];
|
|
for (int i = 0; i < fileSystemEntries.Length; i++)
|
|
{
|
|
array[i] = TarEntry.CreateEntryFromFile(fileSystemEntries[i]);
|
|
}
|
|
return array;
|
|
}
|
|
|
|
// Token: 0x060001DB RID: 475 RVA: 0x0000AD80 File Offset: 0x00009D80
|
|
public void WriteEntryHeader(byte[] outBuffer)
|
|
{
|
|
this.header.WriteHeader(outBuffer);
|
|
}
|
|
|
|
// Token: 0x060001DC RID: 476 RVA: 0x0000AD8E File Offset: 0x00009D8E
|
|
public static void AdjustEntryName(byte[] buffer, string newName)
|
|
{
|
|
TarHeader.GetNameBytes(newName, buffer, 0, 100);
|
|
}
|
|
|
|
// Token: 0x060001DD RID: 477 RVA: 0x0000AD9C File Offset: 0x00009D9C
|
|
public static void NameTarHeader(TarHeader header, string name)
|
|
{
|
|
if (header == null)
|
|
{
|
|
throw new ArgumentNullException("header");
|
|
}
|
|
if (name == null)
|
|
{
|
|
throw new ArgumentNullException("name");
|
|
}
|
|
bool flag = name.EndsWith("/");
|
|
header.Name = name;
|
|
header.Mode = (flag ? 1003 : 33216);
|
|
header.UserId = 0;
|
|
header.GroupId = 0;
|
|
header.Size = 0L;
|
|
header.ModTime = DateTime.UtcNow;
|
|
header.TypeFlag = (flag ? 53 : 48);
|
|
header.LinkName = string.Empty;
|
|
header.UserName = string.Empty;
|
|
header.GroupName = string.Empty;
|
|
header.DevMajor = 0;
|
|
header.DevMinor = 0;
|
|
}
|
|
|
|
// Token: 0x040000F8 RID: 248
|
|
private string file;
|
|
|
|
// Token: 0x040000F9 RID: 249
|
|
private TarHeader header;
|
|
}
|
|
}
|