From: Peter Scott Date: Sat, 29 Oct 2011 15:34:07 +0000 (-0400) Subject: Windows: Reimplement AFSGenerateCRC() X-Git-Tag: openafs-stable-1_8_0pre1~3111 X-Git-Url: https://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=15d9654d7242e56a6bab9f8d61afa87b58c1c55f 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 --- diff --git a/src/WINNT/afsrdr/kernel/lib/AFSData.cpp b/src/WINNT/afsrdr/kernel/lib/AFSData.cpp index 2a69e47..377a3ef 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 2ace0a0..797f3f2 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp @@ -324,43 +324,6 @@ AFSCompleteRequest( IN PIRP Irp, } // -// 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 // // Description: @@ -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 3bf1824..cdaa8e1 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 6596bd0..37c4fb6 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;