private void Parse() { int num = 0; if (this.entryBlob != null && this.entryBlob.Length > 1) { for (;;) { ushort num2 = Ex12ExRenEntryParser.ParseUInt16(this.entryBlob, num); if (num2 == 0) { break; } Ex12ExRenEntryParser.ExFolderEntry exFolderEntry = this.GetExFolderEntry(num2); num += 2; ushort num3 = Ex12ExRenEntryParser.ParseUInt16(this.entryBlob, num); num += 2; int num4 = num; while (num - num4 < (int)num3) { Ex12ExRenEntryParser.ParseEntryBlock(this.entryBlob, ref num, num3, ref exFolderEntry); } if (num + 2 >= this.entryBlob.Length) { return; } } return; } }
private static void ParseEntryBlock(byte[] additionalRenEntryIdsEx, ref int index, ushort blockSize, ref Ex12ExRenEntryParser.ExFolderEntry entry) { for (;;) { int start = index; uint num = (uint)Ex12ExRenEntryParser.ParseUInt16(additionalRenEntryIdsEx, index); index += 2; ushort num2 = Ex12ExRenEntryParser.ParseUInt16(additionalRenEntryIdsEx, index); index += 2; blockSize -= 4; if (num2 > blockSize) { break; } try { if (num == 1U) { entry.EntryId = new byte[(int)num2]; Array.Copy(additionalRenEntryIdsEx, index, entry.EntryId, 0, (int)num2); } else if (num == 2U) { entry.ElementId = Ex12ExRenEntryParser.ParseUInt16(additionalRenEntryIdsEx, index); } else { entry.Unknown = new byte[(int)num2]; Array.Copy(additionalRenEntryIdsEx, index, entry.Unknown, 0, (int)num2); } } catch (ArgumentException innerException) { throw new FormatException("ParseEntryBlock", innerException); } index += (int)num2; blockSize -= num2; entry.Start = start; entry.End = index; if (blockSize <= 0) { return; } } }