1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include <sal/types.h>
23 /*========================================================================
25 * rtl_crc32Table (CRC polynomial 0xEDB88320).
27 *======================================================================*/
28 static const sal_uInt32 rtl_crc32Table
[256] =
31 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
32 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
33 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
34 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
37 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
38 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
39 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
40 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
43 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
44 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
45 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
46 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
49 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
50 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
51 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
52 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
55 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
56 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
57 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
58 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
61 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
62 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
63 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
64 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
67 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
68 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
69 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
70 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
73 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
74 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
75 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
76 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
79 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
80 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
81 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
82 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
85 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
86 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
87 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
88 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
91 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
92 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
93 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
94 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
97 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
98 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
99 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
100 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
103 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
104 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
105 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
106 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
109 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
110 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
111 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
112 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
115 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
116 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
117 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
118 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
121 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
122 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
123 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
124 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
127 /*========================================================================
129 * rtl_crc32 implementation.
131 *======================================================================*/
132 #define UPDCRC32(crc, octet) \
133 (rtl_crc32Table[((crc) ^ (octet)) & 0xff] ^ ((crc) >> 8))
138 sal_uInt32 SAL_CALL
rtl_crc32 (
140 const void *Data
, sal_uInt32 DatLen
) SAL_THROW_EXTERN_C()
144 const sal_uInt8
*p
= (const sal_uInt8
*)Data
;
145 const sal_uInt8
*q
= p
+ DatLen
;
149 Crc
= UPDCRC32(Crc
, *(p
++));
155 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */