Minor code changes to RTL (one would call them "optimisation"). Added some missing paged code.
Plus added useful asserts (used to catch r50615 bug!)

svn path=/trunk/; revision=50616
This commit is contained in:
Pierre Schweitzer 2011-02-07 23:23:33 +00:00
parent dab840147a
commit 6b67a4985e
2 changed files with 33 additions and 2 deletions

View file

@ -235,6 +235,8 @@ RtlMultiByteToUnicodeN(
ULONG Size = 0;
ULONG i;
PAGED_CODE_RTL();
if (NlsMbCodePageTag == FALSE)
{
/* single-byte code page */
@ -300,6 +302,8 @@ RtlMultiByteToUnicodeSize(PULONG UnicodeSize,
{
ULONG Length = 0;
PAGED_CODE_RTL();
if (!NlsMbCodePageTag)
{
/* single-byte code page */
@ -504,6 +508,8 @@ RtlUnicodeToMultiByteN (PCHAR MbString,
ULONG Size = 0;
ULONG i;
PAGED_CODE_RTL();
if (NlsMbCodePageTag == FALSE)
{
/* single-byte code page */

View file

@ -76,7 +76,14 @@ RtlAnsiStringToUnicodeString(
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);
@ -91,6 +98,9 @@ RtlAnsiStringToUnicodeString(
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,
@ -123,6 +133,8 @@ RtlxAnsiStringToUnicodeSize(IN PCANSI_STRING AnsiString)
{
ULONG Size;
PAGED_CODE_RTL();
/* Convert from Mb String to Unicode Size */
RtlMultiByteToUnicodeSize(&Size,
AnsiString->Buffer,
@ -963,7 +975,16 @@ RtlUnicodeStringToAnsiString(
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);
@ -1953,6 +1974,10 @@ RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString)
{
ULONG Size;
PAGED_CODE_RTL();
ASSERT(!(UnicodeString->Length & 1));
/* Convert the Unicode String to Mb Size */
RtlUnicodeToMultiByteSize(&Size,
UnicodeString->Buffer,