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 24 312564 : ltree_crc32_sz(const char *buf, int size) 25 : { 26 : pg_crc32 crc; 27 312564 : const char *p = buf; 28 : 29 312564 : INIT_TRADITIONAL_CRC32(crc); 30 749764 : while (size > 0) 31 : { 32 437200 : char c = (char) TOLOWER(*p); 33 : 34 874400 : COMP_TRADITIONAL_CRC32(crc, &c, 1); 35 437200 : size--; 36 437200 : p++; 37 : } 38 312564 : FIN_TRADITIONAL_CRC32(crc); 39 312564 : return (unsigned int) crc; 40 : }