[Ikvm-commit] ikvm/reflect/Writer ModuleWriter.cs, 1.5, 1.6 ResourceSection.cs, 1.2, 1.3
Brought to you by:
jfrijters
From: Jeroen F. <jfr...@us...> - 2010-11-29 06:36:25
|
Update of /cvsroot/ikvm/ikvm/reflect/Writer In directory sfp-cvsdas-4.v30.ch3.sourceforge.com:/tmp/cvs-serv28981/Writer Modified Files: ModuleWriter.cs ResourceSection.cs Log Message: Use ResourceSection directly to collect unmanaged resources. To prepare for adding win32 icon resource support. Index: ModuleWriter.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/reflect/Writer/ModuleWriter.cs,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** ModuleWriter.cs 9 Aug 2010 12:07:55 -0000 1.5 --- ModuleWriter.cs 29 Nov 2010 06:36:17 -0000 1.6 *************** *** 35,39 **** static class ModuleWriter { ! internal static void WriteModule(StrongNameKeyPair keyPair, byte[] publicKey, ModuleBuilder moduleBuilder, PEFileKinds fileKind, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine, ByteBuffer versionInfoData, byte[] unmanagedResources, int entryPointToken) { moduleBuilder.FixupMethodBodyTokens(); --- 35,41 ---- static class ModuleWriter { ! internal static void WriteModule(StrongNameKeyPair keyPair, byte[] publicKey, ModuleBuilder moduleBuilder, ! PEFileKinds fileKind, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine, ! ResourceSection resources, int entryPointToken) { moduleBuilder.FixupMethodBodyTokens(); *************** *** 47,50 **** --- 49,57 ---- } + if (resources != null) + { + resources.Finish(); + } + using (FileStream fs = new FileStream(moduleBuilder.FullyQualifiedName, FileMode.Create)) { *************** *** 126,130 **** moduleBuilder.Tables.Freeze(mw); TextSection code = new TextSection(writer, cliHeader, moduleBuilder, ComputeStrongNameSignatureLength(publicKey)); - ResourceSection resources = new ResourceSection(versionInfoData, unmanagedResources); // Import Directory --- 133,136 ---- *************** *** 154,158 **** } ! if (resources.Length != 0) { writer.Headers.FileHeader.NumberOfSections++; --- 160,164 ---- } ! if (resources != null && resources.Length != 0) { writer.Headers.FileHeader.NumberOfSections++; *************** *** 179,183 **** rsrc.VirtualAddress = sdata.VirtualAddress + writer.ToSectionAlignment(sdata.VirtualSize); rsrc.PointerToRawData = sdata.PointerToRawData + sdata.SizeOfRawData; ! rsrc.VirtualSize = (uint)resources.Length; rsrc.SizeOfRawData = writer.ToFileAlignment(rsrc.VirtualSize); rsrc.Characteristics = SectionHeader.IMAGE_SCN_MEM_READ | SectionHeader.IMAGE_SCN_CNT_INITIALIZED_DATA; --- 185,189 ---- rsrc.VirtualAddress = sdata.VirtualAddress + writer.ToSectionAlignment(sdata.VirtualSize); rsrc.PointerToRawData = sdata.PointerToRawData + sdata.SizeOfRawData; ! rsrc.VirtualSize = resources == null ? 0 : (uint)resources.Length; rsrc.SizeOfRawData = writer.ToFileAlignment(rsrc.VirtualSize); rsrc.Characteristics = SectionHeader.IMAGE_SCN_MEM_READ | SectionHeader.IMAGE_SCN_CNT_INITIALIZED_DATA; Index: ResourceSection.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/reflect/Writer/ResourceSection.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ResourceSection.cs 25 Jan 2010 05:49:02 -0000 1.2 --- ResourceSection.cs 29 Nov 2010 06:36:17 -0000 1.3 *************** *** 31,52 **** sealed class ResourceSection { ! private readonly ByteBuffer bb = new ByteBuffer(1024); ! private readonly List<int> linkOffsets = new List<int>(); ! internal ResourceSection(ByteBuffer versionInfo, byte[] unmanagedResources) { ! ResourceDirectoryEntry root = new ResourceDirectoryEntry(new OrdinalOrName("root")); ! if (versionInfo != null) ! { ! root[new OrdinalOrName(16)][new OrdinalOrName(1)][new OrdinalOrName(0)].Data = versionInfo; ! } ! else if (unmanagedResources != null) ! { ! ExtractResources(root, unmanagedResources); ! } ! root.Write(bb, linkOffsets); } ! private static void ExtractResources(ResourceDirectoryEntry root, byte[] buf) { ByteReader br = new ByteReader(buf, 0, buf.Length); --- 31,44 ---- sealed class ResourceSection { ! private ResourceDirectoryEntry root = new ResourceDirectoryEntry(new OrdinalOrName("root")); ! private ByteBuffer bb; ! private List<int> linkOffsets; ! internal void AddVersionInfo(ByteBuffer versionInfo) { ! root[new OrdinalOrName(16)][new OrdinalOrName(1)][new OrdinalOrName(0)].Data = versionInfo; } ! internal void ExtractResources(byte[] buf) { ByteReader br = new ByteReader(buf, 0, buf.Length); *************** *** 62,65 **** --- 54,69 ---- } + internal void Finish() + { + if (bb != null) + { + throw new InvalidOperationException(); + } + bb = new ByteBuffer(1024); + linkOffsets = new List<int>(); + root.Write(bb, linkOffsets); + root = null; + } + internal int Length { |