source: orange/source/include/crc32.cpp @ 10596:54f9c123f145

Revision 10596:54f9c123f145, 538 bytes checked in by Matija Polajnar <matija.polajnar@…>, 2 years ago (diff)

Urgent bugfix: Refactor CRC variables from unsigned long to unsigned int to make it work properly on 64-bit machines (with 64-bit Python and libraries). Fixes #1146.

Line 
1unsigned int crc_table[256];
2
3int reflect(unsigned int ref, char ch)
4{ unsigned int value(0);
5
6  for(int i = 1; i < (ch + 1); i++) {
7    if(ref & 1) 
8      value |= 1 << (ch - i); 
9    ref >>= 1; 
10  } 
11  return value; 
12} 
13
14
15bool initCRC32() 
16{ 
17  for(int i = 0; i <= 0xFF; i++) {
18    crc_table[i] = reflect(i, 8) << 24; 
19    for (int j = 0; j < 8; j++) 
20      crc_table[i] = (crc_table[i] << 1) ^ (crc_table[i] & (1 << 31) ? 0x04c11db7 : 0); 
21    crc_table[i] = reflect(crc_table[i], 32); 
22  }
23
24  return true;
25} 
26
27bool __f = initCRC32();
Note: See TracBrowser for help on using the repository browser.