From 15d9654d7242e56a6bab9f8d61afa87b58c1c55f Mon Sep 17 00:00:00 2001 From: Peter Scott Date: Sat, 29 Oct 2011 11:34:07 -0400 Subject: [PATCH] Windows: Reimplement AFSGenerateCRC() Replace the home grown CRC generation with a call to RtlHashUnicodeString() which is present on Windows XP and above. Change-Id: Id98a1223e0aad54b3c43a16653ab888ac883639f Reviewed-on: http://gerrit.openafs.org/5738 Reviewed-by: Rod Widdowson Tested-by: BuildBot Tested-by: Jeffrey Altman Reviewed-by: Jeffrey Altman --- src/WINNT/afsrdr/kernel/lib/AFSData.cpp | 2 - src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp | 89 ++----------------- .../afsrdr/kernel/lib/Include/AFSCommon.h | 3 - .../afsrdr/kernel/lib/Include/AFSExtern.h | 2 - 4 files changed, 9 insertions(+), 87 deletions(-) diff --git a/src/WINNT/afsrdr/kernel/lib/AFSData.cpp b/src/WINNT/afsrdr/kernel/lib/AFSData.cpp index 2a69e4728..377a3ef2b 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSData.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSData.cpp @@ -50,8 +50,6 @@ PDEVICE_OBJECT AFSControlDeviceObject = NULL; PDEVICE_OBJECT AFSRDRDeviceObject = NULL; -unsigned long AFSCRCTable[ 256]; - UNICODE_STRING AFSRegistryPath; HANDLE AFSSysProcess = NULL; diff --git a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp index 2ace0a07e..797f3f2a8 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp @@ -323,43 +323,6 @@ AFSCompleteRequest( IN PIRP Irp, return; } -// -// Function: AFSBuildCRCTable -// -// Description: -// -// This function builds the CRC table for mapping filenames to a CRC value. -// -// Return: -// -// A status is returned for the function -// - -void -AFSBuildCRCTable() -{ - ULONG crc; - int i, j; - - for ( i = 0; i <= 255; i++) - { - crc = i; - for ( j = 8; j > 0; j--) - { - if (crc & 1) - { - crc = ( crc >> 1 ) ^ CRC32_POLYNOMIAL; - } - else - { - crc >>= 1; - } - } - - AFSCRCTable[ i ] = crc; - } -} - // // Function: AFSGenerateCRC // @@ -377,54 +340,20 @@ AFSGenerateCRC( IN PUNICODE_STRING FileName, IN BOOLEAN UpperCaseName) { - ULONG crc; - ULONG temp1, temp2; - UNICODE_STRING UpcaseString; - WCHAR *lpbuffer; - USHORT size = 0; - - if( !AFSCRCTable[1]) - { - AFSBuildCRCTable(); - } - - crc = 0xFFFFFFFFL; - - if( UpperCaseName) - { - - RtlUpcaseUnicodeString( &UpcaseString, - FileName, - TRUE); - - lpbuffer = UpcaseString.Buffer; - - size = (UpcaseString.Length/sizeof( WCHAR)); - } - else - { - - lpbuffer = FileName->Buffer; - - size = (FileName->Length/sizeof( WCHAR)); - } + ULONG ulCRC = 0; + NTSTATUS ntStatus = STATUS_SUCCESS; - while (size--) - { - temp1 = (crc >> 8) & 0x00FFFFFFL; - temp2 = AFSCRCTable[((int)crc ^ *lpbuffer++) & 0xff]; - crc = temp1 ^ temp2; - } + ntStatus = RtlHashUnicodeString( FileName, + UpperCaseName, + HASH_STRING_ALGORITHM_DEFAULT, + &ulCRC); - if( UpperCaseName) + if( !NT_SUCCESS( ntStatus)) { - - RtlFreeUnicodeString( &UpcaseString); + ulCRC = 0; } - crc ^= 0xFFFFFFFFL; - - return crc; + return ulCRC; } void * diff --git a/src/WINNT/afsrdr/kernel/lib/Include/AFSCommon.h b/src/WINNT/afsrdr/kernel/lib/Include/AFSCommon.h index 3bf182436..cdaa8e189 100644 --- a/src/WINNT/afsrdr/kernel/lib/Include/AFSCommon.h +++ b/src/WINNT/afsrdr/kernel/lib/Include/AFSCommon.h @@ -1030,9 +1030,6 @@ void AFSCompleteRequest( IN PIRP Irp, IN ULONG Status); -void -AFSBuildCRCTable( void); - ULONG AFSGenerateCRC( IN PUNICODE_STRING FileName, IN BOOLEAN UpperCaseName); diff --git a/src/WINNT/afsrdr/kernel/lib/Include/AFSExtern.h b/src/WINNT/afsrdr/kernel/lib/Include/AFSExtern.h index 6596bd07f..37c4fb6e6 100644 --- a/src/WINNT/afsrdr/kernel/lib/Include/AFSExtern.h +++ b/src/WINNT/afsrdr/kernel/lib/Include/AFSExtern.h @@ -51,8 +51,6 @@ extern PDEVICE_OBJECT AFSRDRDeviceObject; extern FAST_IO_DISPATCH AFSFastIoDispatch; -extern unsigned long AFSCRCTable[]; - extern UNICODE_STRING AFSRegistryPath; extern ULONG AFSDebugFlags; -- 2.39.5