[RTL]
authorPierre Schweitzer <pierre@reactos.org>
Sat, 25 Sep 2010 21:20:54 +0000 (21:20 +0000)
committerPierre Schweitzer <pierre@reactos.org>
Sat, 25 Sep 2010 21:20:54 +0000 (21:20 +0000)
Fixed a really stupid (and old) bug in RtlComputeCrc32():
First parameter is initial CRC32 checksum. And it's complete and not partial, thus it needs to be an ULONG and not an USHORT.
This fixes CRC32 checksum computation with initial checksum (tested again Windows 2003 & Seven).

svn path=/trunk/; revision=48895

reactos/include/ndk/rtlfuncs.h
reactos/lib/rtl/crc32.c

index a58690e..7ff855f 100644 (file)
@@ -3318,7 +3318,7 @@ NTSYSAPI
 ULONG
 NTAPI
 RtlComputeCrc32(
-    IN USHORT PartialCrc,
+    IN ULONG InitialCrc,
     IN PUCHAR Buffer,
     IN ULONG Length
 );
index d150956..760eebd 100644 (file)
@@ -85,15 +85,14 @@ static const ULONG CrcTable[256] =
  * @implemented
  */
 ULONG NTAPI
-RtlComputeCrc32 (IN USHORT Initial,
-                IN PUCHAR Data,
-                IN ULONG Length)
+RtlComputeCrc32(IN ULONG Initial,
+                IN PUCHAR Data,
+                IN ULONG Length)
 {
-  ULONG CrcValue;
+  ULONG CrcValue = ~Initial;
 
-  DPRINT("(%lu,%p,%lu)\n", Initial, Data, Length);
+  DPRINT("(%d,%p,%d)\n", Initial, Data, Length);
 
-  CrcValue = ~Initial;
   while (Length > 0)
   {
     CrcValue = CrcTable[(CrcValue ^ *Data) & 0xff] ^ (CrcValue >> 8);