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; } }