private void MergeEntry(List<ResourceEntry> parents, ResourceEntry exist, AssemblyDefinition ass, ResourceEntry entry)
{
if (exist.Data != null && entry.Data != null)
{
if (IsAspResourceEntry(parents, exist))
{
_aspOffsets[ass] = exist.Data.Length;
byte[] newData = new byte[exist.Data.Length + entry.Data.Length];
Array.Copy(exist.Data, 0, newData, 0, exist.Data.Length);
Array.Copy(entry.Data, 0, newData, exist.Data.Length, entry.Data.Length);
exist.Data = newData;
}
else if (!IsVersionInfoResource(parents, exist))
{
Logger.Warn(string.Format("Duplicate Win32 resource with id={0}, parents=[{1}], name={2} in assembly {3}, ignoring", entry.Id, string.Join(",", parents.Select(p => p.Name ?? p.Id.ToString()).ToArray()), entry.Name, ass.Name));
}
return;
}
if (exist.Data != null || entry.Data != null)
{
Logger.Warn("Inconsistent Win32 resources, ignoring");
return;
}
parents.Add(exist);
MergeDirectory(parents, exist.Directory, ass, entry.Directory);
parents.RemoveAt(parents.Count - 1);
}