Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #include "kosSyst.h"
  2. #include "CRC32.h"
  3.  
  4.  
  5.  
  6. CCRC32::CCRC32()
  7. {
  8.         Dword i, mask, j, k;
  9.  
  10.         for ( i=0xEDB8; i >= 0x8320; i-- )
  11.         {
  12.                 mask = i;
  13.                 for ( j=0; j<8; j++ )
  14.                 {
  15.                         k = mask;
  16.                         mask >>= 1;
  17.                         if ( k & 1 )
  18.                         {
  19.                                 mask ^= 0xEDB88320;
  20.                         }
  21.                         this->table[i & 0xFF] = mask;
  22.                 }
  23.         }
  24. }
  25.  
  26.  
  27. Dword CCRC32::InitCRC32()
  28. {
  29.         return 0xFFFFFFFF;
  30. }
  31.  
  32.  
  33. Dword CCRC32::FinalizeCRC32(Dword d)
  34. {
  35.         return ~d;
  36. }
  37.  
  38.  
  39. void CCRC32::DoCRC32(Byte *buffer, Dword length, Dword *CRC32value)
  40. {
  41.         Dword result, i;
  42.         Byte mask;
  43.  
  44.         result = *CRC32value;
  45.  
  46.         for ( i=0; i<length; i++ )
  47.         {
  48.                 mask = (Byte)( ( result ^ buffer[i] ) & 0xFF );
  49.                 result = ( result >>= 8 ) ^ this->table[mask];
  50.         }
  51.         *CRC32value = result;
  52. }
  53.  
  54.  
  55. Dword CCRC32::GetCRC32(Byte *buffer, Dword length)
  56. {
  57.         Dword result;
  58.  
  59.         result = 0xFFFFFFFF;
  60.  
  61.         this->DoCRC32( buffer, length, &result );
  62.  
  63.         return ~result;
  64. }
  65.