LCOV - code coverage report
Current view: top level - contrib/ltree - crc32.c (source / functions) Hit Total Coverage
Test: PostgreSQL 19devel Lines: 14 14 100.0 %
Date: 2026-02-11 23:17:34 Functions: 1 1 100.0 %
Legend: Lines: hit not hit

          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             : #include "crc32.h"
      14             : #include "utils/pg_crc.h"
      15             : #ifdef LOWER_NODE
      16             : #include "utils/pg_locale.h"
      17             : #endif
      18             : 
      19             : #ifdef LOWER_NODE
      20             : 
      21             : unsigned int
      22      313628 : ltree_crc32_sz(const char *buf, int size)
      23             : {
      24             :     pg_crc32    crc;
      25      313628 :     const char *p = buf;
      26      313628 :     const char *end = buf + size;
      27             :     static pg_locale_t locale = NULL;
      28             : 
      29      313628 :     if (!locale)
      30           2 :         locale = pg_database_locale();
      31             : 
      32      313628 :     INIT_TRADITIONAL_CRC32(crc);
      33      752802 :     while (size > 0)
      34             :     {
      35             :         char        foldstr[UNICODE_CASEMAP_BUFSZ];
      36      439174 :         int         srclen = pg_mblen_range(p, end);
      37             :         size_t      foldlen;
      38             : 
      39             :         /* fold one codepoint at a time */
      40      439174 :         foldlen = pg_strfold(foldstr, UNICODE_CASEMAP_BUFSZ, p, srclen,
      41             :                              locale);
      42             : 
      43      878348 :         COMP_TRADITIONAL_CRC32(crc, foldstr, foldlen);
      44             : 
      45      439174 :         size -= srclen;
      46      439174 :         p += srclen;
      47             :     }
      48      313628 :     FIN_TRADITIONAL_CRC32(crc);
      49      313628 :     return (unsigned int) crc;
      50             : }
      51             : 
      52             : #else
      53             : 
      54             : unsigned int
      55             : ltree_crc32_sz(const char *buf, int size)
      56             : {
      57             :     pg_crc32    crc;
      58             :     const char *p = buf;
      59             : 
      60             :     INIT_TRADITIONAL_CRC32(crc);
      61             :     while (size > 0)
      62             :     {
      63             :         COMP_TRADITIONAL_CRC32(crc, p, 1);
      64             :         size--;
      65             :         p++;
      66             :     }
      67             :     FIN_TRADITIONAL_CRC32(crc);
      68             :     return (unsigned int) crc;
      69             : }
      70             : 
      71             : #endif                          /* !LOWER_NODE */

Generated by: LCOV version 1.16