1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #define _RTL_CRC_C_ "$Revision: 1.3 $"
33 #include <sal/types.h>
36 /*========================================================================
38 * rtl_crc32Table (CRC polynomial 0xEDB88320).
40 *======================================================================*/
41 static const sal_uInt32 rtl_crc32Table
[256] =
44 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
45 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
46 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
47 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
50 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
51 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
52 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
53 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
56 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
57 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
58 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
59 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
62 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
63 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
64 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
65 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
68 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
69 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
70 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
71 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
74 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
75 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
76 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
77 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
80 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
81 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
82 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
83 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
86 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
87 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
88 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
89 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
92 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
93 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
94 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
95 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
98 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
99 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
100 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
101 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
104 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
105 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
106 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
107 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
110 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
111 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
112 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
113 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
116 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
117 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
118 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
119 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
122 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
123 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
124 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
125 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
128 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
129 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
130 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
131 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
134 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
135 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
136 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
137 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
140 /*========================================================================
142 * rtl_crc32 implementation.
144 *======================================================================*/
145 #define UPDCRC32(crc, octet) \
146 (rtl_crc32Table[((crc) ^ (octet)) & 0xff] ^ ((crc) >> 8))
151 sal_uInt32 SAL_CALL
rtl_crc32 (
153 const void *Data
, sal_uInt32 DatLen
)
157 register const sal_uInt8
*p
= (const sal_uInt8
*)Data
;
158 register const sal_uInt8
*q
= p
+ DatLen
;
162 Crc
= UPDCRC32(Crc
, *(p
++));