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