Files
Dec2017-Script-Dump/ICSharpCode.SharpZipLib/Zip/ZipNameTransform.cs
T
2026-06-04 11:42:34 +02:00

173 lines
4.5 KiB
C#

using System;
using System.IO;
using System.Text;
using ICSharpCode.SharpZipLib.Core;
namespace ICSharpCode.SharpZipLib.Zip
{
// Token: 0x0200007F RID: 127
public class ZipNameTransform : INameTransform
{
// Token: 0x060004E3 RID: 1251 RVA: 0x00017ED8 File Offset: 0x00016ED8
public ZipNameTransform()
{
}
// Token: 0x060004E4 RID: 1252 RVA: 0x00017EE0 File Offset: 0x00016EE0
public ZipNameTransform(string trimPrefix)
{
this.TrimPrefix = trimPrefix;
}
// Token: 0x060004E5 RID: 1253 RVA: 0x00017EF0 File Offset: 0x00016EF0
static ZipNameTransform()
{
char[] invalidPathChars = Path.GetInvalidPathChars();
int num = invalidPathChars.Length + 2;
ZipNameTransform.InvalidEntryCharsRelaxed = new char[num];
Array.Copy(invalidPathChars, 0, ZipNameTransform.InvalidEntryCharsRelaxed, 0, invalidPathChars.Length);
ZipNameTransform.InvalidEntryCharsRelaxed[num - 1] = '*';
ZipNameTransform.InvalidEntryCharsRelaxed[num - 2] = '?';
num = invalidPathChars.Length + 4;
ZipNameTransform.InvalidEntryChars = new char[num];
Array.Copy(invalidPathChars, 0, ZipNameTransform.InvalidEntryChars, 0, invalidPathChars.Length);
ZipNameTransform.InvalidEntryChars[num - 1] = ':';
ZipNameTransform.InvalidEntryChars[num - 2] = '\\';
ZipNameTransform.InvalidEntryChars[num - 3] = '*';
ZipNameTransform.InvalidEntryChars[num - 4] = '?';
}
// Token: 0x060004E6 RID: 1254 RVA: 0x00017F87 File Offset: 0x00016F87
public string TransformDirectory(string name)
{
name = this.TransformFile(name);
if (name.Length > 0)
{
if (!name.EndsWith("/"))
{
name += "/";
}
return name;
}
throw new ZipException("Cannot have an empty directory name");
}
// Token: 0x060004E7 RID: 1255 RVA: 0x00017FC4 File Offset: 0x00016FC4
public string TransformFile(string name)
{
if (name != null)
{
string text = name.ToLower();
if (this.trimPrefix_ != null && text.IndexOf(this.trimPrefix_) == 0)
{
name = name.Substring(this.trimPrefix_.Length);
}
name = name.Replace("\\", "/");
name = WindowsPathUtils.DropPathRoot(name);
while (name.Length > 0)
{
if (name[0] != '/')
{
break;
}
name = name.Remove(0, 1);
}
while (name.Length > 0 && name[name.Length - 1] == '/')
{
name = name.Remove(name.Length - 1, 1);
}
for (int i = name.IndexOf("//"); i >= 0; i = name.IndexOf("//"))
{
name = name.Remove(i, 1);
}
name = ZipNameTransform.MakeValidName(name, '_');
}
else
{
name = string.Empty;
}
return name;
}
// Token: 0x17000120 RID: 288
// (get) Token: 0x060004E8 RID: 1256 RVA: 0x000180AB File Offset: 0x000170AB
// (set) Token: 0x060004E9 RID: 1257 RVA: 0x000180B3 File Offset: 0x000170B3
public string TrimPrefix
{
get
{
return this.trimPrefix_;
}
set
{
this.trimPrefix_ = value;
if (this.trimPrefix_ != null)
{
this.trimPrefix_ = this.trimPrefix_.ToLower();
}
}
}
// Token: 0x060004EA RID: 1258 RVA: 0x000180D8 File Offset: 0x000170D8
private static string MakeValidName(string name, char replacement)
{
int i = name.IndexOfAny(ZipNameTransform.InvalidEntryChars);
if (i >= 0)
{
StringBuilder stringBuilder = new StringBuilder(name);
while (i >= 0)
{
stringBuilder[i] = replacement;
if (i >= name.Length)
{
i = -1;
}
else
{
i = name.IndexOfAny(ZipNameTransform.InvalidEntryChars, i + 1);
}
}
name = stringBuilder.ToString();
}
if (name.Length > 65535)
{
throw new PathTooLongException();
}
return name;
}
// Token: 0x060004EB RID: 1259 RVA: 0x00018144 File Offset: 0x00017144
public static bool IsValidName(string name, bool relaxed)
{
bool flag = name != null;
if (flag)
{
if (relaxed)
{
flag = name.IndexOfAny(ZipNameTransform.InvalidEntryCharsRelaxed) < 0;
}
else
{
flag = name.IndexOfAny(ZipNameTransform.InvalidEntryChars) < 0 && name.IndexOf('/') != 0;
}
}
return flag;
}
// Token: 0x060004EC RID: 1260 RVA: 0x00018194 File Offset: 0x00017194
public static bool IsValidName(string name)
{
return name != null && name.IndexOfAny(ZipNameTransform.InvalidEntryChars) < 0 && name.IndexOf('/') != 0;
}
// Token: 0x0400031D RID: 797
private string trimPrefix_;
// Token: 0x0400031E RID: 798
private static readonly char[] InvalidEntryChars;
// Token: 0x0400031F RID: 799
private static readonly char[] InvalidEntryCharsRelaxed;
}
}