source: rtems/cpukit/libfs/src/jffs2/src/compat-crc32.c @ 6ac6a5c8

Last change on this file since 6ac6a5c8 was 6ac6a5c8, checked in by Sebastian Huber <sebastian.huber@…>, on Mar 27, 2018 at 11:01:56 AM

jffs2: Do not use command line defines

Update #3375.

  • Property mode set to 100644
File size: 8.0 KB
Line 
1#include "rtems-jffs2-config.h"
2
3//==========================================================================
4//
5//      crc32.c
6//
7//      Gary S. Brown's 32 bit CRC
8//
9//==========================================================================
10// ####ECOSGPLCOPYRIGHTBEGIN####                                           
11// -------------------------------------------                             
12// This file is part of eCos, the Embedded Configurable Operating System.   
13// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
14//
15// eCos is free software; you can redistribute it and/or modify it under   
16// the terms of the GNU General Public License as published by the Free     
17// Software Foundation; either version 2 or (at your option) any later     
18// version.                                                                 
19//
20// eCos is distributed in the hope that it will be useful, but WITHOUT     
21// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or   
22// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License   
23// for more details.                                                       
24//
25// You should have received a copy of the GNU General Public License       
26// along with eCos; if not, write to the Free Software Foundation, Inc.,   
27// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.           
28//
29// As a special exception, if other files instantiate templates or use     
30// macros or inline functions from this file, or you compile this file     
31// and link it with other works to produce a work based on this file,       
32// this file does not by itself cause the resulting work to be covered by   
33// the GNU General Public License. However the source code for this file   
34// must still be made available in accordance with section (3) of the GNU   
35// General Public License v2.                                               
36//
37// This exception does not invalidate any other reasons why a work based   
38// on this file might be covered by the GNU General Public License.         
39// -------------------------------------------                             
40// ####ECOSGPLCOPYRIGHTEND####                                             
41//==========================================================================
42//#####DESCRIPTIONBEGIN####
43//
44// Author(s):    gthomas
45// Contributors: gthomas,asl
46// Date:         2001-01-31
47// Purpose:     
48// Description: 
49//             
50// This code is part of eCos (tm).
51//
52//####DESCRIPTIONEND####
53//
54//==========================================================================
55
56#include <cyg/crc/crc.h>
57
58  /* ====================================================================== */
59  /*  COPYRIGHT (C) 1986 Gary S. Brown.  You may use this program, or       */
60  /*  code or tables extracted from it, as desired without restriction.     */
61  /*                                                                        */
62  /*  First, the polynomial itself and its table of feedback terms.  The    */
63  /*  polynomial is                                                         */
64  /*  X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0   */
65  /*                                                                        */
66  /* ====================================================================== */
67
68static const cyg_uint32 crc32_tab[] = {
69      0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
70      0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
71      0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
72      0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
73      0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
74      0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
75      0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
76      0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
77      0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
78      0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
79      0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
80      0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
81      0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
82      0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
83      0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
84      0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
85      0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
86      0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
87      0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
88      0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
89      0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
90      0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
91      0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
92      0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
93      0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
94      0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
95      0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
96      0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
97      0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
98      0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
99      0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
100      0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
101      0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
102      0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
103      0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
104      0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
105      0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
106      0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
107      0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
108      0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
109      0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
110      0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
111      0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
112      0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
113      0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
114      0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
115      0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
116      0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
117      0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
118      0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
119      0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
120      0x2d02ef8dL
121   };
122
123/* This is the standard Gary S. Brown's 32 bit CRC algorithm, but
124   accumulate the CRC into the result of a previous CRC. */
125cyg_uint32
126cyg_crc32_accumulate(cyg_uint32 crc32val, unsigned char *s, int len)
127{
128  int i;
129
130  for (i = 0;  i < len;  i++) {
131    crc32val = crc32_tab[(crc32val ^ s[i]) & 0xff] ^ (crc32val >> 8);
132  }
133  return crc32val;
134}
135
136/* This is the standard Gary S. Brown's 32 bit CRC algorithm */
137cyg_uint32
138cyg_crc32(unsigned char *s, int len)
139{
140  return (cyg_crc32_accumulate(0,s,len));
141}
142
143/* Return a 32-bit CRC of the contents of the buffer accumulating the
144   result from a previous CRC calculation. This uses the Ethernet FCS
145   algorithm.*/
146cyg_uint32
147cyg_ether_crc32_accumulate(cyg_uint32 crc32val, unsigned char *s, int len)
148{
149  int i;
150
151  if (s == 0) return 0L;
152 
153  crc32val = crc32val ^ 0xffffffff;
154  for (i = 0;  i < len;  i++) {
155      crc32val = crc32_tab[(crc32val ^ s[i]) & 0xff] ^ (crc32val >> 8);
156  }
157  return crc32val ^ 0xffffffff;
158}
159
160/* Return a 32-bit CRC of the contents of the buffer, using the
161   Ethernet FCS algorithm. */
162cyg_uint32
163cyg_ether_crc32(unsigned char *s, int len)
164{
165  return cyg_ether_crc32_accumulate(0,s,len);
166}
167
168
Note: See TracBrowser for help on using the repository browser.