37 lines
854 B
C
37 lines
854 B
C
|
/* ------------------------------------------------------------------------ */
|
||
|
/* */
|
||
|
/* CRC-calculation routines. */
|
||
|
/* */
|
||
|
/* ------------------------------------------------------------------------ */
|
||
|
|
||
|
#include "uac_crc.h"
|
||
|
|
||
|
|
||
|
ULONG crctable[256];
|
||
|
ULONG rd_crc=0;
|
||
|
|
||
|
|
||
|
void make_crctable(void) // initializes CRC table
|
||
|
{
|
||
|
ULONG r,
|
||
|
i,
|
||
|
j;
|
||
|
|
||
|
for (i = 0; i <= 255; i++)
|
||
|
{
|
||
|
for (r = i, j = 8; j; j--)
|
||
|
r = (r & 1) ? (r >> 1) ^ CRCPOLY : (r >> 1);
|
||
|
crctable[i] = r;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Updates crc from addr till addr+len-1
|
||
|
//
|
||
|
ULONG getcrc(ULONG crc, UCHAR * addr, INT len)
|
||
|
{
|
||
|
while (len--)
|
||
|
crc = crctable[(unsigned char) crc ^ (*addr++)] ^ (crc >> 8);
|
||
|
return (crc);
|
||
|
}
|
||
|
|