⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc32.c

📁 The main purpose of this project is to add a new scheduling algorithm to GeekOS and to implement a s
💻 C
字号:
/* Copyright abandoned; this code is in the public domain. *//* Provided to GNUnet by peter@horizon.com *//* * Adapted for GeekOS by David Hovemeyer * Code downloaded from OVM (http://www.ovmj.org) */#include <geekos/crc32.h>#include <geekos/kassert.h>#define POLYNOMIAL (ulong_t)0xedb88320static ulong_t crc_table[256];/* * This routine writes each crc_table entry exactly once, * with the correct final value.  Thus, it is safe to call * even on a table that someone else is using concurrently. */void Init_CRC32(void) {  unsigned int i, j;  ulong_t h = 1;  crc_table[0] = 0;  for (i = 128; i; i >>= 1) {    h = (h >> 1) ^ ((h & 1) ? POLYNOMIAL : 0);    /* h is now crc_table[i] */    for (j = 0; j < 256; j += 2*i)      crc_table[i+j] = crc_table[j] ^ h;  }}/* * This computes the standard preset and inverted CRC, as used * by most networking standards.  Start by passing in an initial * chaining value of 0, and then pass in the return value from the * previous crc32() call.  The final return value is the CRC. * Note that this is a little-endian CRC, which is best used with * data transmitted lsbit-first, and it should, itself, be appended * to data in little-endian byte and bit order to preserve the * property of detecting all burst errors of length 32 bits or less. */ulong_t crc32(ulong_t crc, char const *buf, size_t len) {  KASSERT(crc_table[255] != 0);  crc ^= 0xffffffff;  while (len--)    crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];  return crc ^ 0xffffffff;}/* end of crc32.c */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -