Files
Dec2017-Script-Dump/mscorlib/System/Resources/Win32ResFileReader.cs
T
2026-06-04 11:42:34 +02:00

124 lines
2.6 KiB
C#

using System;
using System.Collections;
using System.IO;
using System.Text;
namespace System.Resources
{
// Token: 0x0200028A RID: 650
internal class Win32ResFileReader
{
// Token: 0x060020D1 RID: 8401 RVA: 0x00078724 File Offset: 0x00076924
public Win32ResFileReader(Stream s)
{
this.res_file = s;
}
// Token: 0x060020D2 RID: 8402 RVA: 0x00078734 File Offset: 0x00076934
private int read_int16()
{
int num = this.res_file.ReadByte();
if (num == -1)
{
return -1;
}
int num2 = this.res_file.ReadByte();
if (num2 == -1)
{
return -1;
}
return num | (num2 << 8);
}
// Token: 0x060020D3 RID: 8403 RVA: 0x00078770 File Offset: 0x00076970
private int read_int32()
{
int num = this.read_int16();
if (num == -1)
{
return -1;
}
int num2 = this.read_int16();
if (num2 == -1)
{
return -1;
}
return num | (num2 << 16);
}
// Token: 0x060020D4 RID: 8404 RVA: 0x000787A4 File Offset: 0x000769A4
private void read_padding()
{
while (this.res_file.Position % 4L != 0L)
{
this.read_int16();
}
}
// Token: 0x060020D5 RID: 8405 RVA: 0x000787C8 File Offset: 0x000769C8
private NameOrId read_ordinal()
{
int num = this.read_int16();
if ((num & 65535) != 0)
{
int num2 = this.read_int16();
return new NameOrId(num2);
}
byte[] array = new byte[16];
int num3 = 0;
for (;;)
{
int num4 = this.read_int16();
if (num4 == 0)
{
break;
}
if (num3 == array.Length)
{
byte[] array2 = new byte[array.Length * 2];
Array.Copy(array, array2, array.Length);
array = array2;
}
array[num3] = (byte)(num4 >> 8);
array[num3 + 1] = (byte)(num4 & 255);
num3 += 2;
}
return new NameOrId(new string(Encoding.Unicode.GetChars(array, 0, num3)));
}
// Token: 0x060020D6 RID: 8406 RVA: 0x00078870 File Offset: 0x00076A70
public ICollection ReadResources()
{
ArrayList arrayList = new ArrayList();
for (;;)
{
this.read_padding();
int num = this.read_int32();
if (num == -1)
{
break;
}
this.read_int32();
NameOrId nameOrId = this.read_ordinal();
NameOrId nameOrId2 = this.read_ordinal();
this.read_padding();
this.read_int32();
this.read_int16();
int num2 = this.read_int16();
this.read_int32();
this.read_int32();
if (num != 0)
{
byte[] array = new byte[num];
this.res_file.Read(array, 0, num);
arrayList.Add(new Win32EncodedResource(nameOrId, nameOrId2, num2, array));
}
}
return arrayList;
}
// Token: 0x04000BB6 RID: 2998
private Stream res_file;
}
}