PAGED_CODE_RTL();
- Length = RtlAnsiStringToUnicodeSize(AnsiSource);
+ if (NlsMbCodePageTag == FALSE)
+ {
+ Length = AnsiSource->Length * 2 + sizeof(WCHAR);
+ }
+ else
+ {
+ Length = RtlxAnsiStringToUnicodeSize(AnsiSource);
+ }
if (Length > MAXUSHORT) return STATUS_INVALID_PARAMETER_2;
UniDest->Length = (USHORT)Length - sizeof(WCHAR);
return STATUS_BUFFER_OVERFLOW;
}
+ /* UniDest->MaximumLength must be even due to sizeof(WCHAR) being 2 */
+ ASSERT(!(UniDest->MaximumLength & 1) && UniDest->Length <= UniDest->MaximumLength);
+
Status = RtlMultiByteToUnicodeN(UniDest->Buffer,
UniDest->Length,
&Index,
{
ULONG Size;
+ PAGED_CODE_RTL();
+
/* Convert from Mb String to Unicode Size */
RtlMultiByteToUnicodeSize(&Size,
AnsiString->Buffer,
PAGED_CODE_RTL();
- Length = RtlUnicodeStringToAnsiSize(UniSource);
+ ASSERT(!(UniSource->Length & 1));
+
+ if (NlsMbCodePageTag == FALSE)
+ {
+ Length = (UniSource->Length + sizeof(WCHAR)) / sizeof(WCHAR);
+ }
+ else
+ {
+ Length = RtlxUnicodeStringToAnsiSize(UniSource);
+ }
if (Length > MAXUSHORT) return STATUS_INVALID_PARAMETER_2;
AnsiDest->Length = (USHORT)Length - sizeof(CHAR);
{
ULONG Size;
+ PAGED_CODE_RTL();
+
+ ASSERT(!(UnicodeString->Length & 1));
+
/* Convert the Unicode String to Mb Size */
RtlUnicodeToMultiByteSize(&Size,
UnicodeString->Buffer,