Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
Zip64ExtraField.cs
Go to the documentation of this file.
2
4
5internal struct Zip64ExtraField
6{
7 private ushort _size;
8
9 private long? _uncompressedSize;
10
11 private long? _compressedSize;
12
13 private long? _localHeaderOffset;
14
15 private int? _startDiskNumber;
16
17 public ushort TotalSize => (ushort)(_size + 4);
18
19 public long? UncompressedSize
20 {
21 get
22 {
23 return _uncompressedSize;
24 }
25 set
26 {
28 UpdateSize();
29 }
30 }
31
32 public long? CompressedSize
33 {
34 get
35 {
36 return _compressedSize;
37 }
38 set
39 {
41 UpdateSize();
42 }
43 }
44
45 public long? LocalHeaderOffset
46 {
47 get
48 {
49 return _localHeaderOffset;
50 }
51 set
52 {
54 UpdateSize();
55 }
56 }
57
59
60 private void UpdateSize()
61 {
62 _size = 0;
63 if (_uncompressedSize.HasValue)
64 {
65 _size += 8;
66 }
67 if (_compressedSize.HasValue)
68 {
69 _size += 8;
70 }
71 if (_localHeaderOffset.HasValue)
72 {
73 _size += 8;
74 }
75 if (_startDiskNumber.HasValue)
76 {
77 _size += 4;
78 }
79 }
80
82 {
84 using (BinaryReader reader = new BinaryReader(extraFieldStream))
85 {
88 {
90 {
91 return zip64Block;
92 }
93 }
94 }
95 zip64Block = default(Zip64ExtraField);
96 zip64Block._compressedSize = null;
97 zip64Block._uncompressedSize = null;
98 zip64Block._localHeaderOffset = null;
99 zip64Block._startDiskNumber = null;
100 return zip64Block;
101 }
102
104 {
105 zip64Block = default(Zip64ExtraField);
106 zip64Block._compressedSize = null;
107 zip64Block._uncompressedSize = null;
108 zip64Block._localHeaderOffset = null;
109 zip64Block._startDiskNumber = null;
110 if (extraField.Tag != 1)
111 {
112 return false;
113 }
115 try
116 {
119 memoryStream = null;
120 zip64Block._size = extraField.Size;
121 ushort num = 0;
123 {
124 num += 8;
125 }
127 {
128 num += 8;
129 }
131 {
132 num += 8;
133 }
135 {
136 num += 4;
137 }
138 if (num != zip64Block._size)
139 {
140 return false;
141 }
143 {
144 zip64Block._uncompressedSize = binaryReader.ReadInt64();
145 }
147 {
148 zip64Block._compressedSize = binaryReader.ReadInt64();
149 }
151 {
152 zip64Block._localHeaderOffset = binaryReader.ReadInt64();
153 }
155 {
156 zip64Block._startDiskNumber = binaryReader.ReadInt32();
157 }
158 if (zip64Block._uncompressedSize < 0)
159 {
161 }
162 if (zip64Block._compressedSize < 0)
163 {
165 }
166 if (zip64Block._localHeaderOffset < 0)
167 {
169 }
170 if (zip64Block._startDiskNumber < 0)
171 {
173 }
174 return true;
175 }
176 finally
177 {
178 memoryStream?.Dispose();
179 }
180 }
181
183 {
185 zip64Block._compressedSize = null;
186 zip64Block._uncompressedSize = null;
187 zip64Block._localHeaderOffset = null;
188 zip64Block._startDiskNumber = null;
190 bool flag = false;
192 {
193 if (extraField.Tag == 1)
194 {
195 list.Add(extraField);
197 {
198 flag = true;
199 }
200 }
201 }
202 foreach (ZipGenericExtraField item in list)
203 {
205 }
206 return zip64Block;
207 }
208
210 {
213 {
214 if (extraField.Tag == 1)
215 {
216 list.Add(extraField);
217 }
218 }
219 foreach (ZipGenericExtraField item in list)
220 {
222 }
223 }
224
226 {
228 binaryWriter.Write((ushort)1);
229 binaryWriter.Write(_size);
230 if (_uncompressedSize.HasValue)
231 {
232 binaryWriter.Write(_uncompressedSize.Value);
233 }
234 if (_compressedSize.HasValue)
235 {
236 binaryWriter.Write(_compressedSize.Value);
237 }
238 if (_localHeaderOffset.HasValue)
239 {
240 binaryWriter.Write(_localHeaderOffset.Value);
241 }
242 if (_startDiskNumber.HasValue)
243 {
244 binaryWriter.Write(_startDiskNumber.Value);
245 }
246 }
247}
bool ICollection< KeyValuePair< TKey, TValue > >. Remove(KeyValuePair< TKey, TValue > keyValuePair)
static string FieldTooBigCompressedSize
Definition SR.cs:84
static string FieldTooBigStartDiskNumber
Definition SR.cs:94
static string FieldTooBigLocalHeaderOffset
Definition SR.cs:86
static string FieldTooBigUncompressedSize
Definition SR.cs:96
Definition SR.cs:7
static bool TryGetZip64BlockFromGenericExtraField(ZipGenericExtraField extraField, bool readUncompressedSize, bool readCompressedSize, bool readLocalHeaderOffset, bool readStartDiskNumber, out Zip64ExtraField zip64Block)
static void RemoveZip64Blocks(List< ZipGenericExtraField > extraFields)
static Zip64ExtraField GetAndRemoveZip64Block(List< ZipGenericExtraField > extraFields, bool readUncompressedSize, bool readCompressedSize, bool readLocalHeaderOffset, bool readStartDiskNumber)
static Zip64ExtraField GetJustZip64Block(Stream extraFieldStream, bool readUncompressedSize, bool readCompressedSize, bool readLocalHeaderOffset, bool readStartDiskNumber)
static bool TryReadBlock(BinaryReader reader, long endExtraField, out ZipGenericExtraField field)