summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pim6sd/crc.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/pim6sd/crc.c')
-rw-r--r--usr.sbin/pim6sd/crc.c54
1 files changed, 30 insertions, 24 deletions
diff --git a/usr.sbin/pim6sd/crc.c b/usr.sbin/pim6sd/crc.c
index 917371e..ca16b63 100644
--- a/usr.sbin/pim6sd/crc.c
+++ b/usr.sbin/pim6sd/crc.c
@@ -40,58 +40,64 @@
*/
/* CRC implantation : stolen from RFC 2083 section 15.*/
+#include <sys/cdefs.h>
+#include "crc.h"
+
/* Table of CRCs of all 8-bit messages. */
unsigned long crc_table[256];
-
+
/* Flag: has the table been computed? Initially false. */
int crc_table_computed = 0;
+
+/* Make the table for a fast CRC. */
-/* Make the table for a fast CRC. */
+static void make_crc_table __P((void));
+static unsigned long update_crc __P((unsigned long, unsigned char *, int));
-void make_crc_table(void)
+static void make_crc_table(void)
{
- unsigned long c;
+ unsigned long c;
int n, k;
- for (n = 0; n < 256; n++)
+ for (n = 0; n < 256; n++)
{
c = (unsigned long) n;
- for (k = 0; k < 8; k++)
+ for (k = 0; k < 8; k++)
{
- if (c & 1)
+ if (c & 1)
c = 0xedb88320L ^ (c >> 1);
- else
- c = c >> 1;
- }
+ else
+ c = c >> 1;
+ }
crc_table[n] = c;
- }
+ }
crc_table_computed = 1;
-}
-
+}
+
/* Update a running CRC with the bytes buf[0..len-1]--the CRC
should be initialized to all 1's, and the transmitted value
is the 1's complement of the final running CRC (see the
crc() routine below)). */
-
-unsigned long update_crc(unsigned long crc, unsigned char *buf,
+
+static unsigned long update_crc(unsigned long crc, unsigned char *buf,
int len)
-{
+{
unsigned long c = crc;
- int n;
-
+ int n;
+
if (!crc_table_computed)
make_crc_table();
- for (n = 0; n < len; n++)
+ for (n = 0; n < len; n++)
{
c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8);
- }
+ }
return c;
-}
-
+}
+
/* Return the CRC of the bytes buf[0..len-1]. */
unsigned long crc(unsigned char *buf, int len)
-{
+{
return update_crc(0xffffffffL, buf, len) ^ 0xffffffffL;
-}
+}
OpenPOWER on IntegriCloud