00001
00002
00003
00004
00005
00006
00007 #include <stddef.h>
00008 #include <stdint.h>
00009 #include <sys/mman.h>
00010 #include "common.h"
00011
00012 static uint32_t table[256] =
00013 {
00014 0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L,
00015 0xC79A971FL, 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL,
00016 0x8AD958CFL, 0x78B2DBCCL, 0x6BE22838L, 0x9989AB3BL,
00017 0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, 0x5E133C24L,
00018 0x105EC76FL, 0xE235446CL, 0xF165B798L, 0x030E349BL,
00019 0xD7C45070L, 0x25AFD373L, 0x36FF2087L, 0xC494A384L,
00020 0x9A879FA0L, 0x68EC1CA3L, 0x7BBCEF57L, 0x89D76C54L,
00021 0x5D1D08BFL, 0xAF768BBCL, 0xBC267848L, 0x4E4DFB4BL,
00022 0x20BD8EDEL, 0xD2D60DDDL, 0xC186FE29L, 0x33ED7D2AL,
00023 0xE72719C1L, 0x154C9AC2L, 0x061C6936L, 0xF477EA35L,
00024 0xAA64D611L, 0x580F5512L, 0x4B5FA6E6L, 0xB93425E5L,
00025 0x6DFE410EL, 0x9F95C20DL, 0x8CC531F9L, 0x7EAEB2FAL,
00026 0x30E349B1L, 0xC288CAB2L, 0xD1D83946L, 0x23B3BA45L,
00027 0xF779DEAEL, 0x05125DADL, 0x1642AE59L, 0xE4292D5AL,
00028 0xBA3A117EL, 0x4851927DL, 0x5B016189L, 0xA96AE28AL,
00029 0x7DA08661L, 0x8FCB0562L, 0x9C9BF696L, 0x6EF07595L,
00030 0x417B1DBCL, 0xB3109EBFL, 0xA0406D4BL, 0x522BEE48L,
00031 0x86E18AA3L, 0x748A09A0L, 0x67DAFA54L, 0x95B17957L,
00032 0xCBA24573L, 0x39C9C670L, 0x2A993584L, 0xD8F2B687L,
00033 0x0C38D26CL, 0xFE53516FL, 0xED03A29BL, 0x1F682198L,
00034 0x5125DAD3L, 0xA34E59D0L, 0xB01EAA24L, 0x42752927L,
00035 0x96BF4DCCL, 0x64D4CECFL, 0x77843D3BL, 0x85EFBE38L,
00036 0xDBFC821CL, 0x2997011FL, 0x3AC7F2EBL, 0xC8AC71E8L,
00037 0x1C661503L, 0xEE0D9600L, 0xFD5D65F4L, 0x0F36E6F7L,
00038 0x61C69362L, 0x93AD1061L, 0x80FDE395L, 0x72966096L,
00039 0xA65C047DL, 0x5437877EL, 0x4767748AL, 0xB50CF789L,
00040 0xEB1FCBADL, 0x197448AEL, 0x0A24BB5AL, 0xF84F3859L,
00041 0x2C855CB2L, 0xDEEEDFB1L, 0xCDBE2C45L, 0x3FD5AF46L,
00042 0x7198540DL, 0x83F3D70EL, 0x90A324FAL, 0x62C8A7F9L,
00043 0xB602C312L, 0x44694011L, 0x5739B3E5L, 0xA55230E6L,
00044 0xFB410CC2L, 0x092A8FC1L, 0x1A7A7C35L, 0xE811FF36L,
00045 0x3CDB9BDDL, 0xCEB018DEL, 0xDDE0EB2AL, 0x2F8B6829L,
00046 0x82F63B78L, 0x709DB87BL, 0x63CD4B8FL, 0x91A6C88CL,
00047 0x456CAC67L, 0xB7072F64L, 0xA457DC90L, 0x563C5F93L,
00048 0x082F63B7L, 0xFA44E0B4L, 0xE9141340L, 0x1B7F9043L,
00049 0xCFB5F4A8L, 0x3DDE77ABL, 0x2E8E845FL, 0xDCE5075CL,
00050 0x92A8FC17L, 0x60C37F14L, 0x73938CE0L, 0x81F80FE3L,
00051 0x55326B08L, 0xA759E80BL, 0xB4091BFFL, 0x466298FCL,
00052 0x1871A4D8L, 0xEA1A27DBL, 0xF94AD42FL, 0x0B21572CL,
00053 0xDFEB33C7L, 0x2D80B0C4L, 0x3ED04330L, 0xCCBBC033L,
00054 0xA24BB5A6L, 0x502036A5L, 0x4370C551L, 0xB11B4652L,
00055 0x65D122B9L, 0x97BAA1BAL, 0x84EA524EL, 0x7681D14DL,
00056 0x2892ED69L, 0xDAF96E6AL, 0xC9A99D9EL, 0x3BC21E9DL,
00057 0xEF087A76L, 0x1D63F975L, 0x0E330A81L, 0xFC588982L,
00058 0xB21572C9L, 0x407EF1CAL, 0x532E023EL, 0xA145813DL,
00059 0x758FE5D6L, 0x87E466D5L, 0x94B49521L, 0x66DF1622L,
00060 0x38CC2A06L, 0xCAA7A905L, 0xD9F75AF1L, 0x2B9CD9F2L,
00061 0xFF56BD19L, 0x0D3D3E1AL, 0x1E6DCDEEL, 0xEC064EEDL,
00062 0xC38D26C4L, 0x31E6A5C7L, 0x22B65633L, 0xD0DDD530L,
00063 0x0417B1DBL, 0xF67C32D8L, 0xE52CC12CL, 0x1747422FL,
00064 0x49547E0BL, 0xBB3FFD08L, 0xA86F0EFCL, 0x5A048DFFL,
00065 0x8ECEE914L, 0x7CA56A17L, 0x6FF599E3L, 0x9D9E1AE0L,
00066 0xD3D3E1ABL, 0x21B862A8L, 0x32E8915CL, 0xC083125FL,
00067 0x144976B4L, 0xE622F5B7L, 0xF5720643L, 0x07198540L,
00068 0x590AB964L, 0xAB613A67L, 0xB831C993L, 0x4A5A4A90L,
00069 0x9E902E7BL, 0x6CFBAD78L, 0x7FAB5E8CL, 0x8DC0DD8FL,
00070 0xE330A81AL, 0x115B2B19L, 0x020BD8EDL, 0xF0605BEEL,
00071 0x24AA3F05L, 0xD6C1BC06L, 0xC5914FF2L, 0x37FACCF1L,
00072 0x69E9F0D5L, 0x9B8273D6L, 0x88D28022L, 0x7AB90321L,
00073 0xAE7367CAL, 0x5C18E4C9L, 0x4F48173DL, 0xBD23943EL,
00074 0xF36E6F75L, 0x0105EC76L, 0x12551F82L, 0xE03E9C81L,
00075 0x34F4F86AL, 0xC69F7B69L, 0xD5CF889DL, 0x27A40B9EL,
00076 0x79B737BAL, 0x8BDCB4B9L, 0x988C474DL, 0x6AE7C44EL,
00077 0xBE2DA0A5L, 0x4C4623A6L, 0x5F16D052L, 0xAD7D5351L,
00078 };
00079
00082 uint32_t checksum_buf(uint32_t crc32, const unsigned char *buf, size_t count)
00083 {
00084 crc32 = ~crc32;
00085
00086 while (count--) {
00087 crc32 = (crc32 >> 8) ^ table[(crc32 ^ *buf) & 0xFFL];
00088 buf++;
00089 }
00090
00091 return ~crc32;
00092 }
00093