hash/Makefile.am, hash/crc32.h: Make the CRC table be `const'.
[mLib] / hash / crc32.h
1 /* -*-c-*-
2 *
3 * Calculating cyclic redundancy values (non-cryptographic!)
4 *
5 * (c) 1998 Straylight/Edgeware
6 */
7
8 /*----- Licensing notice --------------------------------------------------*
9 *
10 * This file is part of the mLib utilities library.
11 *
12 * mLib is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU Library General Public License as
14 * published by the Free Software Foundation; either version 2 of the
15 * License, or (at your option) any later version.
16 *
17 * mLib is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU Library General Public License for more details.
21 *
22 * You should have received a copy of the GNU Library General Public
23 * License along with mLib; if not, write to the Free
24 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
25 * MA 02111-1307, USA.
26 */
27
28 #ifndef MLIB_CRC32_H
29 #define MLIB_CRC32_H
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 /*----- Header files ------------------------------------------------------*/
36
37 #ifndef MLIB_BITS_H
38 # include "bits.h"
39 #endif
40
41 /*----- External values ---------------------------------------------------*/
42
43 extern const uint32 crc32_table[256];
44
45 /*----- Macros ------------------------------------------------------------*/
46
47 /* --- @CRC32@ --- *
48 *
49 * Arguments: @uint32 result@ = where to put the result
50 * @uint32 crc@ = carryover from previous call, or zero
51 * @void *buf@ = pointer to buffer to check
52 * @size_t sz@ = size of the buffer
53 *
54 * Use: A restartable CRC calculator wrapped up in a macro.
55 */
56
57 #define CRC32(result, crc, buf, sz) do { \
58 const octet *_p = (const octet *)(buf); \
59 const octet *_l = _p + (sz); \
60 uint32 _crc = U32(~(crc)); \
61 \
62 while (_p < _l) \
63 _crc = (_crc >> 8) ^ crc32_table[U8(*_p++ ^ _crc)]; \
64 (result) = U32(~_crc); \
65 } while (0)
66
67 /*----- Functions provided ------------------------------------------------*/
68
69 /* --- @crc32@ --- *
70 *
71 * Arguments: @uint32 crc@ = carryover from previous call, or zero
72 * @const void *buf@ = pointer to buffer to check
73 * @size_t sz@ = size of the buffer
74 *
75 * Returns: The CRC updated by the new buffer.
76 *
77 * Use: A restartable CRC calculator. This is just a function
78 * wrapper for the macro version.
79 */
80
81 extern uint32 crc32(uint32 /*crc*/, const void */*buf*/, size_t /*sz*/);
82
83 /*----- That's all, folks -------------------------------------------------*/
84
85 #ifdef __cplusplus
86 }
87 #endif
88
89 #endif