From 31a759e85ce9e1e70739b60ef77c12c11f29a8fa Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Tue, 6 Sep 2005 17:33:56 +0000 Subject: [PATCH] - Use DDK macros to speed up size calculations on single-byte codepages. svn path=/trunk/; revision=17700 --- reactos/include/ndk/rtlfuncs.h | 63 ++++++++++++++++++++--------- reactos/lib/rtl/unicode.c | 49 ++-------------------- reactos/w32api/include/ddk/winddk.h | 20 +++++---- 3 files changed, 60 insertions(+), 72 deletions(-) diff --git a/reactos/include/ndk/rtlfuncs.h b/reactos/include/ndk/rtlfuncs.h index 3477c2c2091..41f60f2e34e 100644 --- a/reactos/include/ndk/rtlfuncs.h +++ b/reactos/include/ndk/rtlfuncs.h @@ -764,12 +764,18 @@ RtlUlonglongByteSwap(IN ULONGLONG Source); /* * Unicode->Ansi String Functions */ -/* FIXME: Use macro */ -#undef RtlUnicodeStringToAnsiSize NTSYSAPI ULONG NTAPI -RtlUnicodeStringToAnsiSize(IN PUNICODE_STRING UnicodeString); +RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString); + +#ifdef NTOS_MODE_USER +#define RtlUnicodeStringToAnsiSize(STRING) ( \ + NLS_MB_CODE_PAGE_TAG ? \ + RtlxUnicodeStringToAnsiSize(STRING) : \ + ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \ +) +#endif NTSYSAPI NTSTATUS @@ -821,12 +827,21 @@ RtlUpcaseUnicodeToOemN( ULONG UnicodeSize ); -/* FIXME: Use macro */ -#undef RtlUnicodeStringToOemSize NTSYSAPI ULONG NTAPI -RtlUnicodeStringToOemSize(IN PUNICODE_STRING UnicodeString); +RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString); + +#ifdef NTOS_MODE_USER +#define RtlUnicodeStringToOemSize(STRING) ( \ + NLS_MB_OEM_CODE_PAGE_TAG ? \ + RtlxUnicodeStringToOemSize(STRING) : \ + ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \ +) +#define RtlUnicodeStringToCountedOemSize(STRING) ( \ + (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(UNICODE_NULL)) \ +) +#endif NTSYSAPI NTSTATUS @@ -873,15 +888,24 @@ RtlUnicodeToMultiByteSize( ULONG UnicodeSize ); -/* - * OEM to Unicode Functions - */ -/* FIXME: Use macro */ -#undef RtlOemStringToUnicodeSize NTSYSAPI ULONG NTAPI -RtlOemStringToUnicodeSize(POEM_STRING AnsiString); +RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString); + +/* + * OEM to Unicode Functions + */ +#ifdef NTOS_MODE_USER +#define RtlOemStringToUnicodeSize(STRING) ( \ + NLS_MB_OEM_CODE_PAGE_TAG ? \ + RtlxOemStringToUnicodeSize(STRING) : \ + ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \ +) +#define RtlOemStringToCountedUnicodeSize(STRING) ( \ + (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \ +) +#endif NTSYSAPI NTSTATUS @@ -915,14 +939,13 @@ RtlAnsiStringToUnicodeString( BOOLEAN AllocateDestinationString ); -/* FIXME: Use macro */ -#undef RtlAnsiStringToUnicodeSize -NTSYSAPI -ULONG -NTAPI -RtlAnsiStringToUnicodeSize( - PANSI_STRING AnsiString -); +#ifdef NTOS_MODE_USER +#define RtlAnsiStringToUnicodeSize(STRING) ( \ + NLS_MB_CODE_PAGE_TAG ? \ + RtlxAnsiStringToUnicodeSize(STRING) : \ + ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \ +) +#endif NTSYSAPI BOOLEAN diff --git a/reactos/lib/rtl/unicode.c b/reactos/lib/rtl/unicode.c index 2fccb36b52b..52cfa664857 100644 --- a/reactos/lib/rtl/unicode.c +++ b/reactos/lib/rtl/unicode.c @@ -66,7 +66,7 @@ RtlAnsiCharToUnicodeChar (IN CHAR AnsiChar) */ ULONG STDCALL -RtlxAnsiStringToUnicodeSize(IN PANSI_STRING AnsiString) +RtlxAnsiStringToUnicodeSize(IN PCANSI_STRING AnsiString) { ULONG Size; @@ -884,7 +884,7 @@ RtlUnicodeStringToInteger( ULONG STDCALL RtlxUnicodeStringToOemSize( - IN PUNICODE_STRING UnicodeString) + IN PCUNICODE_STRING UnicodeString) { ULONG Size; @@ -1830,7 +1830,7 @@ RtlUpcaseUnicodeStringToOemString ( */ ULONG STDCALL -RtlxOemStringToUnicodeSize(IN POEM_STRING OemString) +RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString) { ULONG Size; @@ -1894,7 +1894,7 @@ RtlStringFromGUID (IN REFGUID Guid, ULONG STDCALL RtlxUnicodeStringToAnsiSize( - IN PUNICODE_STRING UnicodeString) + IN PCUNICODE_STRING UnicodeString) { ULONG Size; @@ -2256,47 +2256,6 @@ RtlUpperString(PSTRING DestinationString, DestinationString->Length = SourceString->Length; } - -/* - * @implemented - */ -ULONG STDCALL -RtlAnsiStringToUnicodeSize(IN PANSI_STRING AnsiString) -{ - return RtlxAnsiStringToUnicodeSize(AnsiString); -} - - -/* - * @implemented - */ -ULONG STDCALL -RtlOemStringToUnicodeSize(IN POEM_STRING OemString) -{ - return RtlxOemStringToUnicodeSize(OemString); -} - - - -/* - * @implemented - */ -ULONG STDCALL -RtlUnicodeStringToAnsiSize(IN PUNICODE_STRING UnicodeString) -{ - return RtlxUnicodeStringToAnsiSize(UnicodeString); -} - - -/* - * @implemented - */ -ULONG STDCALL -RtlUnicodeStringToOemSize(IN PUNICODE_STRING UnicodeString) -{ - return RtlxUnicodeStringToOemSize(UnicodeString); -} - /* * @implemented * diff --git a/reactos/w32api/include/ddk/winddk.h b/reactos/w32api/include/ddk/winddk.h index d063d412350..45b5697dd27 100644 --- a/reactos/w32api/include/ddk/winddk.h +++ b/reactos/w32api/include/ddk/winddk.h @@ -5099,8 +5099,14 @@ InterlockedPushEntrySList( NTOSAPI ULONG DDKAPI -RtlAnsiStringToUnicodeSize( - IN PANSI_STRING AnsiString); +RtlxAnsiStringToUnicodeSize( + IN PCANSI_STRING AnsiString); + +#define RtlAnsiStringToUnicodeSize(STRING) ( \ + NLS_MB_CODE_PAGE_TAG ? \ + RtlxAnsiStringToUnicodeSize(STRING) : \ + ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \ +) NTOSAPI NTSTATUS @@ -5720,11 +5726,11 @@ DDKFASTAPI RtlUlonglongByteSwap( IN ULONGLONG Source); -NTOSAPI -ULONG -DDKAPI -RtlUnicodeStringToAnsiSize( - IN PUNICODE_STRING UnicodeString); +#define RtlUnicodeStringToAnsiSize(STRING) ( \ + NLS_MB_CODE_PAGE_TAG ? \ + RtlxUnicodeStringToAnsiSize(STRING) : \ + ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \ +) NTOSAPI NTSTATUS