/* contrib/ltree/crc32.c */ /* * Implements CRC-32, as used in ltree. * * Note that the CRC is used in the on-disk format of GiST indexes, so we * must stay backwards-compatible! */ #include "postgres.h" #ifdef LOWER_NODE #include #define TOLOWER(x) tolower((unsigned char) (x)) #else #define TOLOWER(x) (x) #endif #include "crc32.h" #include "utils/pg_crc.h" unsigned int ltree_crc32_sz(char *buf, int size) { pg_crc32 crc; char *p = buf; INIT_TRADITIONAL_CRC32(crc); while (size > 0) { char c = (char) TOLOWER(*p); COMP_TRADITIONAL_CRC32(crc, &c, 1); size--; p++; } FIN_TRADITIONAL_CRC32(crc); return (unsigned int) crc; }