Age Owner TLA Line data Source code
1 : /* contrib/ltree/crc32.c */
2 :
3 : /*
4 : * Implements CRC-32, as used in ltree.
5 : *
6 : * Note that the CRC is used in the on-disk format of GiST indexes, so we
7 : * must stay backwards-compatible!
8 : */
9 :
10 : #include "postgres.h"
11 : #include "ltree.h"
12 :
13 : #ifdef LOWER_NODE
14 : #include <ctype.h>
15 : #define TOLOWER(x) tolower((unsigned char) (x))
16 : #else
17 : #define TOLOWER(x) (x)
18 : #endif
19 :
20 : #include "crc32.h"
21 : #include "utils/pg_crc.h"
22 :
23 : unsigned int
1103 tgl 24 CBC 156349 : ltree_crc32_sz(const char *buf, int size)
25 : {
26 : pg_crc32 crc;
27 156349 : const char *p = buf;
28 :
3078 heikki.linnakangas 29 156349 : INIT_TRADITIONAL_CRC32(crc);
30 375003 : while (size > 0)
31 : {
2878 bruce 32 218654 : char c = (char) TOLOWER(*p);
33 :
3078 heikki.linnakangas 34 437308 : COMP_TRADITIONAL_CRC32(crc, &c, 1);
35 218654 : size--;
36 218654 : p++;
37 : }
38 156349 : FIN_TRADITIONAL_CRC32(crc);
39 156349 : return (unsigned int) crc;
40 : }
|