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