Author: dchapyshev
Date: Sun Sep 4 22:57:44 2016
New Revision: 72580
URL:
http://svn.reactos.org/svn/reactos?rev=72580&view=rev
Log:
[RTL]
- Implement RtlIsValidOemCharacter function
* Fixes all new tests for this function
Modified:
trunk/reactos/sdk/lib/rtl/nls.c
trunk/reactos/sdk/lib/rtl/unicode.c
Modified: trunk/reactos/sdk/lib/rtl/nls.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/rtl/nls.c?rev=7258…
==============================================================================
--- trunk/reactos/sdk/lib/rtl/nls.c [iso-8859-1] (original)
+++ trunk/reactos/sdk/lib/rtl/nls.c [iso-8859-1] Sun Sep 4 22:57:44 2016
@@ -29,7 +29,7 @@
USHORT NlsOemCodePage = 0;
BOOLEAN NlsMbOemCodePageTag = FALSE; /* exported */
PWCHAR NlsOemToUnicodeTable = NULL;
-PCHAR NlsUnicodeToOemTable =NULL;
+PCHAR NlsUnicodeToOemTable = NULL;
PWCHAR NlsDbcsUnicodeToOemTable = NULL;
PUSHORT NlsOemLeadByteInfo = NULL; /* exported */
Modified: trunk/reactos/sdk/lib/rtl/unicode.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/rtl/unicode.c?rev=…
==============================================================================
--- trunk/reactos/sdk/lib/rtl/unicode.c [iso-8859-1] (original)
+++ trunk/reactos/sdk/lib/rtl/unicode.c [iso-8859-1] Sun Sep 4 22:57:44 2016
@@ -24,6 +24,9 @@
extern PUSHORT NlsLeadByteInfo;
extern USHORT NlsOemDefaultChar;
extern USHORT NlsUnicodeDefaultChar;
+extern PUSHORT NlsOemLeadByteInfo;
+extern PWCHAR NlsOemToUnicodeTable;
+extern PCHAR NlsUnicodeToOemTable;
/* FUNCTIONS *****************************************************************/
@@ -503,14 +506,47 @@
}
/*
-* @unimplemented
+* @implemented
*/
BOOLEAN
NTAPI
RtlIsValidOemCharacter(IN PWCHAR Char)
{
- UNIMPLEMENTED;
- return FALSE;
+ WCHAR UnicodeChar;
+ WCHAR OemChar;
+ UCHAR Index;
+
+ /* If multi-byte code page present */
+ if (NlsMbOemCodePageTag)
+ {
+ USHORT Offset = 0;
+
+ OemChar = NlsUnicodeToOemTable[*Char];
+
+ /* If character has Lead Byte */
+ if (NlsOemLeadByteInfo[HIBYTE(OemChar)])
+ Offset = NlsOemLeadByteInfo[HIBYTE(OemChar)];
+
+ Index = LOBYTE(OemChar) + Offset;
+ }
+ else
+ {
+ Index = NlsUnicodeToOemTable[*Char];
+ }
+
+ /* Receive Unicode character from the table */
+ UnicodeChar = RtlUpcaseUnicodeChar(NlsOemToUnicodeTable[Index]);
+
+ /* Receive OEM character from the table */
+ OemChar = NlsUnicodeToOemTable[UnicodeChar];
+
+ /* Not valid character, failed */
+ if (OemChar == NlsOemDefaultChar)
+ return FALSE;
+
+ *Char = UnicodeChar;
+
+ return TRUE;
}
/*