FreeCalypso > hg > freecalypso-sw
diff stashaway/mkcrc32tab.c @ 33:8fbd52a639a5
CRC-32 table, will be used for flash dump integrity checks
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sat, 04 May 2013 08:33:26 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stashaway/mkcrc32tab.c Sat May 04 08:33:26 2013 +0000 @@ -0,0 +1,56 @@ +/* + * This program generates the CRC-32 table for the LSB-first direction. + * Derived from the MSB-first version written years earlier by the + * same author (Michael Spacefalcon) for SDSL/ATM AAL5. + */ + +#include <sys/types.h> +#include <stdio.h> + +u_long table[256]; + +main(argc, argv) + char **argv; +{ + build_table(); + emit_table(); + exit(0); +} + +u_long +crc_byte(crc, inb) + u_long crc; + int inb; +{ + register int bit; + + crc ^= inb & 0xFF; + for (bit = 0; bit < 8; bit++) { + if (crc & 1) + crc = (crc >> 1) ^ 0xEDB88320; + else + crc >>= 1; + } + return(crc); +} + +build_table() +{ + int i; + + for (i = 0; i < 256; i++) + table[i] = crc_byte(0, i); +} + +emit_table() +{ + int i, j, idx; + + printf("unsigned long crc32_table[256] = {\n"); + for (i = 0, idx = 0; i < 64; i++) { + putchar('\t'); + for (j = 0; j < 4; j++, idx++) + printf("0x%08X,%c", table[idx], j==3 ? '\n' : ' '); + } + printf("};\n"); +}