Coverage Report

Created: 2026-05-16 06:51

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/dovecot/src/lib/unicode-data.h
Line
Count
Source
1
#ifndef UNICODE_DATA_H
2
#define UNICODE_DATA_H
3
4
#include "unicode-data-tables.h"
5
6
static inline bool
7
unicode_general_category_is_group(enum unicode_general_category gencat)
8
0
{
9
0
  return ((gencat & 0x0f) == 0x00);
10
0
}
Unexecuted instantiation: unichar.c:unicode_general_category_is_group
Unexecuted instantiation: unicode-break.c:unicode_general_category_is_group
Unexecuted instantiation: unicode-transform.c:unicode_general_category_is_group
11
12
static inline const struct unicode_code_point_data *
13
unicode_code_point_get_data(uint32_t cp)
14
0
{
15
0
  unsigned int idx8 = cp >> 24;
16
0
  unsigned int blk16 = unicode_code_points_index8[idx8];
17
0
  unsigned int idx16 = (blk16 << 8) + ((cp >> 16) & 0xFF);
18
0
  unsigned int blk24 = unicode_code_points_index16[idx16];
19
0
  unsigned int idx24 = (blk24 << 8) + ((cp >> 8) & 0xFF);
20
0
  unsigned int blk32 = unicode_code_points_index24[idx24];
21
0
  unsigned int idx32 = (blk32 << 8) + (cp & 0xFF);
22
0
  unsigned int idxcp = unicode_code_points_index32[idx32];
23
24
0
  return &unicode_code_points[idxcp];
25
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_get_data
Unexecuted instantiation: unicode-break.c:unicode_code_point_get_data
Unexecuted instantiation: unicode-transform.c:unicode_code_point_get_data
26
27
static inline bool
28
unicode_code_point_data_is_assigned(
29
  const struct unicode_code_point_data *cp_data)
30
0
{
31
0
  switch (cp_data->general_category) {
32
0
  case UNICODE_GENERAL_CATEGORY_INVALID:
33
0
  case UNICODE_GENERAL_CATEGORY_CN:
34
0
    return FALSE;
35
0
  default:
36
0
    break;
37
0
  }
38
0
  return TRUE;
39
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_data_is_assigned
Unexecuted instantiation: unicode-break.c:unicode_code_point_data_is_assigned
Unexecuted instantiation: unicode-transform.c:unicode_code_point_data_is_assigned
40
41
static inline size_t
42
unicode_code_point_data_get_first_decomposition(
43
  const struct unicode_code_point_data *cp_data,
44
  uint8_t *type_r, const uint32_t **decomp_r)
45
0
{
46
0
  uint32_t offset;
47
0
48
0
  if (type_r != NULL)
49
0
    *type_r = cp_data->decomposition_type;
50
0
  offset = cp_data->decomposition_first_offset;
51
0
  *decomp_r = &unicode_decompositions[offset];
52
0
  return cp_data->decomposition_first_length;
53
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_data_get_first_decomposition
Unexecuted instantiation: unicode-break.c:unicode_code_point_data_get_first_decomposition
Unexecuted instantiation: unicode-transform.c:unicode_code_point_data_get_first_decomposition
54
55
static inline size_t
56
unicode_code_point_data_get_full_decomposition(
57
  const struct unicode_code_point_data *cp_data, bool canonical,
58
  const uint32_t **decomp_r)
59
0
{
60
0
  uint32_t offset;
61
62
0
  if (canonical) {
63
0
    offset = cp_data->decomposition_full_offset;
64
0
    *decomp_r = &unicode_decompositions[offset];
65
0
    return cp_data->decomposition_full_length;
66
0
  }
67
0
  offset = cp_data->decomposition_full_k_offset;
68
0
  *decomp_r = &unicode_decompositions[offset];
69
0
  return cp_data->decomposition_full_k_length;
70
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_data_get_full_decomposition
Unexecuted instantiation: unicode-break.c:unicode_code_point_data_get_full_decomposition
Unexecuted instantiation: unicode-transform.c:unicode_code_point_data_get_full_decomposition
71
72
static inline uint32_t
73
unicode_code_point_data_find_composition(
74
  const struct unicode_code_point_data *cp_data, uint32_t second)
75
0
{
76
0
  const uint32_t *compositions =
77
0
    &unicode_compositions[cp_data->composition_offset];
78
0
  size_t left_idx, right_idx;
79
80
0
  left_idx = 0; right_idx = cp_data->composition_count;
81
0
  while (left_idx < right_idx) {
82
0
    unsigned int idx = (left_idx + right_idx) / 2;
83
84
0
    if (second > compositions[idx])
85
0
      left_idx = idx + 1;
86
0
    else if (second < compositions[idx])
87
0
      right_idx = idx;
88
0
    else {
89
0
      return unicode_composition_primaries[
90
0
        cp_data->composition_offset + idx];
91
0
    }
92
0
  }
93
94
0
  return 0x0000;
95
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_data_find_composition
Unexecuted instantiation: unicode-break.c:unicode_code_point_data_find_composition
Unexecuted instantiation: unicode-transform.c:unicode_code_point_data_find_composition
96
97
static inline bool unicode_code_point_is_assigned(uint32_t cp)
98
0
{
99
0
  const struct unicode_code_point_data *cp_data =
100
0
    unicode_code_point_get_data(cp);
101
0
102
0
  return unicode_code_point_data_is_assigned(cp_data);
103
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_is_assigned
Unexecuted instantiation: unicode-break.c:unicode_code_point_is_assigned
Unexecuted instantiation: unicode-transform.c:unicode_code_point_is_assigned
104
105
static inline size_t
106
unicode_code_point_get_full_decomposition(uint32_t cp, bool canonical,
107
            const uint32_t **decomp_r)
108
0
{
109
0
  const struct unicode_code_point_data *cp_data =
110
0
    unicode_code_point_get_data(cp);
111
112
0
  return unicode_code_point_data_get_full_decomposition(
113
0
    cp_data, canonical, decomp_r);
114
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_get_full_decomposition
Unexecuted instantiation: unicode-break.c:unicode_code_point_get_full_decomposition
Unexecuted instantiation: unicode-transform.c:unicode_code_point_get_full_decomposition
115
116
static inline size_t
117
unicode_code_point_data_get_uppercase_mapping(
118
  const struct unicode_code_point_data *cp_data,
119
  const uint32_t **map_r)
120
0
{
121
0
  uint32_t offset;
122
123
0
  offset = cp_data->uppercase_mapping_offset;
124
0
  *map_r = &unicode_case_mappings[offset];
125
0
  return cp_data->uppercase_mapping_length;
126
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_data_get_uppercase_mapping
Unexecuted instantiation: unicode-break.c:unicode_code_point_data_get_uppercase_mapping
Unexecuted instantiation: unicode-transform.c:unicode_code_point_data_get_uppercase_mapping
127
128
static inline size_t
129
unicode_code_point_data_get_lowercase_mapping(
130
  const struct unicode_code_point_data *cp_data,
131
  const uint32_t **map_r)
132
0
{
133
0
  uint32_t offset;
134
135
0
  offset = cp_data->lowercase_mapping_offset;
136
0
  *map_r = &unicode_case_mappings[offset];
137
0
  return cp_data->lowercase_mapping_length;
138
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_data_get_lowercase_mapping
Unexecuted instantiation: unicode-break.c:unicode_code_point_data_get_lowercase_mapping
Unexecuted instantiation: unicode-transform.c:unicode_code_point_data_get_lowercase_mapping
139
140
static inline size_t
141
unicode_code_point_data_get_casefold_mapping(
142
  const struct unicode_code_point_data *cp_data,
143
  const uint32_t **map_r)
144
0
{
145
0
  uint32_t offset;
146
147
0
  offset = cp_data->casefold_mapping_offset;
148
0
  *map_r = &unicode_case_mappings[offset];
149
0
  return cp_data->casefold_mapping_length;
150
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_data_get_casefold_mapping
Unexecuted instantiation: unicode-break.c:unicode_code_point_data_get_casefold_mapping
Unexecuted instantiation: unicode-transform.c:unicode_code_point_data_get_casefold_mapping
151
152
uint8_t unicode_general_category_from_string(const char *str);
153
154
#endif