private static ResourceEntry ReadResourceEntry()

in ILRepack/Steps/Win32Resources/RsrcReader.cs [38:76]


        private static ResourceEntry ReadResourceEntry(BinaryReader dr, uint baseAddress)
        {
            var re = new ResourceEntry();
            uint id = dr.ReadUInt32();
            uint offset = dr.ReadUInt32();
            long pos = dr.BaseStream.Position;
            if ((id & 0x80000000) != 0)
            {
                dr.BaseStream.Position = (id & 0x7fffffff);
                var b = new StringBuilder();
                int c;
                while ((c = dr.Read()) > 0)
                    b.Append((char) c);
                re.Name = b.ToString();
            }
            else
            {
                re.Id = id;
            }
            if ((offset & 0x80000000) != 0)
            {
                dr.BaseStream.Position = (offset & 0x7fffffff);
                re.Directory = ReadResourceDirectory(dr, baseAddress);
            }
            else
            {
                dr.BaseStream.Position = offset;
                uint rva = dr.ReadUInt32();
                uint size = dr.ReadUInt32();
                uint cp = dr.ReadUInt32();
                uint res = dr.ReadUInt32();
                re.CodePage = cp;
                re.Reserved = res;
                dr.BaseStream.Position = (rva - baseAddress);
                re.Data = dr.ReadBytes((int)size);
            }
            dr.BaseStream.Position = pos;
            return re;
        }