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>
24 rtl_crc32Table (CRC polynomial 0xEDB88320).
26 static const sal_uInt32 rtl_crc32Table
[256] =
29 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
30 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
31 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
32 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
35 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
36 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
37 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
38 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
41 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
42 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
43 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
44 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
47 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
48 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
49 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
50 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
53 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
54 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
55 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
56 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
59 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
60 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
61 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
62 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
65 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
66 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
67 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
68 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
71 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
72 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
73 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
74 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
77 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
78 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
79 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
80 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
83 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
84 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
85 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
86 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
89 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
90 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
91 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
92 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
95 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
96 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
97 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
98 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
101 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
102 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
103 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
104 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
107 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
108 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
109 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
110 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
113 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
114 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
115 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
116 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
119 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
120 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
121 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
122 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
125 #define UPDCRC32(crc, octet) \
126 (rtl_crc32Table[((crc) ^ (octet)) & 0xff] ^ ((crc) >> 8))
128 sal_uInt32 SAL_CALL
rtl_crc32 (
130 const void *Data
, sal_uInt32 DatLen
) SAL_THROW_EXTERN_C()
134 const sal_uInt8
*p
= static_cast<const sal_uInt8
*>(Data
);
135 const sal_uInt8
*q
= p
+ DatLen
;
141 Crc
= UPDCRC32(Crc
, *(p
++));
149 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */