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");
+}