// Token: 0x06000600 RID: 1536 RVA: 0x000265DC File Offset: 0x000247DC protected virtual void lmethod_1058(bool bool_0) { if (this.field_12) { return; } if (bool_0 && !this.field_13) { this.kmethod_1057(); this.field_15 = Class_173.WriteCentralDirectoryStructure(this.field_4, this.field_7.Values, 1U, this.field_6, this.prop_7, new Class_178(this)); Class_156 class_ = this.field_4 as Class_156; Stream stream; if (class_ != null) { stream = class_.prop_0; class_.Dispose(); } else { stream = this.field_4; } if (!this.field_11) { stream.Dispose(); } this.field_4 = null; } this.field_12 = true; }
// Token: 0x06000599 RID: 1433 RVA: 0x00025588 File Offset: 0x00023788 private static byte[] GenCentralDirectoryFooter(long StartOfCentralDirectory, long EndOfCentralDirectory, Class_169 zip64, int entryCount, string comment, Class_178 container) { Encoding encoding = Class_173.GetEncoding(container, comment); int num = 22; byte[] array = null; short num2 = 0; if (comment != null && comment.Length != 0) { array = encoding.GetBytes(comment); num2 = (short)array.Length; } num += (int)num2; byte[] array2 = new byte[num]; int num3 = 0; byte[] bytes = BitConverter.GetBytes(101010256U); Array.Copy(bytes, 0, array2, num3, 4); num3 += 4; array2[num3++] = 0; array2[num3++] = 0; array2[num3++] = 0; array2[num3++] = 0; if (entryCount >= 65535 || zip64 == Class_169.Always) { for (int i = 0; i < 4; i++) { array2[num3++] = byte.MaxValue; } } else { array2[num3++] = (byte)(entryCount & 255); array2[num3++] = (byte)((entryCount & 65280) >> 8); array2[num3++] = (byte)(entryCount & 255); array2[num3++] = (byte)((entryCount & 65280) >> 8); } long num4 = EndOfCentralDirectory - StartOfCentralDirectory; if (num4 >= (long)((ulong)-1) || StartOfCentralDirectory >= (long)((ulong)-1)) { for (int i = 0; i < 8; i++) { array2[num3++] = byte.MaxValue; } } else { array2[num3++] = (byte)(num4 & 255L); array2[num3++] = (byte)((num4 & 65280L) >> 8); array2[num3++] = (byte)((num4 & 16711680L) >> 16); array2[num3++] = (byte)((num4 & (long)((ulong)-16777216)) >> 24); array2[num3++] = (byte)(StartOfCentralDirectory & 255L); array2[num3++] = (byte)((StartOfCentralDirectory & 65280L) >> 8); array2[num3++] = (byte)((StartOfCentralDirectory & 16711680L) >> 16); array2[num3++] = (byte)((StartOfCentralDirectory & (long)((ulong)-16777216)) >> 24); } if (comment == null || comment.Length == 0) { array2[num3++] = 0; array2[num3++] = 0; } else { if ((int)num2 + num3 + 2 > array2.Length) { num2 = (short)(array2.Length - num3 - 2); } array2[num3++] = (byte)(num2 & 255); array2[num3++] = (byte)(((int)num2 & 65280) >> 8); if (num2 != 0) { int i = 0; while (i < (int)num2 && num3 + i < array2.Length) { array2[num3 + i] = array[i]; i++; } num3 += i; } } return(array2); }
// Token: 0x06000597 RID: 1431 RVA: 0x00025280 File Offset: 0x00023480 public static bool WriteCentralDirectoryStructure(Stream s, ICollection <Class_163> entries, uint numSegments, Class_169 zip64, string comment, Class_178 container) { Class_179 class_ = s as Class_179; if (class_ != null) { class_.prop_0 = true; } long num = 0L; using (MemoryStream memoryStream = new MemoryStream()) { foreach (Class_163 class_2 in entries) { if (class_2.prop_34) { class_2.lmethod_718(memoryStream); } } byte[] array = memoryStream.ToArray(); s.Write(array, 0, array.Length); num = (long)array.Length; } Class_156 class_3 = s as Class_156; long num2 = (class_3 != null) ? class_3.prop_7 : s.Position; long num3 = num2 - num; uint num4 = (class_ != null) ? class_.prop_1 : 0U; long num5 = num2 - num3; int num6 = Class_173.CountEntries(entries); bool flag = zip64 == Class_169.Always || num6 >= 65535 || num5 > (long)((ulong)-1) || num3 > (long)((ulong)-1); byte[] array3; if (flag) { if (zip64 == Class_169.Default) { StackFrame stackFrame = new StackFrame(1); if (stackFrame.GetMethod().DeclaringType == typeof(Class_168)) { throw new Class_135("The archive requires a ZIP64 Central Directory. Consider setting the ZipFile.UseZip64WhenSaving property."); } throw new Class_135("The archive requires a ZIP64 Central Directory. Consider setting the ZipOutputStream.EnableZip64 property."); } else { byte[] array2 = Class_173.GenZip64EndOfCentralDirectory(num3, num2, num6, numSegments); array3 = Class_173.GenCentralDirectoryFooter(num3, num2, zip64, num6, comment, container); if (num4 != 0U) { uint value = class_.dmethod_1096(array2.Length + array3.Length); int num7 = 16; Array.Copy(BitConverter.GetBytes(value), 0, array2, num7, 4); num7 += 4; Array.Copy(BitConverter.GetBytes(value), 0, array2, num7, 4); num7 = 60; Array.Copy(BitConverter.GetBytes(value), 0, array2, num7, 4); num7 += 4; num7 += 8; Array.Copy(BitConverter.GetBytes(value), 0, array2, num7, 4); } s.Write(array2, 0, array2.Length); } } else { array3 = Class_173.GenCentralDirectoryFooter(num3, num2, zip64, num6, comment, container); } if (num4 != 0U) { ushort value2 = (ushort)class_.dmethod_1096(array3.Length); int num8 = 4; Array.Copy(BitConverter.GetBytes(value2), 0, array3, num8, 2); num8 += 2; Array.Copy(BitConverter.GetBytes(value2), 0, array3, num8, 2); num8 += 2; } s.Write(array3, 0, array3.Length); if (class_ != null) { class_.prop_0 = false; } return(flag); }