Skip to content

Commit 3a7404f

Browse files
committed
Added proper equals check for encodings.
1 parent fffb672 commit 3a7404f

6 files changed

Lines changed: 41 additions & 7 deletions

File tree

ReClass.NET/CodeGenerator/CppCodeGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -496,11 +496,11 @@ private static BaseNode TransformNode(BaseNode node)
496496

497497
BaseNode GetCharacterNodeForEncoding(Encoding encoding)
498498
{
499-
if (encoding.Equals(Encoding.Unicode))
499+
if (encoding.IsSameCodePage(Encoding.Unicode))
500500
{
501501
return new Utf16CharacterNode();
502502
}
503-
if (encoding.Equals(Encoding.UTF32))
503+
if (encoding.IsSameCodePage(Encoding.UTF32))
504504
{
505505
return new Utf32CharacterNode();
506506
}

ReClass.NET/DataExchange/Scanner/ReClassScanFile.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Linq;
77
using System.Text;
88
using System.Xml.Linq;
9+
using ReClassNET.Extensions;
910
using ReClassNET.Logger;
1011
using ReClassNET.MemoryScanner;
1112

@@ -152,7 +153,7 @@ public void Save(IEnumerable<MemoryRecord> records, string filePath, ILogger log
152153
temp.SetAttributeValue(XmlValueLengthAttribute, r.ValueLength);
153154
if (r.ValueType == ScanValueType.String)
154155
{
155-
temp.SetAttributeValue(XmlEncodingAttribute, r.Encoding == Encoding.UTF8 ? "UTF8" : r.Encoding == Encoding.Unicode ? "UTF16" : "UTF32");
156+
temp.SetAttributeValue(XmlEncodingAttribute, r.Encoding.IsSameCodePage(Encoding.UTF8) ? "UTF8" : r.Encoding.IsSameCodePage(Encoding.Unicode) ? "UTF16" : "UTF32");
156157
}
157158
}
158159
return temp;

ReClass.NET/Extensions/EncodingExtensions.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,22 @@ public static class EncodingExtension
1010
/// <returns>The byte count per character.</returns>
1111
public static int GuessByteCountPerChar(this Encoding encoding)
1212
{
13-
if (encoding.Equals(Encoding.UTF8) || encoding.Equals(Encoding.ASCII)) return 1;
14-
if (encoding.Equals(Encoding.Unicode) || encoding.Equals(Encoding.BigEndianUnicode)) return 2;
15-
if (encoding.Equals(Encoding.UTF32)) return 4;
13+
if (encoding.IsSameCodePage(Encoding.UTF8) || encoding.IsSameCodePage(Encoding.ASCII)) return 1;
14+
if (encoding.IsSameCodePage(Encoding.Unicode) || encoding.IsSameCodePage(Encoding.BigEndianUnicode)) return 2;
15+
if (encoding.IsSameCodePage(Encoding.UTF32)) return 4;
1616

1717
throw new NotImplementedException();
1818
}
19+
20+
/// <summary>
21+
/// Checks if the code page of both encodings is equal.
22+
/// </summary>
23+
/// <param name="encoding"></param>
24+
/// <param name="other"></param>
25+
/// <returns></returns>
26+
public static bool IsSameCodePage(this Encoding encoding, Encoding other)
27+
{
28+
return encoding.CodePage == other.CodePage;
29+
}
1930
}
2031
}

ReClass.NET/MemoryScanner/ScanResultStore.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ private static void WriteSearchResult(BinaryWriter bw, ScanResult result)
261261
bw.Write(arrayOfBytesSearchResult.Value);
262262
break;
263263
case StringScanResult stringSearchResult:
264-
bw.Write(stringSearchResult.Encoding == Encoding.UTF8 ? 0 : stringSearchResult.Encoding == Encoding.Unicode ? 1 : 2);
264+
bw.Write(stringSearchResult.Encoding.IsSameCodePage(Encoding.UTF8) ? 0 : stringSearchResult.Encoding.IsSameCodePage(Encoding.Unicode) ? 1 : 2);
265265
bw.Write(stringSearchResult.Value);
266266
break;
267267
}

ReClass.NET/ReClass.NET.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
</NuGetPackageImportStamp>
1717
<CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
1818
<TargetFrameworkProfile />
19+
<LangVersion>latest</LangVersion>
1920
</PropertyGroup>
2021
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
2122
<PlatformTarget>x86</PlatformTarget>

ReClass.NET_Tests/Extensions/EncodingExtensionTest.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,26 @@ public void TestSimpleByteCountNotImplemented(Encoding encoding)
3737
{
3838
Check.ThatCode(encoding.GuessByteCountPerChar).Throws<NotImplementedException>();
3939
}
40+
41+
public static TheoryData<Encoding, Encoding, bool> GetTestIsSameCodePageData() => new TheoryData<Encoding, Encoding, bool>
42+
{
43+
{ Encoding.ASCII, Encoding.ASCII, true },
44+
{ Encoding.UTF8, Encoding.UTF8, true },
45+
{ Encoding.Unicode, Encoding.Unicode, true },
46+
{ Encoding.UTF32, Encoding.UTF32, true },
47+
{ Encoding.ASCII, Encoding.UTF8, false },
48+
{ Encoding.ASCII, Encoding.Unicode, false },
49+
{ Encoding.ASCII, Encoding.UTF32, false },
50+
{ Encoding.UTF8, Encoding.UTF32, false },
51+
{ Encoding.Unicode, Encoding.UTF32, false },
52+
{ Encoding.UTF8, Encoding.Unicode, false }
53+
};
54+
55+
[Theory]
56+
[MemberData(nameof(GetTestIsSameCodePageData))]
57+
public void TestIsSameCodePage(Encoding sut, Encoding other, bool expected)
58+
{
59+
Check.That(sut.IsSameCodePage(other)).IsEqualTo(expected);
60+
}
4061
}
4162
}

0 commit comments

Comments
 (0)