[RTL]
authorPierre Schweitzer <pierre@reactos.org>
Sun, 20 Feb 2011 19:28:34 +0000 (19:28 +0000)
committerPierre Schweitzer <pierre@reactos.org>
Sun, 20 Feb 2011 19:28:34 +0000 (19:28 +0000)
- Fixed RtlMultiByteToUnicodeN & RtlAnsiCharToUnicodeChar prototype
- Added missing paged code marker to RtlAnsiCharToUnicodeChar
- Added a small hack to RtlAnsiCharToUnicodeChar. Indeed, when it's called during second stage, it's failing due to missing NLS table.
Probably usetup that doesn't define a registry entry. And then, FreeLdr just passes null pointer.

svn path=/trunk/; revision=50836

reactos/lib/rtl/nls.c
reactos/lib/rtl/unicode.c

index 131587d..697835d 100644 (file)
@@ -226,9 +226,9 @@ RtlInitNlsTables(IN PUSHORT AnsiTableBase,
  */
 NTSTATUS NTAPI
 RtlMultiByteToUnicodeN(
-   IN PWCHAR UnicodeString,
+   OUT PWCHAR UnicodeString,
    IN ULONG UnicodeSize,
-   IN PULONG ResultSize,
+   OUT PULONG ResultSize,
    IN PCSTR MbString,
    IN ULONG MbSize)
 {
@@ -286,7 +286,7 @@ RtlMultiByteToUnicodeN(
          *ResultSize = i * sizeof(WCHAR);
    }
 
-   return(STATUS_SUCCESS);
+   return STATUS_SUCCESS;
 }
 
 
index e0b8a4f..619bba6 100644 (file)
@@ -33,13 +33,23 @@ extern USHORT NlsUnicodeDefaultChar;
 */
 WCHAR
 NTAPI
-RtlAnsiCharToUnicodeChar(IN PUCHAR *AnsiChar)
+RtlAnsiCharToUnicodeChar(IN OUT PUCHAR *AnsiChar)
 {
     ULONG Size;
     NTSTATUS Status;
     WCHAR UnicodeChar = L' ';
 
-    Size = (NlsLeadByteInfo[**AnsiChar] == 0) ? 1 : 2;
+    PAGED_CODE_RTL();
+
+    if (NlsLeadByteInfo)
+    {
+        Size = (NlsLeadByteInfo[**AnsiChar] == 0) ? 1 : 2;
+    }
+    else
+    {
+        DPRINT1("HACK::Shouldn't have happened! Consider fixing Usetup and registry entries it creates on install\n");
+        Size = 1;
+    }
 
     Status = RtlMultiByteToUnicodeN(&UnicodeChar,
                                     sizeof(WCHAR),