Files
2026-06-04 11:42:34 +02:00

207 lines
5.1 KiB
C#

using System;
using System.IO;
using System.Text;
using ICSharpCode.SharpZipLib.Core;
namespace ICSharpCode.SharpZipLib.Zip
{
// Token: 0x0200004F RID: 79
public class WindowsNameTransform : INameTransform
{
// Token: 0x06000317 RID: 791 RVA: 0x000111C6 File Offset: 0x000101C6
public WindowsNameTransform(string baseDirectory)
{
if (baseDirectory == null)
{
throw new ArgumentNullException("baseDirectory", "Directory name is invalid");
}
this.BaseDirectory = baseDirectory;
}
// Token: 0x06000318 RID: 792 RVA: 0x000111F0 File Offset: 0x000101F0
public WindowsNameTransform()
{
}
// Token: 0x170000A6 RID: 166
// (get) Token: 0x06000319 RID: 793 RVA: 0x00011200 File Offset: 0x00010200
// (set) Token: 0x0600031A RID: 794 RVA: 0x00011208 File Offset: 0x00010208
public string BaseDirectory
{
get
{
return this._baseDirectory;
}
set
{
if (value == null)
{
throw new ArgumentNullException("value");
}
this._baseDirectory = Path.GetFullPath(value);
}
}
// Token: 0x170000A7 RID: 167
// (get) Token: 0x0600031B RID: 795 RVA: 0x00011224 File Offset: 0x00010224
// (set) Token: 0x0600031C RID: 796 RVA: 0x0001122C File Offset: 0x0001022C
public bool TrimIncomingPaths
{
get
{
return this._trimIncomingPaths;
}
set
{
this._trimIncomingPaths = value;
}
}
// Token: 0x0600031D RID: 797 RVA: 0x00011238 File Offset: 0x00010238
public string TransformDirectory(string name)
{
name = this.TransformFile(name);
if (name.Length > 0)
{
while (name.EndsWith("\\"))
{
name = name.Remove(name.Length - 1, 1);
}
return name;
}
throw new ZipException("Cannot have an empty directory name");
}
// Token: 0x0600031E RID: 798 RVA: 0x00011288 File Offset: 0x00010288
public string TransformFile(string name)
{
if (name != null)
{
name = WindowsNameTransform.MakeValidName(name, this._replacementChar);
if (this._trimIncomingPaths)
{
name = Path.GetFileName(name);
}
if (this._baseDirectory != null)
{
name = Path.Combine(this._baseDirectory, name);
}
}
else
{
name = string.Empty;
}
return name;
}
// Token: 0x0600031F RID: 799 RVA: 0x000112D8 File Offset: 0x000102D8
public static bool IsValidName(string name)
{
return name != null && name.Length <= 260 && string.Compare(name, WindowsNameTransform.MakeValidName(name, '_')) == 0;
}
// Token: 0x06000320 RID: 800 RVA: 0x0001130C File Offset: 0x0001030C
static WindowsNameTransform()
{
char[] invalidPathChars = Path.GetInvalidPathChars();
int num = invalidPathChars.Length + 3;
WindowsNameTransform.InvalidEntryChars = new char[num];
Array.Copy(invalidPathChars, 0, WindowsNameTransform.InvalidEntryChars, 0, invalidPathChars.Length);
WindowsNameTransform.InvalidEntryChars[num - 1] = '*';
WindowsNameTransform.InvalidEntryChars[num - 2] = '?';
WindowsNameTransform.InvalidEntryChars[num - 3] = ':';
}
// Token: 0x06000321 RID: 801 RVA: 0x00011364 File Offset: 0x00010364
public static string MakeValidName(string name, char replacement)
{
if (name == null)
{
throw new ArgumentNullException("name");
}
name = WindowsPathUtils.DropPathRoot(name.Replace("/", "\\"));
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);
}
int i;
for (i = name.IndexOf("\\\\"); i >= 0; i = name.IndexOf("\\\\"))
{
name = name.Remove(i, 1);
}
i = name.IndexOfAny(WindowsNameTransform.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(WindowsNameTransform.InvalidEntryChars, i + 1);
}
}
name = stringBuilder.ToString();
}
if (name.Length > 260)
{
throw new PathTooLongException();
}
return name;
}
// Token: 0x170000A8 RID: 168
// (get) Token: 0x06000322 RID: 802 RVA: 0x00011469 File Offset: 0x00010469
// (set) Token: 0x06000323 RID: 803 RVA: 0x00011474 File Offset: 0x00010474
public char Replacement
{
get
{
return this._replacementChar;
}
set
{
for (int i = 0; i < WindowsNameTransform.InvalidEntryChars.Length; i++)
{
if (WindowsNameTransform.InvalidEntryChars[i] == value)
{
throw new ArgumentException("invalid path character");
}
}
if (value == '\\' || value == '/')
{
throw new ArgumentException("invalid replacement character");
}
this._replacementChar = value;
}
}
// Token: 0x0400021E RID: 542
private const int MaxPath = 260;
// Token: 0x0400021F RID: 543
private string _baseDirectory;
// Token: 0x04000220 RID: 544
private bool _trimIncomingPaths;
// Token: 0x04000221 RID: 545
private char _replacementChar = '_';
// Token: 0x04000222 RID: 546
private static readonly char[] InvalidEntryChars;
}
}