/// <summary> /// Reads a single StringFileInfo structure from the provided input stream. /// </summary> /// <param name="startOffset">The offset of the consumed header.</param> /// <param name="header">The header.</param> /// <param name="reader">The input stream.</param> /// <returns>The read structure.</returns> /// <remarks> /// This function assumes the provided header was already consumed. /// </remarks> public static StringFileInfo FromReader(ulong startOffset, VersionTableEntryHeader header, ref BinaryStreamReader reader) { var result = new StringFileInfo(); while (reader.Offset - startOffset < header.Length) { result.Tables.Add(StringTable.FromReader(ref reader)); } return(result); }
private static VersionTableEntry ReadNextEntry(IBinaryStreamReader reader) { uint start = reader.FileOffset; var header = VersionTableEntryHeader.FromReader(reader); reader.Align(4); return(header.Key switch { VarFileInfo.VarFileInfoKey => VarFileInfo.FromReader(start, header, reader), StringFileInfo.StringFileInfoKey => StringFileInfo.FromReader(start, header, reader), _ => throw new FormatException($"Invalid or unsupported entry {header.Key}.") });