|
6 | 6 | using System.Linq;
|
7 | 7 | using System.Security.Cryptography;
|
8 | 8 | using System.Text;
|
| 9 | +using xivModdingFramework.Exd.FileTypes; |
9 | 10 | using xivModdingFramework.General.Enums;
|
10 | 11 | using xivModdingFramework.Helpers;
|
11 | 12 |
|
@@ -154,8 +155,10 @@ private void ReadIndex1File(BinaryReader stream)
|
154 | 155 | {
|
155 | 156 | Index1Entries.Add(entry.FolderPathHash, new Dictionary<uint, FileIndexEntry>());
|
156 | 157 | }
|
157 |
| - Index1Entries[entry.FolderPathHash].Add(entry.FileNameHash, entry); |
158 |
| - } |
| 158 | + if (!Index1Entries[entry.FolderPathHash].ContainsKey(entry.FileNameHash)) |
| 159 | + { |
| 160 | + Index1Entries[entry.FolderPathHash].Add(entry.FileNameHash, entry); |
| 161 | + } |
159 | 162 | } else if(segmentId == 1 || segmentId == 2)
|
160 | 163 | {
|
161 | 164 | // Segment 4 is regenerated when writing, so we don't need to store it.
|
@@ -208,12 +211,16 @@ private void ReadIndex2File(BinaryReader stream)
|
208 | 211 |
|
209 | 212 | var bytes = stream.ReadBytes(8);
|
210 | 213 | entry.SetBytes(bytes);
|
211 |
| - Index2Entries.Add(entry.FullPathHash, entry); |
| 214 | + |
| 215 | + if (!Index2Entries.ContainsKey(entry.FullPathHash)) |
| 216 | + { |
| 217 | + Index2Entries.Add(entry.FullPathHash, entry); |
| 218 | + } |
212 | 219 | }
|
213 | 220 | }
|
214 | 221 | else if (segmentId == 1 || segmentId == 2 || segmentId == 3)
|
215 | 222 | {
|
216 |
| - Index2ExtraSegments.Add(stream.ReadBytes(segmentSize)); |
| 223 | + Index2ExtraSegments.Add(stream.ReadBytes(segmentSize)); |
217 | 224 | }
|
218 | 225 | }
|
219 | 226 |
|
@@ -253,6 +260,10 @@ private void WriteIndex1File(BinaryWriter stream)
|
253 | 260 | }
|
254 | 261 |
|
255 | 262 | folderListing[folderKey].FileCount++;
|
| 263 | + if (entry.FileNameHash != fileKey || entry.FolderPathHash != folderKey) |
| 264 | + { |
| 265 | + throw new Exception("Attempted to save Index file with invalid structure."); |
| 266 | + } |
256 | 267 | fileListing.Add(entry);
|
257 | 268 |
|
258 | 269 | currentFileOffset += 16;
|
@@ -668,7 +679,7 @@ public uint SetDataOffset(string filePath, uint newRawOffsetWithDatNumEmbed)
|
668 | 679 | if (newRawOffsetWithDatNumEmbed != 0)
|
669 | 680 | {
|
670 | 681 | var entry = new FileIndexEntry(newRawOffsetWithDatNumEmbed, fileHash, folderHash);
|
671 |
| - Index1Entries[folderHash].Add(newRawOffsetWithDatNumEmbed, entry); |
| 682 | + Index1Entries[folderHash].Add(fileHash, entry); |
672 | 683 | }
|
673 | 684 | } else
|
674 | 685 | {
|
|
0 commit comments