/src/postgres/src/include/mb/pg_wchar.h
Line | Count | Source (jump to first uncovered line) |
1 | | /*------------------------------------------------------------------------- |
2 | | * |
3 | | * pg_wchar.h |
4 | | * multibyte-character support |
5 | | * |
6 | | * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group |
7 | | * Portions Copyright (c) 1994, Regents of the University of California |
8 | | * |
9 | | * src/include/mb/pg_wchar.h |
10 | | * |
11 | | * NOTES |
12 | | * This is used both by the backend and by frontends, but should not be |
13 | | * included by libpq client programs. In particular, a libpq client |
14 | | * should not assume that the encoding IDs used by the version of libpq |
15 | | * it's linked to match up with the IDs declared here. |
16 | | * To help prevent mistakes, relevant functions that are exported by |
17 | | * libpq have a physically different name when being referenced |
18 | | * statically. |
19 | | * |
20 | | *------------------------------------------------------------------------- |
21 | | */ |
22 | | #ifndef PG_WCHAR_H |
23 | | #define PG_WCHAR_H |
24 | | |
25 | | /* |
26 | | * The pg_wchar type |
27 | | */ |
28 | | typedef unsigned int pg_wchar; |
29 | | |
30 | | /* |
31 | | * Maximum byte length of multibyte characters in any backend encoding |
32 | | */ |
33 | 0 | #define MAX_MULTIBYTE_CHAR_LEN 4 |
34 | | |
35 | | /* |
36 | | * various definitions for EUC |
37 | | */ |
38 | 0 | #define SS2 0x8e /* single shift 2 (JIS0201) */ |
39 | 0 | #define SS3 0x8f /* single shift 3 (JIS0212) */ |
40 | | |
41 | | /* |
42 | | * SJIS validation macros |
43 | | */ |
44 | 0 | #define ISSJISHEAD(c) (((c) >= 0x81 && (c) <= 0x9f) || ((c) >= 0xe0 && (c) <= 0xfc)) |
45 | 0 | #define ISSJISTAIL(c) (((c) >= 0x40 && (c) <= 0x7e) || ((c) >= 0x80 && (c) <= 0xfc)) |
46 | | |
47 | | /*---------------------------------------------------- |
48 | | * MULE Internal Encoding (MIC) |
49 | | * |
50 | | * This encoding follows the design used within XEmacs; it is meant to |
51 | | * subsume many externally-defined character sets. Each character includes |
52 | | * identification of the character set it belongs to, so the encoding is |
53 | | * general but somewhat bulky. |
54 | | * |
55 | | * Currently PostgreSQL supports 5 types of MULE character sets: |
56 | | * |
57 | | * 1) 1-byte ASCII characters. Each byte is below 0x80. |
58 | | * |
59 | | * 2) "Official" single byte charsets such as ISO-8859-1 (Latin1). |
60 | | * Each MULE character consists of 2 bytes: LC1 + C1, where LC1 is |
61 | | * an identifier for the charset (in the range 0x81 to 0x8d) and C1 |
62 | | * is the character code (in the range 0xa0 to 0xff). |
63 | | * |
64 | | * 3) "Private" single byte charsets such as SISHENG. Each MULE |
65 | | * character consists of 3 bytes: LCPRV1 + LC12 + C1, where LCPRV1 |
66 | | * is a private-charset flag, LC12 is an identifier for the charset, |
67 | | * and C1 is the character code (in the range 0xa0 to 0xff). |
68 | | * LCPRV1 is either 0x9a (if LC12 is in the range 0xa0 to 0xdf) |
69 | | * or 0x9b (if LC12 is in the range 0xe0 to 0xef). |
70 | | * |
71 | | * 4) "Official" multibyte charsets such as JIS X0208. Each MULE |
72 | | * character consists of 3 bytes: LC2 + C1 + C2, where LC2 is |
73 | | * an identifier for the charset (in the range 0x90 to 0x99) and C1 |
74 | | * and C2 form the character code (each in the range 0xa0 to 0xff). |
75 | | * |
76 | | * 5) "Private" multibyte charsets such as CNS 11643-1992 Plane 3. |
77 | | * Each MULE character consists of 4 bytes: LCPRV2 + LC22 + C1 + C2, |
78 | | * where LCPRV2 is a private-charset flag, LC22 is an identifier for |
79 | | * the charset, and C1 and C2 form the character code (each in the range |
80 | | * 0xa0 to 0xff). LCPRV2 is either 0x9c (if LC22 is in the range 0xf0 |
81 | | * to 0xf4) or 0x9d (if LC22 is in the range 0xf5 to 0xfe). |
82 | | * |
83 | | * "Official" encodings are those that have been assigned code numbers by |
84 | | * the XEmacs project; "private" encodings have Postgres-specific charset |
85 | | * identifiers. |
86 | | * |
87 | | * See the "XEmacs Internals Manual", available at http://www.xemacs.org, |
88 | | * for more details. Note that for historical reasons, Postgres' |
89 | | * private-charset flag values do not match what XEmacs says they should be, |
90 | | * so this isn't really exactly MULE (not that private charsets would be |
91 | | * interoperable anyway). |
92 | | * |
93 | | * Note that XEmacs's implementation is different from what emacs does. |
94 | | * We follow emacs's implementation, rather than XEmacs's. |
95 | | *---------------------------------------------------- |
96 | | */ |
97 | | |
98 | | /* |
99 | | * Charset identifiers (also called "leading bytes" in the MULE documentation) |
100 | | */ |
101 | | |
102 | | /* |
103 | | * Charset IDs for official single byte encodings (0x81-0x8e) |
104 | | */ |
105 | | #define LC_ISO8859_1 0x81 /* ISO8859 Latin 1 */ |
106 | | #define LC_ISO8859_2 0x82 /* ISO8859 Latin 2 */ |
107 | | #define LC_ISO8859_3 0x83 /* ISO8859 Latin 3 */ |
108 | | #define LC_ISO8859_4 0x84 /* ISO8859 Latin 4 */ |
109 | | #define LC_TIS620 0x85 /* Thai (not supported yet) */ |
110 | | #define LC_ISO8859_7 0x86 /* Greek (not supported yet) */ |
111 | | #define LC_ISO8859_6 0x87 /* Arabic (not supported yet) */ |
112 | | #define LC_ISO8859_8 0x88 /* Hebrew (not supported yet) */ |
113 | | #define LC_JISX0201K 0x89 /* Japanese 1 byte kana */ |
114 | | #define LC_JISX0201R 0x8a /* Japanese 1 byte Roman */ |
115 | | /* Note that 0x8b seems to be unused as of Emacs 20.7. |
116 | | * However, there might be a chance that 0x8b could be used |
117 | | * in later versions of Emacs. |
118 | | */ |
119 | | #define LC_KOI8_R 0x8b /* Cyrillic KOI8-R */ |
120 | | #define LC_ISO8859_5 0x8c /* ISO8859 Cyrillic */ |
121 | | #define LC_ISO8859_9 0x8d /* ISO8859 Latin 5 (not supported yet) */ |
122 | | #define LC_ISO8859_15 0x8e /* ISO8859 Latin 15 (not supported yet) */ |
123 | | /* #define CONTROL_1 0x8f control characters (unused) */ |
124 | | |
125 | | /* Is a leading byte for "official" single byte encodings? */ |
126 | 0 | #define IS_LC1(c) ((unsigned char)(c) >= 0x81 && (unsigned char)(c) <= 0x8d) |
127 | | |
128 | | /* |
129 | | * Charset IDs for official multibyte encodings (0x90-0x99) |
130 | | * 0x9a-0x9d are free. 0x9e and 0x9f are reserved. |
131 | | */ |
132 | | #define LC_JISX0208_1978 0x90 /* Japanese Kanji, old JIS (not supported) */ |
133 | | #define LC_GB2312_80 0x91 /* Chinese */ |
134 | | #define LC_JISX0208 0x92 /* Japanese Kanji (JIS X 0208) */ |
135 | | #define LC_KS5601 0x93 /* Korean */ |
136 | | #define LC_JISX0212 0x94 /* Japanese Kanji (JIS X 0212) */ |
137 | | #define LC_CNS11643_1 0x95 /* CNS 11643-1992 Plane 1 */ |
138 | | #define LC_CNS11643_2 0x96 /* CNS 11643-1992 Plane 2 */ |
139 | | #define LC_JISX0213_1 0x97 /* Japanese Kanji (JIS X 0213 Plane 1) |
140 | | * (not supported) */ |
141 | | #define LC_BIG5_1 0x98 /* Plane 1 Chinese traditional (not |
142 | | * supported) */ |
143 | | #define LC_BIG5_2 0x99 /* Plane 1 Chinese traditional (not |
144 | | * supported) */ |
145 | | |
146 | | /* Is a leading byte for "official" multibyte encodings? */ |
147 | 0 | #define IS_LC2(c) ((unsigned char)(c) >= 0x90 && (unsigned char)(c) <= 0x99) |
148 | | |
149 | | /* |
150 | | * Postgres-specific prefix bytes for "private" single byte encodings |
151 | | * (According to the MULE docs, we should be using 0x9e for this) |
152 | | */ |
153 | 0 | #define LCPRV1_A 0x9a |
154 | 0 | #define LCPRV1_B 0x9b |
155 | 0 | #define IS_LCPRV1(c) ((unsigned char)(c) == LCPRV1_A || (unsigned char)(c) == LCPRV1_B) |
156 | | #define IS_LCPRV1_A_RANGE(c) \ |
157 | 0 | ((unsigned char)(c) >= 0xa0 && (unsigned char)(c) <= 0xdf) |
158 | | #define IS_LCPRV1_B_RANGE(c) \ |
159 | 0 | ((unsigned char)(c) >= 0xe0 && (unsigned char)(c) <= 0xef) |
160 | | |
161 | | /* |
162 | | * Postgres-specific prefix bytes for "private" multibyte encodings |
163 | | * (According to the MULE docs, we should be using 0x9f for this) |
164 | | */ |
165 | 0 | #define LCPRV2_A 0x9c |
166 | 0 | #define LCPRV2_B 0x9d |
167 | 0 | #define IS_LCPRV2(c) ((unsigned char)(c) == LCPRV2_A || (unsigned char)(c) == LCPRV2_B) |
168 | | #define IS_LCPRV2_A_RANGE(c) \ |
169 | 0 | ((unsigned char)(c) >= 0xf0 && (unsigned char)(c) <= 0xf4) |
170 | | #define IS_LCPRV2_B_RANGE(c) \ |
171 | 0 | ((unsigned char)(c) >= 0xf5 && (unsigned char)(c) <= 0xfe) |
172 | | |
173 | | /* |
174 | | * Charset IDs for private single byte encodings (0xa0-0xef) |
175 | | */ |
176 | | #define LC_SISHENG 0xa0 /* Chinese SiSheng characters for |
177 | | * PinYin/ZhuYin (not supported) */ |
178 | | #define LC_IPA 0xa1 /* IPA (International Phonetic |
179 | | * Association) (not supported) */ |
180 | | #define LC_VISCII_LOWER 0xa2 /* Vietnamese VISCII1.1 lower-case (not |
181 | | * supported) */ |
182 | | #define LC_VISCII_UPPER 0xa3 /* Vietnamese VISCII1.1 upper-case (not |
183 | | * supported) */ |
184 | | #define LC_ARABIC_DIGIT 0xa4 /* Arabic digit (not supported) */ |
185 | | #define LC_ARABIC_1_COLUMN 0xa5 /* Arabic 1-column (not supported) */ |
186 | | #define LC_ASCII_RIGHT_TO_LEFT 0xa6 /* ASCII (left half of ISO8859-1) with |
187 | | * right-to-left direction (not |
188 | | * supported) */ |
189 | | #define LC_LAO 0xa7 /* Lao characters (ISO10646 0E80..0EDF) |
190 | | * (not supported) */ |
191 | | #define LC_ARABIC_2_COLUMN 0xa8 /* Arabic 1-column (not supported) */ |
192 | | |
193 | | /* |
194 | | * Charset IDs for private multibyte encodings (0xf0-0xff) |
195 | | */ |
196 | | #define LC_INDIAN_1_COLUMN 0xf0 /* Indian charset for 1-column width |
197 | | * glyphs (not supported) */ |
198 | | #define LC_TIBETAN_1_COLUMN 0xf1 /* Tibetan 1-column width glyphs (not |
199 | | * supported) */ |
200 | | #define LC_UNICODE_SUBSET_2 0xf2 /* Unicode characters of the range |
201 | | * U+2500..U+33FF. (not supported) */ |
202 | | #define LC_UNICODE_SUBSET_3 0xf3 /* Unicode characters of the range |
203 | | * U+E000..U+FFFF. (not supported) */ |
204 | | #define LC_UNICODE_SUBSET 0xf4 /* Unicode characters of the range |
205 | | * U+0100..U+24FF. (not supported) */ |
206 | | #define LC_ETHIOPIC 0xf5 /* Ethiopic characters (not supported) */ |
207 | | #define LC_CNS11643_3 0xf6 /* CNS 11643-1992 Plane 3 */ |
208 | | #define LC_CNS11643_4 0xf7 /* CNS 11643-1992 Plane 4 */ |
209 | | #define LC_CNS11643_5 0xf8 /* CNS 11643-1992 Plane 5 */ |
210 | | #define LC_CNS11643_6 0xf9 /* CNS 11643-1992 Plane 6 */ |
211 | | #define LC_CNS11643_7 0xfa /* CNS 11643-1992 Plane 7 */ |
212 | | #define LC_INDIAN_2_COLUMN 0xfb /* Indian charset for 2-column width |
213 | | * glyphs (not supported) */ |
214 | | #define LC_TIBETAN 0xfc /* Tibetan (not supported) */ |
215 | | /* #define FREE 0xfd free (unused) */ |
216 | | /* #define FREE 0xfe free (unused) */ |
217 | | /* #define FREE 0xff free (unused) */ |
218 | | |
219 | | /*---------------------------------------------------- |
220 | | * end of MULE stuff |
221 | | *---------------------------------------------------- |
222 | | */ |
223 | | |
224 | | /* |
225 | | * PostgreSQL encoding identifiers |
226 | | * |
227 | | * WARNING: If you add some encoding don't forget to update |
228 | | * the pg_enc2name_tbl[] array (in src/common/encnames.c), |
229 | | * the pg_enc2gettext_tbl[] array (in src/common/encnames.c) and |
230 | | * the pg_wchar_table[] array (in src/common/wchar.c) and to check |
231 | | * PG_ENCODING_BE_LAST macro. |
232 | | * |
233 | | * PG_SQL_ASCII is default encoding and must be = 0. |
234 | | * |
235 | | * XXX We must avoid renumbering any backend encoding until libpq's major |
236 | | * version number is increased beyond 5; it turns out that the backend |
237 | | * encoding IDs are effectively part of libpq's ABI as far as 8.2 initdb and |
238 | | * psql are concerned. |
239 | | */ |
240 | | typedef enum pg_enc |
241 | | { |
242 | | PG_SQL_ASCII = 0, /* SQL/ASCII */ |
243 | | PG_EUC_JP, /* EUC for Japanese */ |
244 | | PG_EUC_CN, /* EUC for Chinese */ |
245 | | PG_EUC_KR, /* EUC for Korean */ |
246 | | PG_EUC_TW, /* EUC for Taiwan */ |
247 | | PG_EUC_JIS_2004, /* EUC-JIS-2004 */ |
248 | | PG_UTF8, /* Unicode UTF8 */ |
249 | | PG_MULE_INTERNAL, /* Mule internal code */ |
250 | | PG_LATIN1, /* ISO-8859-1 Latin 1 */ |
251 | | PG_LATIN2, /* ISO-8859-2 Latin 2 */ |
252 | | PG_LATIN3, /* ISO-8859-3 Latin 3 */ |
253 | | PG_LATIN4, /* ISO-8859-4 Latin 4 */ |
254 | | PG_LATIN5, /* ISO-8859-9 Latin 5 */ |
255 | | PG_LATIN6, /* ISO-8859-10 Latin6 */ |
256 | | PG_LATIN7, /* ISO-8859-13 Latin7 */ |
257 | | PG_LATIN8, /* ISO-8859-14 Latin8 */ |
258 | | PG_LATIN9, /* ISO-8859-15 Latin9 */ |
259 | | PG_LATIN10, /* ISO-8859-16 Latin10 */ |
260 | | PG_WIN1256, /* windows-1256 */ |
261 | | PG_WIN1258, /* Windows-1258 */ |
262 | | PG_WIN866, /* (MS-DOS CP866) */ |
263 | | PG_WIN874, /* windows-874 */ |
264 | | PG_KOI8R, /* KOI8-R */ |
265 | | PG_WIN1251, /* windows-1251 */ |
266 | | PG_WIN1252, /* windows-1252 */ |
267 | | PG_ISO_8859_5, /* ISO-8859-5 */ |
268 | | PG_ISO_8859_6, /* ISO-8859-6 */ |
269 | | PG_ISO_8859_7, /* ISO-8859-7 */ |
270 | | PG_ISO_8859_8, /* ISO-8859-8 */ |
271 | | PG_WIN1250, /* windows-1250 */ |
272 | | PG_WIN1253, /* windows-1253 */ |
273 | | PG_WIN1254, /* windows-1254 */ |
274 | | PG_WIN1255, /* windows-1255 */ |
275 | | PG_WIN1257, /* windows-1257 */ |
276 | | PG_KOI8U, /* KOI8-U */ |
277 | | /* PG_ENCODING_BE_LAST points to the above entry */ |
278 | | |
279 | | /* followings are for client encoding only */ |
280 | | PG_SJIS, /* Shift JIS (Windows-932) */ |
281 | | PG_BIG5, /* Big5 (Windows-950) */ |
282 | | PG_GBK, /* GBK (Windows-936) */ |
283 | | PG_UHC, /* UHC (Windows-949) */ |
284 | | PG_GB18030, /* GB18030 */ |
285 | | PG_JOHAB, /* EUC for Korean JOHAB */ |
286 | | PG_SHIFT_JIS_2004, /* Shift-JIS-2004 */ |
287 | | _PG_LAST_ENCODING_ /* mark only */ |
288 | | |
289 | | } pg_enc; |
290 | | |
291 | 0 | #define PG_ENCODING_BE_LAST PG_KOI8U |
292 | | |
293 | | /* |
294 | | * Please use these tests before access to pg_enc2name_tbl[] |
295 | | * or to other places... |
296 | | */ |
297 | | #define PG_VALID_BE_ENCODING(_enc) \ |
298 | 0 | ((_enc) >= 0 && (_enc) <= PG_ENCODING_BE_LAST) |
299 | | |
300 | | #define PG_ENCODING_IS_CLIENT_ONLY(_enc) \ |
301 | 0 | ((_enc) > PG_ENCODING_BE_LAST && (_enc) < _PG_LAST_ENCODING_) |
302 | | |
303 | | #define PG_VALID_ENCODING(_enc) \ |
304 | 643 | ((_enc) >= 0 && (_enc) < _PG_LAST_ENCODING_) |
305 | | |
306 | | /* On FE are possible all encodings */ |
307 | 0 | #define PG_VALID_FE_ENCODING(_enc) PG_VALID_ENCODING(_enc) |
308 | | |
309 | | /* |
310 | | * When converting strings between different encodings, we assume that space |
311 | | * for converted result is 4-to-1 growth in the worst case. The rate for |
312 | | * currently supported encoding pairs are within 3 (SJIS JIS X0201 half width |
313 | | * kana -> UTF8 is the worst case). So "4" should be enough for the moment. |
314 | | * |
315 | | * Note that this is not the same as the maximum character width in any |
316 | | * particular encoding. |
317 | | */ |
318 | 0 | #define MAX_CONVERSION_GROWTH 4 |
319 | | |
320 | | /* |
321 | | * Maximum byte length of a string that's required in any encoding to convert |
322 | | * at least one character to any other encoding. In other words, if you feed |
323 | | * MAX_CONVERSION_INPUT_LENGTH bytes to any encoding conversion function, it |
324 | | * is guaranteed to be able to convert something without needing more input |
325 | | * (assuming the input is valid). |
326 | | * |
327 | | * Currently, the maximum case is the conversion UTF8 -> SJIS JIS X0201 half |
328 | | * width kana, where a pair of UTF-8 characters is converted into a single |
329 | | * SHIFT_JIS_2004 character (the reverse of the worst case for |
330 | | * MAX_CONVERSION_GROWTH). It needs 6 bytes of input. In theory, a |
331 | | * user-defined conversion function might have more complicated cases, although |
332 | | * for the reverse mapping you would probably also need to bump up |
333 | | * MAX_CONVERSION_GROWTH. But there is no need to be stingy here, so make it |
334 | | * generous. |
335 | | */ |
336 | 0 | #define MAX_CONVERSION_INPUT_LENGTH 16 |
337 | | |
338 | | /* |
339 | | * Maximum byte length of the string equivalent to any one Unicode code point, |
340 | | * in any backend encoding. The current value assumes that a 4-byte UTF-8 |
341 | | * character might expand by MAX_CONVERSION_GROWTH, which is a huge |
342 | | * overestimate. But in current usage we don't allocate large multiples of |
343 | | * this, so there's little point in being stingy. |
344 | | */ |
345 | 0 | #define MAX_UNICODE_EQUIVALENT_STRING 16 |
346 | | |
347 | | /* |
348 | | * Table for mapping an encoding number to official encoding name and |
349 | | * possibly other subsidiary data. Be careful to check encoding number |
350 | | * before accessing a table entry! |
351 | | * |
352 | | * if (PG_VALID_ENCODING(encoding)) |
353 | | * pg_enc2name_tbl[ encoding ]; |
354 | | */ |
355 | | typedef struct pg_enc2name |
356 | | { |
357 | | const char *name; |
358 | | pg_enc encoding; |
359 | | #ifdef WIN32 |
360 | | unsigned codepage; /* codepage for WIN32 */ |
361 | | #endif |
362 | | } pg_enc2name; |
363 | | |
364 | | extern PGDLLIMPORT const pg_enc2name pg_enc2name_tbl[]; |
365 | | |
366 | | /* |
367 | | * Encoding names for gettext |
368 | | */ |
369 | | extern PGDLLIMPORT const char *pg_enc2gettext_tbl[]; |
370 | | |
371 | | /* |
372 | | * pg_wchar stuff |
373 | | */ |
374 | | typedef int (*mb2wchar_with_len_converter) (const unsigned char *from, |
375 | | pg_wchar *to, |
376 | | int len); |
377 | | |
378 | | typedef int (*wchar2mb_with_len_converter) (const pg_wchar *from, |
379 | | unsigned char *to, |
380 | | int len); |
381 | | |
382 | | typedef int (*mblen_converter) (const unsigned char *mbstr); |
383 | | |
384 | | typedef int (*mbdisplaylen_converter) (const unsigned char *mbstr); |
385 | | |
386 | | typedef bool (*mbcharacter_incrementer) (unsigned char *mbstr, int len); |
387 | | |
388 | | typedef int (*mbchar_verifier) (const unsigned char *mbstr, int len); |
389 | | |
390 | | typedef int (*mbstr_verifier) (const unsigned char *mbstr, int len); |
391 | | |
392 | | typedef struct |
393 | | { |
394 | | mb2wchar_with_len_converter mb2wchar_with_len; /* convert a multibyte |
395 | | * string to a wchar */ |
396 | | wchar2mb_with_len_converter wchar2mb_with_len; /* convert a wchar string |
397 | | * to a multibyte */ |
398 | | mblen_converter mblen; /* get byte length of a char */ |
399 | | mbdisplaylen_converter dsplen; /* get display width of a char */ |
400 | | mbchar_verifier mbverifychar; /* verify multibyte character */ |
401 | | mbstr_verifier mbverifystr; /* verify multibyte string */ |
402 | | int maxmblen; /* max bytes for a char in this encoding */ |
403 | | } pg_wchar_tbl; |
404 | | |
405 | | extern PGDLLIMPORT const pg_wchar_tbl pg_wchar_table[]; |
406 | | |
407 | | /* |
408 | | * Data structures for conversions between UTF-8 and other encodings |
409 | | * (UtfToLocal() and LocalToUtf()). In these data structures, characters of |
410 | | * either encoding are represented by uint32 words; hence we can only support |
411 | | * characters up to 4 bytes long. For example, the byte sequence 0xC2 0x89 |
412 | | * would be represented by 0x0000C289, and 0xE8 0xA2 0xB4 by 0x00E8A2B4. |
413 | | * |
414 | | * There are three possible ways a character can be mapped: |
415 | | * |
416 | | * 1. Using a radix tree, from source to destination code. |
417 | | * 2. Using a sorted array of source -> destination code pairs. This |
418 | | * method is used for "combining" characters. There are so few of |
419 | | * them that building a radix tree would be wasteful. |
420 | | * 3. Using a conversion function. |
421 | | */ |
422 | | |
423 | | /* |
424 | | * Radix tree for character conversion. |
425 | | * |
426 | | * Logically, this is actually four different radix trees, for 1-byte, |
427 | | * 2-byte, 3-byte and 4-byte inputs. The 1-byte tree is a simple lookup |
428 | | * table from source to target code. The 2-byte tree consists of two levels: |
429 | | * one lookup table for the first byte, where the value in the lookup table |
430 | | * points to a lookup table for the second byte. And so on. |
431 | | * |
432 | | * Physically, all the trees are stored in one big array, in 'chars16' or |
433 | | * 'chars32', depending on the maximum value that needs to be represented. For |
434 | | * each level in each tree, we also store lower and upper bound of allowed |
435 | | * values - values outside those bounds are considered invalid, and are left |
436 | | * out of the tables. |
437 | | * |
438 | | * In the intermediate levels of the trees, the values stored are offsets |
439 | | * into the chars[16|32] array. |
440 | | * |
441 | | * In the beginning of the chars[16|32] array, there is always a number of |
442 | | * zeros, so that you safely follow an index from an intermediate table |
443 | | * without explicitly checking for a zero. Following a zero any number of |
444 | | * times will always bring you to the dummy, all-zeros table in the |
445 | | * beginning. This helps to shave some cycles when looking up values. |
446 | | */ |
447 | | typedef struct |
448 | | { |
449 | | /* |
450 | | * Array containing all the values. Only one of chars16 or chars32 is |
451 | | * used, depending on how wide the values we need to represent are. |
452 | | */ |
453 | | const uint16 *chars16; |
454 | | const uint32 *chars32; |
455 | | |
456 | | /* Radix tree for 1-byte inputs */ |
457 | | uint32 b1root; /* offset of table in the chars[16|32] array */ |
458 | | uint8 b1_lower; /* min allowed value for a single byte input */ |
459 | | uint8 b1_upper; /* max allowed value for a single byte input */ |
460 | | |
461 | | /* Radix tree for 2-byte inputs */ |
462 | | uint32 b2root; /* offset of 1st byte's table */ |
463 | | uint8 b2_1_lower; /* min/max allowed value for 1st input byte */ |
464 | | uint8 b2_1_upper; |
465 | | uint8 b2_2_lower; /* min/max allowed value for 2nd input byte */ |
466 | | uint8 b2_2_upper; |
467 | | |
468 | | /* Radix tree for 3-byte inputs */ |
469 | | uint32 b3root; /* offset of 1st byte's table */ |
470 | | uint8 b3_1_lower; /* min/max allowed value for 1st input byte */ |
471 | | uint8 b3_1_upper; |
472 | | uint8 b3_2_lower; /* min/max allowed value for 2nd input byte */ |
473 | | uint8 b3_2_upper; |
474 | | uint8 b3_3_lower; /* min/max allowed value for 3rd input byte */ |
475 | | uint8 b3_3_upper; |
476 | | |
477 | | /* Radix tree for 4-byte inputs */ |
478 | | uint32 b4root; /* offset of 1st byte's table */ |
479 | | uint8 b4_1_lower; /* min/max allowed value for 1st input byte */ |
480 | | uint8 b4_1_upper; |
481 | | uint8 b4_2_lower; /* min/max allowed value for 2nd input byte */ |
482 | | uint8 b4_2_upper; |
483 | | uint8 b4_3_lower; /* min/max allowed value for 3rd input byte */ |
484 | | uint8 b4_3_upper; |
485 | | uint8 b4_4_lower; /* min/max allowed value for 4th input byte */ |
486 | | uint8 b4_4_upper; |
487 | | |
488 | | } pg_mb_radix_tree; |
489 | | |
490 | | /* |
491 | | * UTF-8 to local code conversion map (for combined characters) |
492 | | */ |
493 | | typedef struct |
494 | | { |
495 | | uint32 utf1; /* UTF-8 code 1 */ |
496 | | uint32 utf2; /* UTF-8 code 2 */ |
497 | | uint32 code; /* local code */ |
498 | | } pg_utf_to_local_combined; |
499 | | |
500 | | /* |
501 | | * local code to UTF-8 conversion map (for combined characters) |
502 | | */ |
503 | | typedef struct |
504 | | { |
505 | | uint32 code; /* local code */ |
506 | | uint32 utf1; /* UTF-8 code 1 */ |
507 | | uint32 utf2; /* UTF-8 code 2 */ |
508 | | } pg_local_to_utf_combined; |
509 | | |
510 | | /* |
511 | | * callback function for algorithmic encoding conversions (in either direction) |
512 | | * |
513 | | * if function returns zero, it does not know how to convert the code |
514 | | */ |
515 | | typedef uint32 (*utf_local_conversion_func) (uint32 code); |
516 | | |
517 | | /* |
518 | | * Support macro for encoding conversion functions to validate their |
519 | | * arguments. (This could be made more compact if we included fmgr.h |
520 | | * here, but we don't want to do that because this header file is also |
521 | | * used by frontends.) |
522 | | */ |
523 | | #define CHECK_ENCODING_CONVERSION_ARGS(srcencoding,destencoding) \ |
524 | | check_encoding_conversion_args(PG_GETARG_INT32(0), \ |
525 | | PG_GETARG_INT32(1), \ |
526 | | PG_GETARG_INT32(4), \ |
527 | | (srcencoding), \ |
528 | | (destencoding)) |
529 | | |
530 | | |
531 | | /* |
532 | | * Some handy functions for Unicode-specific tests. |
533 | | */ |
534 | | static inline bool |
535 | | is_valid_unicode_codepoint(pg_wchar c) |
536 | 1.69k | { |
537 | 1.69k | return (c > 0 && c <= 0x10FFFF); |
538 | 1.69k | } Unexecuted instantiation: json_parser_fuzzer.c:is_valid_unicode_codepoint Unexecuted instantiation: fuzzer_initialize.c:is_valid_unicode_codepoint Unexecuted instantiation: printsimple.c:is_valid_unicode_codepoint Unexecuted instantiation: printtup.c:is_valid_unicode_codepoint Unexecuted instantiation: spgtextproc.c:is_valid_unicode_codepoint Unexecuted instantiation: parallel.c:is_valid_unicode_codepoint Unexecuted instantiation: namespace.c:is_valid_unicode_codepoint Unexecuted instantiation: pg_collation.c:is_valid_unicode_codepoint Unexecuted instantiation: pg_conversion.c:is_valid_unicode_codepoint Unexecuted instantiation: pg_proc.c:is_valid_unicode_codepoint Unexecuted instantiation: pg_type.c:is_valid_unicode_codepoint Unexecuted instantiation: parse_node.c:is_valid_unicode_codepoint Unexecuted instantiation: parser.c:is_valid_unicode_codepoint Unexecuted instantiation: scan.c:is_valid_unicode_codepoint Unexecuted instantiation: scansup.c:is_valid_unicode_codepoint Unexecuted instantiation: async.c:is_valid_unicode_codepoint Unexecuted instantiation: collationcmds.c:is_valid_unicode_codepoint Unexecuted instantiation: conversioncmds.c:is_valid_unicode_codepoint Unexecuted instantiation: copy.c:is_valid_unicode_codepoint Unexecuted instantiation: copyfrom.c:is_valid_unicode_codepoint Unexecuted instantiation: copyfromparse.c:is_valid_unicode_codepoint Unexecuted instantiation: copyto.c:is_valid_unicode_codepoint Unexecuted instantiation: dbcommands.c:is_valid_unicode_codepoint Unexecuted instantiation: explain.c:is_valid_unicode_codepoint Unexecuted instantiation: explain_dr.c:is_valid_unicode_codepoint Unexecuted instantiation: extension.c:is_valid_unicode_codepoint Unexecuted instantiation: indexcmds.c:is_valid_unicode_codepoint Unexecuted instantiation: variable.c:is_valid_unicode_codepoint Unexecuted instantiation: execMain.c:is_valid_unicode_codepoint Unexecuted instantiation: execPartition.c:is_valid_unicode_codepoint Unexecuted instantiation: execUtils.c:is_valid_unicode_codepoint Unexecuted instantiation: auth-oauth.c:is_valid_unicode_codepoint Unexecuted instantiation: auth-sasl.c:is_valid_unicode_codepoint Unexecuted instantiation: auth-scram.c:is_valid_unicode_codepoint Unexecuted instantiation: auth.c:is_valid_unicode_codepoint Unexecuted instantiation: be-secure-common.c:is_valid_unicode_codepoint Unexecuted instantiation: be-secure.c:is_valid_unicode_codepoint Unexecuted instantiation: crypt.c:is_valid_unicode_codepoint Unexecuted instantiation: hba.c:is_valid_unicode_codepoint Unexecuted instantiation: pqcomm.c:is_valid_unicode_codepoint Unexecuted instantiation: pqformat.c:is_valid_unicode_codepoint Unexecuted instantiation: pqmq.c:is_valid_unicode_codepoint Unexecuted instantiation: launch_backend.c:is_valid_unicode_codepoint Unexecuted instantiation: postmaster.c:is_valid_unicode_codepoint Unexecuted instantiation: regcomp.c:is_valid_unicode_codepoint Unexecuted instantiation: regerror.c:is_valid_unicode_codepoint Unexecuted instantiation: regexec.c:is_valid_unicode_codepoint Unexecuted instantiation: regexport.c:is_valid_unicode_codepoint Unexecuted instantiation: regfree.c:is_valid_unicode_codepoint Unexecuted instantiation: regprefix.c:is_valid_unicode_codepoint Unexecuted instantiation: applyparallelworker.c:is_valid_unicode_codepoint Unexecuted instantiation: logicalfuncs.c:is_valid_unicode_codepoint Unexecuted instantiation: proto.c:is_valid_unicode_codepoint Unexecuted instantiation: worker.c:is_valid_unicode_codepoint Unexecuted instantiation: walreceiver.c:is_valid_unicode_codepoint Unexecuted instantiation: walsender.c:is_valid_unicode_codepoint Unexecuted instantiation: backup_manifest.c:is_valid_unicode_codepoint Unexecuted instantiation: basebackup_copy.c:is_valid_unicode_codepoint Unexecuted instantiation: basebackup_incremental.c:is_valid_unicode_codepoint Unexecuted instantiation: backend_startup.c:is_valid_unicode_codepoint Unexecuted instantiation: dest.c:is_valid_unicode_codepoint Unexecuted instantiation: fastpath.c:is_valid_unicode_codepoint Unexecuted instantiation: postgres.c:is_valid_unicode_codepoint Unexecuted instantiation: dict_ispell.c:is_valid_unicode_codepoint Unexecuted instantiation: dict_synonym.c:is_valid_unicode_codepoint Unexecuted instantiation: dict_thesaurus.c:is_valid_unicode_codepoint Unexecuted instantiation: regis.c:is_valid_unicode_codepoint Unexecuted instantiation: spell.c:is_valid_unicode_codepoint Unexecuted instantiation: ts_locale.c:is_valid_unicode_codepoint Unexecuted instantiation: ts_utils.c:is_valid_unicode_codepoint Unexecuted instantiation: wparser_def.c:is_valid_unicode_codepoint Unexecuted instantiation: backend_progress.c:is_valid_unicode_codepoint Unexecuted instantiation: backend_status.c:is_valid_unicode_codepoint Unexecuted instantiation: array_userfuncs.c:is_valid_unicode_codepoint Unexecuted instantiation: arrayfuncs.c:is_valid_unicode_codepoint Unexecuted instantiation: ascii.c:is_valid_unicode_codepoint Unexecuted instantiation: bool.c:is_valid_unicode_codepoint Unexecuted instantiation: cash.c:is_valid_unicode_codepoint Unexecuted instantiation: char.c:is_valid_unicode_codepoint Unexecuted instantiation: date.c:is_valid_unicode_codepoint Unexecuted instantiation: encode.c:is_valid_unicode_codepoint Unexecuted instantiation: enum.c:is_valid_unicode_codepoint Unexecuted instantiation: float.c:is_valid_unicode_codepoint Unexecuted instantiation: format_type.c:is_valid_unicode_codepoint Unexecuted instantiation: formatting.c:is_valid_unicode_codepoint Unexecuted instantiation: genfile.c:is_valid_unicode_codepoint Unexecuted instantiation: geo_ops.c:is_valid_unicode_codepoint Unexecuted instantiation: hbafuncs.c:is_valid_unicode_codepoint Unexecuted instantiation: int.c:is_valid_unicode_codepoint Unexecuted instantiation: int8.c:is_valid_unicode_codepoint Unexecuted instantiation: json.c:is_valid_unicode_codepoint Unexecuted instantiation: jsonb.c:is_valid_unicode_codepoint Unexecuted instantiation: jsonfuncs.c:is_valid_unicode_codepoint Unexecuted instantiation: jsonpath.c:is_valid_unicode_codepoint Unexecuted instantiation: jsonpath_exec.c:is_valid_unicode_codepoint Unexecuted instantiation: jsonpath_gram.c:is_valid_unicode_codepoint Unexecuted instantiation: jsonpath_scan.c:is_valid_unicode_codepoint Unexecuted instantiation: like.c:is_valid_unicode_codepoint Unexecuted instantiation: like_support.c:is_valid_unicode_codepoint Unexecuted instantiation: mac.c:is_valid_unicode_codepoint Unexecuted instantiation: mac8.c:is_valid_unicode_codepoint Unexecuted instantiation: mcxtfuncs.c:is_valid_unicode_codepoint Unexecuted instantiation: multirangetypes.c:is_valid_unicode_codepoint Unexecuted instantiation: name.c:is_valid_unicode_codepoint Unexecuted instantiation: network.c:is_valid_unicode_codepoint Unexecuted instantiation: numeric.c:is_valid_unicode_codepoint Unexecuted instantiation: oid.c:is_valid_unicode_codepoint Unexecuted instantiation: oracle_compat.c:is_valid_unicode_codepoint Unexecuted instantiation: pg_locale.c:is_valid_unicode_codepoint Unexecuted instantiation: pg_locale_builtin.c:is_valid_unicode_codepoint Unexecuted instantiation: pg_locale_icu.c:is_valid_unicode_codepoint Unexecuted instantiation: pg_locale_libc.c:is_valid_unicode_codepoint Unexecuted instantiation: pg_lsn.c:is_valid_unicode_codepoint Unexecuted instantiation: pseudotypes.c:is_valid_unicode_codepoint Unexecuted instantiation: rangetypes.c:is_valid_unicode_codepoint Unexecuted instantiation: regexp.c:is_valid_unicode_codepoint Unexecuted instantiation: regproc.c:is_valid_unicode_codepoint Unexecuted instantiation: rowtypes.c:is_valid_unicode_codepoint Unexecuted instantiation: ruleutils.c:is_valid_unicode_codepoint Unexecuted instantiation: tid.c:is_valid_unicode_codepoint Unexecuted instantiation: timestamp.c:is_valid_unicode_codepoint Unexecuted instantiation: tsquery.c:is_valid_unicode_codepoint Unexecuted instantiation: tsvector.c:is_valid_unicode_codepoint Unexecuted instantiation: tsvector_op.c:is_valid_unicode_codepoint Unexecuted instantiation: tsvector_parser.c:is_valid_unicode_codepoint Unexecuted instantiation: uuid.c:is_valid_unicode_codepoint Unexecuted instantiation: varbit.c:is_valid_unicode_codepoint Unexecuted instantiation: varchar.c:is_valid_unicode_codepoint Unexecuted instantiation: varlena.c:is_valid_unicode_codepoint Unexecuted instantiation: xid.c:is_valid_unicode_codepoint Unexecuted instantiation: xid8funcs.c:is_valid_unicode_codepoint Unexecuted instantiation: xml.c:is_valid_unicode_codepoint Unexecuted instantiation: csvlog.c:is_valid_unicode_codepoint Unexecuted instantiation: elog.c:is_valid_unicode_codepoint Unexecuted instantiation: jsonlog.c:is_valid_unicode_codepoint Unexecuted instantiation: globals.c:is_valid_unicode_codepoint Unexecuted instantiation: miscinit.c:is_valid_unicode_codepoint Unexecuted instantiation: postinit.c:is_valid_unicode_codepoint Unexecuted instantiation: conv.c:is_valid_unicode_codepoint mbutils.c:is_valid_unicode_codepoint Line | Count | Source | 536 | 1.69k | { | 537 | 1.69k | return (c > 0 && c <= 0x10FFFF); | 538 | 1.69k | } |
Unexecuted instantiation: stringinfo_mb.c:is_valid_unicode_codepoint Unexecuted instantiation: wstrcmp.c:is_valid_unicode_codepoint Unexecuted instantiation: wstrncmp.c:is_valid_unicode_codepoint Unexecuted instantiation: guc.c:is_valid_unicode_codepoint Unexecuted instantiation: guc-file.c:is_valid_unicode_codepoint Unexecuted instantiation: guc_tables.c:is_valid_unicode_codepoint Unexecuted instantiation: mcxt.c:is_valid_unicode_codepoint Unexecuted instantiation: encnames.c:is_valid_unicode_codepoint Unexecuted instantiation: jsonapi.c:is_valid_unicode_codepoint Unexecuted instantiation: parse_manifest.c:is_valid_unicode_codepoint Unexecuted instantiation: saslprep.c:is_valid_unicode_codepoint Unexecuted instantiation: unicode_case.c:is_valid_unicode_codepoint Unexecuted instantiation: unicode_category.c:is_valid_unicode_codepoint Unexecuted instantiation: unicode_norm.c:is_valid_unicode_codepoint Unexecuted instantiation: wchar.c:is_valid_unicode_codepoint Unexecuted instantiation: chklocale.c:is_valid_unicode_codepoint Unexecuted instantiation: path.c:is_valid_unicode_codepoint |
539 | | |
540 | | static inline bool |
541 | | is_utf16_surrogate_first(pg_wchar c) |
542 | 2.12k | { |
543 | 2.12k | return (c >= 0xD800 && c <= 0xDBFF); |
544 | 2.12k | } Unexecuted instantiation: json_parser_fuzzer.c:is_utf16_surrogate_first Unexecuted instantiation: fuzzer_initialize.c:is_utf16_surrogate_first Unexecuted instantiation: printsimple.c:is_utf16_surrogate_first Unexecuted instantiation: printtup.c:is_utf16_surrogate_first Unexecuted instantiation: spgtextproc.c:is_utf16_surrogate_first Unexecuted instantiation: parallel.c:is_utf16_surrogate_first Unexecuted instantiation: namespace.c:is_utf16_surrogate_first Unexecuted instantiation: pg_collation.c:is_utf16_surrogate_first Unexecuted instantiation: pg_conversion.c:is_utf16_surrogate_first Unexecuted instantiation: pg_proc.c:is_utf16_surrogate_first Unexecuted instantiation: pg_type.c:is_utf16_surrogate_first Unexecuted instantiation: parse_node.c:is_utf16_surrogate_first Unexecuted instantiation: parser.c:is_utf16_surrogate_first Unexecuted instantiation: scan.c:is_utf16_surrogate_first Unexecuted instantiation: scansup.c:is_utf16_surrogate_first Unexecuted instantiation: async.c:is_utf16_surrogate_first Unexecuted instantiation: collationcmds.c:is_utf16_surrogate_first Unexecuted instantiation: conversioncmds.c:is_utf16_surrogate_first Unexecuted instantiation: copy.c:is_utf16_surrogate_first Unexecuted instantiation: copyfrom.c:is_utf16_surrogate_first Unexecuted instantiation: copyfromparse.c:is_utf16_surrogate_first Unexecuted instantiation: copyto.c:is_utf16_surrogate_first Unexecuted instantiation: dbcommands.c:is_utf16_surrogate_first Unexecuted instantiation: explain.c:is_utf16_surrogate_first Unexecuted instantiation: explain_dr.c:is_utf16_surrogate_first Unexecuted instantiation: extension.c:is_utf16_surrogate_first Unexecuted instantiation: indexcmds.c:is_utf16_surrogate_first Unexecuted instantiation: variable.c:is_utf16_surrogate_first Unexecuted instantiation: execMain.c:is_utf16_surrogate_first Unexecuted instantiation: execPartition.c:is_utf16_surrogate_first Unexecuted instantiation: execUtils.c:is_utf16_surrogate_first Unexecuted instantiation: auth-oauth.c:is_utf16_surrogate_first Unexecuted instantiation: auth-sasl.c:is_utf16_surrogate_first Unexecuted instantiation: auth-scram.c:is_utf16_surrogate_first Unexecuted instantiation: auth.c:is_utf16_surrogate_first Unexecuted instantiation: be-secure-common.c:is_utf16_surrogate_first Unexecuted instantiation: be-secure.c:is_utf16_surrogate_first Unexecuted instantiation: crypt.c:is_utf16_surrogate_first Unexecuted instantiation: hba.c:is_utf16_surrogate_first Unexecuted instantiation: pqcomm.c:is_utf16_surrogate_first Unexecuted instantiation: pqformat.c:is_utf16_surrogate_first Unexecuted instantiation: pqmq.c:is_utf16_surrogate_first Unexecuted instantiation: launch_backend.c:is_utf16_surrogate_first Unexecuted instantiation: postmaster.c:is_utf16_surrogate_first Unexecuted instantiation: regcomp.c:is_utf16_surrogate_first Unexecuted instantiation: regerror.c:is_utf16_surrogate_first Unexecuted instantiation: regexec.c:is_utf16_surrogate_first Unexecuted instantiation: regexport.c:is_utf16_surrogate_first Unexecuted instantiation: regfree.c:is_utf16_surrogate_first Unexecuted instantiation: regprefix.c:is_utf16_surrogate_first Unexecuted instantiation: applyparallelworker.c:is_utf16_surrogate_first Unexecuted instantiation: logicalfuncs.c:is_utf16_surrogate_first Unexecuted instantiation: proto.c:is_utf16_surrogate_first Unexecuted instantiation: worker.c:is_utf16_surrogate_first Unexecuted instantiation: walreceiver.c:is_utf16_surrogate_first Unexecuted instantiation: walsender.c:is_utf16_surrogate_first Unexecuted instantiation: backup_manifest.c:is_utf16_surrogate_first Unexecuted instantiation: basebackup_copy.c:is_utf16_surrogate_first Unexecuted instantiation: basebackup_incremental.c:is_utf16_surrogate_first Unexecuted instantiation: backend_startup.c:is_utf16_surrogate_first Unexecuted instantiation: dest.c:is_utf16_surrogate_first Unexecuted instantiation: fastpath.c:is_utf16_surrogate_first Unexecuted instantiation: postgres.c:is_utf16_surrogate_first Unexecuted instantiation: dict_ispell.c:is_utf16_surrogate_first Unexecuted instantiation: dict_synonym.c:is_utf16_surrogate_first Unexecuted instantiation: dict_thesaurus.c:is_utf16_surrogate_first Unexecuted instantiation: regis.c:is_utf16_surrogate_first Unexecuted instantiation: spell.c:is_utf16_surrogate_first Unexecuted instantiation: ts_locale.c:is_utf16_surrogate_first Unexecuted instantiation: ts_utils.c:is_utf16_surrogate_first Unexecuted instantiation: wparser_def.c:is_utf16_surrogate_first Unexecuted instantiation: backend_progress.c:is_utf16_surrogate_first Unexecuted instantiation: backend_status.c:is_utf16_surrogate_first Unexecuted instantiation: array_userfuncs.c:is_utf16_surrogate_first Unexecuted instantiation: arrayfuncs.c:is_utf16_surrogate_first Unexecuted instantiation: ascii.c:is_utf16_surrogate_first Unexecuted instantiation: bool.c:is_utf16_surrogate_first Unexecuted instantiation: cash.c:is_utf16_surrogate_first Unexecuted instantiation: char.c:is_utf16_surrogate_first Unexecuted instantiation: date.c:is_utf16_surrogate_first Unexecuted instantiation: encode.c:is_utf16_surrogate_first Unexecuted instantiation: enum.c:is_utf16_surrogate_first Unexecuted instantiation: float.c:is_utf16_surrogate_first Unexecuted instantiation: format_type.c:is_utf16_surrogate_first Unexecuted instantiation: formatting.c:is_utf16_surrogate_first Unexecuted instantiation: genfile.c:is_utf16_surrogate_first Unexecuted instantiation: geo_ops.c:is_utf16_surrogate_first Unexecuted instantiation: hbafuncs.c:is_utf16_surrogate_first Unexecuted instantiation: int.c:is_utf16_surrogate_first Unexecuted instantiation: int8.c:is_utf16_surrogate_first Unexecuted instantiation: json.c:is_utf16_surrogate_first Unexecuted instantiation: jsonb.c:is_utf16_surrogate_first Unexecuted instantiation: jsonfuncs.c:is_utf16_surrogate_first Unexecuted instantiation: jsonpath.c:is_utf16_surrogate_first Unexecuted instantiation: jsonpath_exec.c:is_utf16_surrogate_first Unexecuted instantiation: jsonpath_gram.c:is_utf16_surrogate_first Unexecuted instantiation: jsonpath_scan.c:is_utf16_surrogate_first Unexecuted instantiation: like.c:is_utf16_surrogate_first Unexecuted instantiation: like_support.c:is_utf16_surrogate_first Unexecuted instantiation: mac.c:is_utf16_surrogate_first Unexecuted instantiation: mac8.c:is_utf16_surrogate_first Unexecuted instantiation: mcxtfuncs.c:is_utf16_surrogate_first Unexecuted instantiation: multirangetypes.c:is_utf16_surrogate_first Unexecuted instantiation: name.c:is_utf16_surrogate_first Unexecuted instantiation: network.c:is_utf16_surrogate_first Unexecuted instantiation: numeric.c:is_utf16_surrogate_first Unexecuted instantiation: oid.c:is_utf16_surrogate_first Unexecuted instantiation: oracle_compat.c:is_utf16_surrogate_first Unexecuted instantiation: pg_locale.c:is_utf16_surrogate_first Unexecuted instantiation: pg_locale_builtin.c:is_utf16_surrogate_first Unexecuted instantiation: pg_locale_icu.c:is_utf16_surrogate_first Unexecuted instantiation: pg_locale_libc.c:is_utf16_surrogate_first Unexecuted instantiation: pg_lsn.c:is_utf16_surrogate_first Unexecuted instantiation: pseudotypes.c:is_utf16_surrogate_first Unexecuted instantiation: rangetypes.c:is_utf16_surrogate_first Unexecuted instantiation: regexp.c:is_utf16_surrogate_first Unexecuted instantiation: regproc.c:is_utf16_surrogate_first Unexecuted instantiation: rowtypes.c:is_utf16_surrogate_first Unexecuted instantiation: ruleutils.c:is_utf16_surrogate_first Unexecuted instantiation: tid.c:is_utf16_surrogate_first Unexecuted instantiation: timestamp.c:is_utf16_surrogate_first Unexecuted instantiation: tsquery.c:is_utf16_surrogate_first Unexecuted instantiation: tsvector.c:is_utf16_surrogate_first Unexecuted instantiation: tsvector_op.c:is_utf16_surrogate_first Unexecuted instantiation: tsvector_parser.c:is_utf16_surrogate_first Unexecuted instantiation: uuid.c:is_utf16_surrogate_first Unexecuted instantiation: varbit.c:is_utf16_surrogate_first Unexecuted instantiation: varchar.c:is_utf16_surrogate_first Unexecuted instantiation: varlena.c:is_utf16_surrogate_first Unexecuted instantiation: xid.c:is_utf16_surrogate_first Unexecuted instantiation: xid8funcs.c:is_utf16_surrogate_first Unexecuted instantiation: xml.c:is_utf16_surrogate_first Unexecuted instantiation: csvlog.c:is_utf16_surrogate_first Unexecuted instantiation: elog.c:is_utf16_surrogate_first Unexecuted instantiation: jsonlog.c:is_utf16_surrogate_first Unexecuted instantiation: globals.c:is_utf16_surrogate_first Unexecuted instantiation: miscinit.c:is_utf16_surrogate_first Unexecuted instantiation: postinit.c:is_utf16_surrogate_first Unexecuted instantiation: conv.c:is_utf16_surrogate_first Unexecuted instantiation: mbutils.c:is_utf16_surrogate_first Unexecuted instantiation: stringinfo_mb.c:is_utf16_surrogate_first Unexecuted instantiation: wstrcmp.c:is_utf16_surrogate_first Unexecuted instantiation: wstrncmp.c:is_utf16_surrogate_first Unexecuted instantiation: guc.c:is_utf16_surrogate_first Unexecuted instantiation: guc-file.c:is_utf16_surrogate_first Unexecuted instantiation: guc_tables.c:is_utf16_surrogate_first Unexecuted instantiation: mcxt.c:is_utf16_surrogate_first Unexecuted instantiation: encnames.c:is_utf16_surrogate_first jsonapi.c:is_utf16_surrogate_first Line | Count | Source | 542 | 2.12k | { | 543 | 2.12k | return (c >= 0xD800 && c <= 0xDBFF); | 544 | 2.12k | } |
Unexecuted instantiation: parse_manifest.c:is_utf16_surrogate_first Unexecuted instantiation: saslprep.c:is_utf16_surrogate_first Unexecuted instantiation: unicode_case.c:is_utf16_surrogate_first Unexecuted instantiation: unicode_category.c:is_utf16_surrogate_first Unexecuted instantiation: unicode_norm.c:is_utf16_surrogate_first Unexecuted instantiation: wchar.c:is_utf16_surrogate_first Unexecuted instantiation: chklocale.c:is_utf16_surrogate_first Unexecuted instantiation: path.c:is_utf16_surrogate_first |
545 | | |
546 | | static inline bool |
547 | | is_utf16_surrogate_second(pg_wchar c) |
548 | 1.83k | { |
549 | 1.83k | return (c >= 0xDC00 && c <= 0xDFFF); |
550 | 1.83k | } Unexecuted instantiation: json_parser_fuzzer.c:is_utf16_surrogate_second Unexecuted instantiation: fuzzer_initialize.c:is_utf16_surrogate_second Unexecuted instantiation: printsimple.c:is_utf16_surrogate_second Unexecuted instantiation: printtup.c:is_utf16_surrogate_second Unexecuted instantiation: spgtextproc.c:is_utf16_surrogate_second Unexecuted instantiation: parallel.c:is_utf16_surrogate_second Unexecuted instantiation: namespace.c:is_utf16_surrogate_second Unexecuted instantiation: pg_collation.c:is_utf16_surrogate_second Unexecuted instantiation: pg_conversion.c:is_utf16_surrogate_second Unexecuted instantiation: pg_proc.c:is_utf16_surrogate_second Unexecuted instantiation: pg_type.c:is_utf16_surrogate_second Unexecuted instantiation: parse_node.c:is_utf16_surrogate_second Unexecuted instantiation: parser.c:is_utf16_surrogate_second Unexecuted instantiation: scan.c:is_utf16_surrogate_second Unexecuted instantiation: scansup.c:is_utf16_surrogate_second Unexecuted instantiation: async.c:is_utf16_surrogate_second Unexecuted instantiation: collationcmds.c:is_utf16_surrogate_second Unexecuted instantiation: conversioncmds.c:is_utf16_surrogate_second Unexecuted instantiation: copy.c:is_utf16_surrogate_second Unexecuted instantiation: copyfrom.c:is_utf16_surrogate_second Unexecuted instantiation: copyfromparse.c:is_utf16_surrogate_second Unexecuted instantiation: copyto.c:is_utf16_surrogate_second Unexecuted instantiation: dbcommands.c:is_utf16_surrogate_second Unexecuted instantiation: explain.c:is_utf16_surrogate_second Unexecuted instantiation: explain_dr.c:is_utf16_surrogate_second Unexecuted instantiation: extension.c:is_utf16_surrogate_second Unexecuted instantiation: indexcmds.c:is_utf16_surrogate_second Unexecuted instantiation: variable.c:is_utf16_surrogate_second Unexecuted instantiation: execMain.c:is_utf16_surrogate_second Unexecuted instantiation: execPartition.c:is_utf16_surrogate_second Unexecuted instantiation: execUtils.c:is_utf16_surrogate_second Unexecuted instantiation: auth-oauth.c:is_utf16_surrogate_second Unexecuted instantiation: auth-sasl.c:is_utf16_surrogate_second Unexecuted instantiation: auth-scram.c:is_utf16_surrogate_second Unexecuted instantiation: auth.c:is_utf16_surrogate_second Unexecuted instantiation: be-secure-common.c:is_utf16_surrogate_second Unexecuted instantiation: be-secure.c:is_utf16_surrogate_second Unexecuted instantiation: crypt.c:is_utf16_surrogate_second Unexecuted instantiation: hba.c:is_utf16_surrogate_second Unexecuted instantiation: pqcomm.c:is_utf16_surrogate_second Unexecuted instantiation: pqformat.c:is_utf16_surrogate_second Unexecuted instantiation: pqmq.c:is_utf16_surrogate_second Unexecuted instantiation: launch_backend.c:is_utf16_surrogate_second Unexecuted instantiation: postmaster.c:is_utf16_surrogate_second Unexecuted instantiation: regcomp.c:is_utf16_surrogate_second Unexecuted instantiation: regerror.c:is_utf16_surrogate_second Unexecuted instantiation: regexec.c:is_utf16_surrogate_second Unexecuted instantiation: regexport.c:is_utf16_surrogate_second Unexecuted instantiation: regfree.c:is_utf16_surrogate_second Unexecuted instantiation: regprefix.c:is_utf16_surrogate_second Unexecuted instantiation: applyparallelworker.c:is_utf16_surrogate_second Unexecuted instantiation: logicalfuncs.c:is_utf16_surrogate_second Unexecuted instantiation: proto.c:is_utf16_surrogate_second Unexecuted instantiation: worker.c:is_utf16_surrogate_second Unexecuted instantiation: walreceiver.c:is_utf16_surrogate_second Unexecuted instantiation: walsender.c:is_utf16_surrogate_second Unexecuted instantiation: backup_manifest.c:is_utf16_surrogate_second Unexecuted instantiation: basebackup_copy.c:is_utf16_surrogate_second Unexecuted instantiation: basebackup_incremental.c:is_utf16_surrogate_second Unexecuted instantiation: backend_startup.c:is_utf16_surrogate_second Unexecuted instantiation: dest.c:is_utf16_surrogate_second Unexecuted instantiation: fastpath.c:is_utf16_surrogate_second Unexecuted instantiation: postgres.c:is_utf16_surrogate_second Unexecuted instantiation: dict_ispell.c:is_utf16_surrogate_second Unexecuted instantiation: dict_synonym.c:is_utf16_surrogate_second Unexecuted instantiation: dict_thesaurus.c:is_utf16_surrogate_second Unexecuted instantiation: regis.c:is_utf16_surrogate_second Unexecuted instantiation: spell.c:is_utf16_surrogate_second Unexecuted instantiation: ts_locale.c:is_utf16_surrogate_second Unexecuted instantiation: ts_utils.c:is_utf16_surrogate_second Unexecuted instantiation: wparser_def.c:is_utf16_surrogate_second Unexecuted instantiation: backend_progress.c:is_utf16_surrogate_second Unexecuted instantiation: backend_status.c:is_utf16_surrogate_second Unexecuted instantiation: array_userfuncs.c:is_utf16_surrogate_second Unexecuted instantiation: arrayfuncs.c:is_utf16_surrogate_second Unexecuted instantiation: ascii.c:is_utf16_surrogate_second Unexecuted instantiation: bool.c:is_utf16_surrogate_second Unexecuted instantiation: cash.c:is_utf16_surrogate_second Unexecuted instantiation: char.c:is_utf16_surrogate_second Unexecuted instantiation: date.c:is_utf16_surrogate_second Unexecuted instantiation: encode.c:is_utf16_surrogate_second Unexecuted instantiation: enum.c:is_utf16_surrogate_second Unexecuted instantiation: float.c:is_utf16_surrogate_second Unexecuted instantiation: format_type.c:is_utf16_surrogate_second Unexecuted instantiation: formatting.c:is_utf16_surrogate_second Unexecuted instantiation: genfile.c:is_utf16_surrogate_second Unexecuted instantiation: geo_ops.c:is_utf16_surrogate_second Unexecuted instantiation: hbafuncs.c:is_utf16_surrogate_second Unexecuted instantiation: int.c:is_utf16_surrogate_second Unexecuted instantiation: int8.c:is_utf16_surrogate_second Unexecuted instantiation: json.c:is_utf16_surrogate_second Unexecuted instantiation: jsonb.c:is_utf16_surrogate_second Unexecuted instantiation: jsonfuncs.c:is_utf16_surrogate_second Unexecuted instantiation: jsonpath.c:is_utf16_surrogate_second Unexecuted instantiation: jsonpath_exec.c:is_utf16_surrogate_second Unexecuted instantiation: jsonpath_gram.c:is_utf16_surrogate_second Unexecuted instantiation: jsonpath_scan.c:is_utf16_surrogate_second Unexecuted instantiation: like.c:is_utf16_surrogate_second Unexecuted instantiation: like_support.c:is_utf16_surrogate_second Unexecuted instantiation: mac.c:is_utf16_surrogate_second Unexecuted instantiation: mac8.c:is_utf16_surrogate_second Unexecuted instantiation: mcxtfuncs.c:is_utf16_surrogate_second Unexecuted instantiation: multirangetypes.c:is_utf16_surrogate_second Unexecuted instantiation: name.c:is_utf16_surrogate_second Unexecuted instantiation: network.c:is_utf16_surrogate_second Unexecuted instantiation: numeric.c:is_utf16_surrogate_second Unexecuted instantiation: oid.c:is_utf16_surrogate_second Unexecuted instantiation: oracle_compat.c:is_utf16_surrogate_second Unexecuted instantiation: pg_locale.c:is_utf16_surrogate_second Unexecuted instantiation: pg_locale_builtin.c:is_utf16_surrogate_second Unexecuted instantiation: pg_locale_icu.c:is_utf16_surrogate_second Unexecuted instantiation: pg_locale_libc.c:is_utf16_surrogate_second Unexecuted instantiation: pg_lsn.c:is_utf16_surrogate_second Unexecuted instantiation: pseudotypes.c:is_utf16_surrogate_second Unexecuted instantiation: rangetypes.c:is_utf16_surrogate_second Unexecuted instantiation: regexp.c:is_utf16_surrogate_second Unexecuted instantiation: regproc.c:is_utf16_surrogate_second Unexecuted instantiation: rowtypes.c:is_utf16_surrogate_second Unexecuted instantiation: ruleutils.c:is_utf16_surrogate_second Unexecuted instantiation: tid.c:is_utf16_surrogate_second Unexecuted instantiation: timestamp.c:is_utf16_surrogate_second Unexecuted instantiation: tsquery.c:is_utf16_surrogate_second Unexecuted instantiation: tsvector.c:is_utf16_surrogate_second Unexecuted instantiation: tsvector_op.c:is_utf16_surrogate_second Unexecuted instantiation: tsvector_parser.c:is_utf16_surrogate_second Unexecuted instantiation: uuid.c:is_utf16_surrogate_second Unexecuted instantiation: varbit.c:is_utf16_surrogate_second Unexecuted instantiation: varchar.c:is_utf16_surrogate_second Unexecuted instantiation: varlena.c:is_utf16_surrogate_second Unexecuted instantiation: xid.c:is_utf16_surrogate_second Unexecuted instantiation: xid8funcs.c:is_utf16_surrogate_second Unexecuted instantiation: xml.c:is_utf16_surrogate_second Unexecuted instantiation: csvlog.c:is_utf16_surrogate_second Unexecuted instantiation: elog.c:is_utf16_surrogate_second Unexecuted instantiation: jsonlog.c:is_utf16_surrogate_second Unexecuted instantiation: globals.c:is_utf16_surrogate_second Unexecuted instantiation: miscinit.c:is_utf16_surrogate_second Unexecuted instantiation: postinit.c:is_utf16_surrogate_second Unexecuted instantiation: conv.c:is_utf16_surrogate_second Unexecuted instantiation: mbutils.c:is_utf16_surrogate_second Unexecuted instantiation: stringinfo_mb.c:is_utf16_surrogate_second Unexecuted instantiation: wstrcmp.c:is_utf16_surrogate_second Unexecuted instantiation: wstrncmp.c:is_utf16_surrogate_second Unexecuted instantiation: guc.c:is_utf16_surrogate_second Unexecuted instantiation: guc-file.c:is_utf16_surrogate_second Unexecuted instantiation: guc_tables.c:is_utf16_surrogate_second Unexecuted instantiation: mcxt.c:is_utf16_surrogate_second Unexecuted instantiation: encnames.c:is_utf16_surrogate_second jsonapi.c:is_utf16_surrogate_second Line | Count | Source | 548 | 1.83k | { | 549 | 1.83k | return (c >= 0xDC00 && c <= 0xDFFF); | 550 | 1.83k | } |
Unexecuted instantiation: parse_manifest.c:is_utf16_surrogate_second Unexecuted instantiation: saslprep.c:is_utf16_surrogate_second Unexecuted instantiation: unicode_case.c:is_utf16_surrogate_second Unexecuted instantiation: unicode_category.c:is_utf16_surrogate_second Unexecuted instantiation: unicode_norm.c:is_utf16_surrogate_second Unexecuted instantiation: wchar.c:is_utf16_surrogate_second Unexecuted instantiation: chklocale.c:is_utf16_surrogate_second Unexecuted instantiation: path.c:is_utf16_surrogate_second |
551 | | |
552 | | static inline pg_wchar |
553 | | surrogate_pair_to_codepoint(pg_wchar first, pg_wchar second) |
554 | 25 | { |
555 | 25 | return ((first & 0x3FF) << 10) + 0x10000 + (second & 0x3FF); |
556 | 25 | } Unexecuted instantiation: json_parser_fuzzer.c:surrogate_pair_to_codepoint Unexecuted instantiation: fuzzer_initialize.c:surrogate_pair_to_codepoint Unexecuted instantiation: printsimple.c:surrogate_pair_to_codepoint Unexecuted instantiation: printtup.c:surrogate_pair_to_codepoint Unexecuted instantiation: spgtextproc.c:surrogate_pair_to_codepoint Unexecuted instantiation: parallel.c:surrogate_pair_to_codepoint Unexecuted instantiation: namespace.c:surrogate_pair_to_codepoint Unexecuted instantiation: pg_collation.c:surrogate_pair_to_codepoint Unexecuted instantiation: pg_conversion.c:surrogate_pair_to_codepoint Unexecuted instantiation: pg_proc.c:surrogate_pair_to_codepoint Unexecuted instantiation: pg_type.c:surrogate_pair_to_codepoint Unexecuted instantiation: parse_node.c:surrogate_pair_to_codepoint Unexecuted instantiation: parser.c:surrogate_pair_to_codepoint Unexecuted instantiation: scan.c:surrogate_pair_to_codepoint Unexecuted instantiation: scansup.c:surrogate_pair_to_codepoint Unexecuted instantiation: async.c:surrogate_pair_to_codepoint Unexecuted instantiation: collationcmds.c:surrogate_pair_to_codepoint Unexecuted instantiation: conversioncmds.c:surrogate_pair_to_codepoint Unexecuted instantiation: copy.c:surrogate_pair_to_codepoint Unexecuted instantiation: copyfrom.c:surrogate_pair_to_codepoint Unexecuted instantiation: copyfromparse.c:surrogate_pair_to_codepoint Unexecuted instantiation: copyto.c:surrogate_pair_to_codepoint Unexecuted instantiation: dbcommands.c:surrogate_pair_to_codepoint Unexecuted instantiation: explain.c:surrogate_pair_to_codepoint Unexecuted instantiation: explain_dr.c:surrogate_pair_to_codepoint Unexecuted instantiation: extension.c:surrogate_pair_to_codepoint Unexecuted instantiation: indexcmds.c:surrogate_pair_to_codepoint Unexecuted instantiation: variable.c:surrogate_pair_to_codepoint Unexecuted instantiation: execMain.c:surrogate_pair_to_codepoint Unexecuted instantiation: execPartition.c:surrogate_pair_to_codepoint Unexecuted instantiation: execUtils.c:surrogate_pair_to_codepoint Unexecuted instantiation: auth-oauth.c:surrogate_pair_to_codepoint Unexecuted instantiation: auth-sasl.c:surrogate_pair_to_codepoint Unexecuted instantiation: auth-scram.c:surrogate_pair_to_codepoint Unexecuted instantiation: auth.c:surrogate_pair_to_codepoint Unexecuted instantiation: be-secure-common.c:surrogate_pair_to_codepoint Unexecuted instantiation: be-secure.c:surrogate_pair_to_codepoint Unexecuted instantiation: crypt.c:surrogate_pair_to_codepoint Unexecuted instantiation: hba.c:surrogate_pair_to_codepoint Unexecuted instantiation: pqcomm.c:surrogate_pair_to_codepoint Unexecuted instantiation: pqformat.c:surrogate_pair_to_codepoint Unexecuted instantiation: pqmq.c:surrogate_pair_to_codepoint Unexecuted instantiation: launch_backend.c:surrogate_pair_to_codepoint Unexecuted instantiation: postmaster.c:surrogate_pair_to_codepoint Unexecuted instantiation: regcomp.c:surrogate_pair_to_codepoint Unexecuted instantiation: regerror.c:surrogate_pair_to_codepoint Unexecuted instantiation: regexec.c:surrogate_pair_to_codepoint Unexecuted instantiation: regexport.c:surrogate_pair_to_codepoint Unexecuted instantiation: regfree.c:surrogate_pair_to_codepoint Unexecuted instantiation: regprefix.c:surrogate_pair_to_codepoint Unexecuted instantiation: applyparallelworker.c:surrogate_pair_to_codepoint Unexecuted instantiation: logicalfuncs.c:surrogate_pair_to_codepoint Unexecuted instantiation: proto.c:surrogate_pair_to_codepoint Unexecuted instantiation: worker.c:surrogate_pair_to_codepoint Unexecuted instantiation: walreceiver.c:surrogate_pair_to_codepoint Unexecuted instantiation: walsender.c:surrogate_pair_to_codepoint Unexecuted instantiation: backup_manifest.c:surrogate_pair_to_codepoint Unexecuted instantiation: basebackup_copy.c:surrogate_pair_to_codepoint Unexecuted instantiation: basebackup_incremental.c:surrogate_pair_to_codepoint Unexecuted instantiation: backend_startup.c:surrogate_pair_to_codepoint Unexecuted instantiation: dest.c:surrogate_pair_to_codepoint Unexecuted instantiation: fastpath.c:surrogate_pair_to_codepoint Unexecuted instantiation: postgres.c:surrogate_pair_to_codepoint Unexecuted instantiation: dict_ispell.c:surrogate_pair_to_codepoint Unexecuted instantiation: dict_synonym.c:surrogate_pair_to_codepoint Unexecuted instantiation: dict_thesaurus.c:surrogate_pair_to_codepoint Unexecuted instantiation: regis.c:surrogate_pair_to_codepoint Unexecuted instantiation: spell.c:surrogate_pair_to_codepoint Unexecuted instantiation: ts_locale.c:surrogate_pair_to_codepoint Unexecuted instantiation: ts_utils.c:surrogate_pair_to_codepoint Unexecuted instantiation: wparser_def.c:surrogate_pair_to_codepoint Unexecuted instantiation: backend_progress.c:surrogate_pair_to_codepoint Unexecuted instantiation: backend_status.c:surrogate_pair_to_codepoint Unexecuted instantiation: array_userfuncs.c:surrogate_pair_to_codepoint Unexecuted instantiation: arrayfuncs.c:surrogate_pair_to_codepoint Unexecuted instantiation: ascii.c:surrogate_pair_to_codepoint Unexecuted instantiation: bool.c:surrogate_pair_to_codepoint Unexecuted instantiation: cash.c:surrogate_pair_to_codepoint Unexecuted instantiation: char.c:surrogate_pair_to_codepoint Unexecuted instantiation: date.c:surrogate_pair_to_codepoint Unexecuted instantiation: encode.c:surrogate_pair_to_codepoint Unexecuted instantiation: enum.c:surrogate_pair_to_codepoint Unexecuted instantiation: float.c:surrogate_pair_to_codepoint Unexecuted instantiation: format_type.c:surrogate_pair_to_codepoint Unexecuted instantiation: formatting.c:surrogate_pair_to_codepoint Unexecuted instantiation: genfile.c:surrogate_pair_to_codepoint Unexecuted instantiation: geo_ops.c:surrogate_pair_to_codepoint Unexecuted instantiation: hbafuncs.c:surrogate_pair_to_codepoint Unexecuted instantiation: int.c:surrogate_pair_to_codepoint Unexecuted instantiation: int8.c:surrogate_pair_to_codepoint Unexecuted instantiation: json.c:surrogate_pair_to_codepoint Unexecuted instantiation: jsonb.c:surrogate_pair_to_codepoint Unexecuted instantiation: jsonfuncs.c:surrogate_pair_to_codepoint Unexecuted instantiation: jsonpath.c:surrogate_pair_to_codepoint Unexecuted instantiation: jsonpath_exec.c:surrogate_pair_to_codepoint Unexecuted instantiation: jsonpath_gram.c:surrogate_pair_to_codepoint Unexecuted instantiation: jsonpath_scan.c:surrogate_pair_to_codepoint Unexecuted instantiation: like.c:surrogate_pair_to_codepoint Unexecuted instantiation: like_support.c:surrogate_pair_to_codepoint Unexecuted instantiation: mac.c:surrogate_pair_to_codepoint Unexecuted instantiation: mac8.c:surrogate_pair_to_codepoint Unexecuted instantiation: mcxtfuncs.c:surrogate_pair_to_codepoint Unexecuted instantiation: multirangetypes.c:surrogate_pair_to_codepoint Unexecuted instantiation: name.c:surrogate_pair_to_codepoint Unexecuted instantiation: network.c:surrogate_pair_to_codepoint Unexecuted instantiation: numeric.c:surrogate_pair_to_codepoint Unexecuted instantiation: oid.c:surrogate_pair_to_codepoint Unexecuted instantiation: oracle_compat.c:surrogate_pair_to_codepoint Unexecuted instantiation: pg_locale.c:surrogate_pair_to_codepoint Unexecuted instantiation: pg_locale_builtin.c:surrogate_pair_to_codepoint Unexecuted instantiation: pg_locale_icu.c:surrogate_pair_to_codepoint Unexecuted instantiation: pg_locale_libc.c:surrogate_pair_to_codepoint Unexecuted instantiation: pg_lsn.c:surrogate_pair_to_codepoint Unexecuted instantiation: pseudotypes.c:surrogate_pair_to_codepoint Unexecuted instantiation: rangetypes.c:surrogate_pair_to_codepoint Unexecuted instantiation: regexp.c:surrogate_pair_to_codepoint Unexecuted instantiation: regproc.c:surrogate_pair_to_codepoint Unexecuted instantiation: rowtypes.c:surrogate_pair_to_codepoint Unexecuted instantiation: ruleutils.c:surrogate_pair_to_codepoint Unexecuted instantiation: tid.c:surrogate_pair_to_codepoint Unexecuted instantiation: timestamp.c:surrogate_pair_to_codepoint Unexecuted instantiation: tsquery.c:surrogate_pair_to_codepoint Unexecuted instantiation: tsvector.c:surrogate_pair_to_codepoint Unexecuted instantiation: tsvector_op.c:surrogate_pair_to_codepoint Unexecuted instantiation: tsvector_parser.c:surrogate_pair_to_codepoint Unexecuted instantiation: uuid.c:surrogate_pair_to_codepoint Unexecuted instantiation: varbit.c:surrogate_pair_to_codepoint Unexecuted instantiation: varchar.c:surrogate_pair_to_codepoint Unexecuted instantiation: varlena.c:surrogate_pair_to_codepoint Unexecuted instantiation: xid.c:surrogate_pair_to_codepoint Unexecuted instantiation: xid8funcs.c:surrogate_pair_to_codepoint Unexecuted instantiation: xml.c:surrogate_pair_to_codepoint Unexecuted instantiation: csvlog.c:surrogate_pair_to_codepoint Unexecuted instantiation: elog.c:surrogate_pair_to_codepoint Unexecuted instantiation: jsonlog.c:surrogate_pair_to_codepoint Unexecuted instantiation: globals.c:surrogate_pair_to_codepoint Unexecuted instantiation: miscinit.c:surrogate_pair_to_codepoint Unexecuted instantiation: postinit.c:surrogate_pair_to_codepoint Unexecuted instantiation: conv.c:surrogate_pair_to_codepoint Unexecuted instantiation: mbutils.c:surrogate_pair_to_codepoint Unexecuted instantiation: stringinfo_mb.c:surrogate_pair_to_codepoint Unexecuted instantiation: wstrcmp.c:surrogate_pair_to_codepoint Unexecuted instantiation: wstrncmp.c:surrogate_pair_to_codepoint Unexecuted instantiation: guc.c:surrogate_pair_to_codepoint Unexecuted instantiation: guc-file.c:surrogate_pair_to_codepoint Unexecuted instantiation: guc_tables.c:surrogate_pair_to_codepoint Unexecuted instantiation: mcxt.c:surrogate_pair_to_codepoint Unexecuted instantiation: encnames.c:surrogate_pair_to_codepoint jsonapi.c:surrogate_pair_to_codepoint Line | Count | Source | 554 | 25 | { | 555 | 25 | return ((first & 0x3FF) << 10) + 0x10000 + (second & 0x3FF); | 556 | 25 | } |
Unexecuted instantiation: parse_manifest.c:surrogate_pair_to_codepoint Unexecuted instantiation: saslprep.c:surrogate_pair_to_codepoint Unexecuted instantiation: unicode_case.c:surrogate_pair_to_codepoint Unexecuted instantiation: unicode_category.c:surrogate_pair_to_codepoint Unexecuted instantiation: unicode_norm.c:surrogate_pair_to_codepoint Unexecuted instantiation: wchar.c:surrogate_pair_to_codepoint Unexecuted instantiation: chklocale.c:surrogate_pair_to_codepoint Unexecuted instantiation: path.c:surrogate_pair_to_codepoint |
557 | | |
558 | | /* |
559 | | * Convert a UTF-8 character to a Unicode code point. |
560 | | * This is a one-character version of pg_utf2wchar_with_len. |
561 | | * |
562 | | * No error checks here, c must point to a long-enough string. |
563 | | */ |
564 | | static inline pg_wchar |
565 | | utf8_to_unicode(const unsigned char *c) |
566 | 0 | { |
567 | 0 | if ((*c & 0x80) == 0) |
568 | 0 | return (pg_wchar) c[0]; |
569 | 0 | else if ((*c & 0xe0) == 0xc0) |
570 | 0 | return (pg_wchar) (((c[0] & 0x1f) << 6) | |
571 | 0 | (c[1] & 0x3f)); |
572 | 0 | else if ((*c & 0xf0) == 0xe0) |
573 | 0 | return (pg_wchar) (((c[0] & 0x0f) << 12) | |
574 | 0 | ((c[1] & 0x3f) << 6) | |
575 | 0 | (c[2] & 0x3f)); |
576 | 0 | else if ((*c & 0xf8) == 0xf0) |
577 | 0 | return (pg_wchar) (((c[0] & 0x07) << 18) | |
578 | 0 | ((c[1] & 0x3f) << 12) | |
579 | 0 | ((c[2] & 0x3f) << 6) | |
580 | 0 | (c[3] & 0x3f)); |
581 | 0 | else |
582 | | /* that is an invalid code on purpose */ |
583 | 0 | return 0xffffffff; |
584 | 0 | } Unexecuted instantiation: json_parser_fuzzer.c:utf8_to_unicode Unexecuted instantiation: fuzzer_initialize.c:utf8_to_unicode Unexecuted instantiation: printsimple.c:utf8_to_unicode Unexecuted instantiation: printtup.c:utf8_to_unicode Unexecuted instantiation: spgtextproc.c:utf8_to_unicode Unexecuted instantiation: parallel.c:utf8_to_unicode Unexecuted instantiation: namespace.c:utf8_to_unicode Unexecuted instantiation: pg_collation.c:utf8_to_unicode Unexecuted instantiation: pg_conversion.c:utf8_to_unicode Unexecuted instantiation: pg_proc.c:utf8_to_unicode Unexecuted instantiation: pg_type.c:utf8_to_unicode Unexecuted instantiation: parse_node.c:utf8_to_unicode Unexecuted instantiation: parser.c:utf8_to_unicode Unexecuted instantiation: scan.c:utf8_to_unicode Unexecuted instantiation: scansup.c:utf8_to_unicode Unexecuted instantiation: async.c:utf8_to_unicode Unexecuted instantiation: collationcmds.c:utf8_to_unicode Unexecuted instantiation: conversioncmds.c:utf8_to_unicode Unexecuted instantiation: copy.c:utf8_to_unicode Unexecuted instantiation: copyfrom.c:utf8_to_unicode Unexecuted instantiation: copyfromparse.c:utf8_to_unicode Unexecuted instantiation: copyto.c:utf8_to_unicode Unexecuted instantiation: dbcommands.c:utf8_to_unicode Unexecuted instantiation: explain.c:utf8_to_unicode Unexecuted instantiation: explain_dr.c:utf8_to_unicode Unexecuted instantiation: extension.c:utf8_to_unicode Unexecuted instantiation: indexcmds.c:utf8_to_unicode Unexecuted instantiation: variable.c:utf8_to_unicode Unexecuted instantiation: execMain.c:utf8_to_unicode Unexecuted instantiation: execPartition.c:utf8_to_unicode Unexecuted instantiation: execUtils.c:utf8_to_unicode Unexecuted instantiation: auth-oauth.c:utf8_to_unicode Unexecuted instantiation: auth-sasl.c:utf8_to_unicode Unexecuted instantiation: auth-scram.c:utf8_to_unicode Unexecuted instantiation: auth.c:utf8_to_unicode Unexecuted instantiation: be-secure-common.c:utf8_to_unicode Unexecuted instantiation: be-secure.c:utf8_to_unicode Unexecuted instantiation: crypt.c:utf8_to_unicode Unexecuted instantiation: hba.c:utf8_to_unicode Unexecuted instantiation: pqcomm.c:utf8_to_unicode Unexecuted instantiation: pqformat.c:utf8_to_unicode Unexecuted instantiation: pqmq.c:utf8_to_unicode Unexecuted instantiation: launch_backend.c:utf8_to_unicode Unexecuted instantiation: postmaster.c:utf8_to_unicode Unexecuted instantiation: regcomp.c:utf8_to_unicode Unexecuted instantiation: regerror.c:utf8_to_unicode Unexecuted instantiation: regexec.c:utf8_to_unicode Unexecuted instantiation: regexport.c:utf8_to_unicode Unexecuted instantiation: regfree.c:utf8_to_unicode Unexecuted instantiation: regprefix.c:utf8_to_unicode Unexecuted instantiation: applyparallelworker.c:utf8_to_unicode Unexecuted instantiation: logicalfuncs.c:utf8_to_unicode Unexecuted instantiation: proto.c:utf8_to_unicode Unexecuted instantiation: worker.c:utf8_to_unicode Unexecuted instantiation: walreceiver.c:utf8_to_unicode Unexecuted instantiation: walsender.c:utf8_to_unicode Unexecuted instantiation: backup_manifest.c:utf8_to_unicode Unexecuted instantiation: basebackup_copy.c:utf8_to_unicode Unexecuted instantiation: basebackup_incremental.c:utf8_to_unicode Unexecuted instantiation: backend_startup.c:utf8_to_unicode Unexecuted instantiation: dest.c:utf8_to_unicode Unexecuted instantiation: fastpath.c:utf8_to_unicode Unexecuted instantiation: postgres.c:utf8_to_unicode Unexecuted instantiation: dict_ispell.c:utf8_to_unicode Unexecuted instantiation: dict_synonym.c:utf8_to_unicode Unexecuted instantiation: dict_thesaurus.c:utf8_to_unicode Unexecuted instantiation: regis.c:utf8_to_unicode Unexecuted instantiation: spell.c:utf8_to_unicode Unexecuted instantiation: ts_locale.c:utf8_to_unicode Unexecuted instantiation: ts_utils.c:utf8_to_unicode Unexecuted instantiation: wparser_def.c:utf8_to_unicode Unexecuted instantiation: backend_progress.c:utf8_to_unicode Unexecuted instantiation: backend_status.c:utf8_to_unicode Unexecuted instantiation: array_userfuncs.c:utf8_to_unicode Unexecuted instantiation: arrayfuncs.c:utf8_to_unicode Unexecuted instantiation: ascii.c:utf8_to_unicode Unexecuted instantiation: bool.c:utf8_to_unicode Unexecuted instantiation: cash.c:utf8_to_unicode Unexecuted instantiation: char.c:utf8_to_unicode Unexecuted instantiation: date.c:utf8_to_unicode Unexecuted instantiation: encode.c:utf8_to_unicode Unexecuted instantiation: enum.c:utf8_to_unicode Unexecuted instantiation: float.c:utf8_to_unicode Unexecuted instantiation: format_type.c:utf8_to_unicode Unexecuted instantiation: formatting.c:utf8_to_unicode Unexecuted instantiation: genfile.c:utf8_to_unicode Unexecuted instantiation: geo_ops.c:utf8_to_unicode Unexecuted instantiation: hbafuncs.c:utf8_to_unicode Unexecuted instantiation: int.c:utf8_to_unicode Unexecuted instantiation: int8.c:utf8_to_unicode Unexecuted instantiation: json.c:utf8_to_unicode Unexecuted instantiation: jsonb.c:utf8_to_unicode Unexecuted instantiation: jsonfuncs.c:utf8_to_unicode Unexecuted instantiation: jsonpath.c:utf8_to_unicode Unexecuted instantiation: jsonpath_exec.c:utf8_to_unicode Unexecuted instantiation: jsonpath_gram.c:utf8_to_unicode Unexecuted instantiation: jsonpath_scan.c:utf8_to_unicode Unexecuted instantiation: like.c:utf8_to_unicode Unexecuted instantiation: like_support.c:utf8_to_unicode Unexecuted instantiation: mac.c:utf8_to_unicode Unexecuted instantiation: mac8.c:utf8_to_unicode Unexecuted instantiation: mcxtfuncs.c:utf8_to_unicode Unexecuted instantiation: multirangetypes.c:utf8_to_unicode Unexecuted instantiation: name.c:utf8_to_unicode Unexecuted instantiation: network.c:utf8_to_unicode Unexecuted instantiation: numeric.c:utf8_to_unicode Unexecuted instantiation: oid.c:utf8_to_unicode Unexecuted instantiation: oracle_compat.c:utf8_to_unicode Unexecuted instantiation: pg_locale.c:utf8_to_unicode Unexecuted instantiation: pg_locale_builtin.c:utf8_to_unicode Unexecuted instantiation: pg_locale_icu.c:utf8_to_unicode Unexecuted instantiation: pg_locale_libc.c:utf8_to_unicode Unexecuted instantiation: pg_lsn.c:utf8_to_unicode Unexecuted instantiation: pseudotypes.c:utf8_to_unicode Unexecuted instantiation: rangetypes.c:utf8_to_unicode Unexecuted instantiation: regexp.c:utf8_to_unicode Unexecuted instantiation: regproc.c:utf8_to_unicode Unexecuted instantiation: rowtypes.c:utf8_to_unicode Unexecuted instantiation: ruleutils.c:utf8_to_unicode Unexecuted instantiation: tid.c:utf8_to_unicode Unexecuted instantiation: timestamp.c:utf8_to_unicode Unexecuted instantiation: tsquery.c:utf8_to_unicode Unexecuted instantiation: tsvector.c:utf8_to_unicode Unexecuted instantiation: tsvector_op.c:utf8_to_unicode Unexecuted instantiation: tsvector_parser.c:utf8_to_unicode Unexecuted instantiation: uuid.c:utf8_to_unicode Unexecuted instantiation: varbit.c:utf8_to_unicode Unexecuted instantiation: varchar.c:utf8_to_unicode Unexecuted instantiation: varlena.c:utf8_to_unicode Unexecuted instantiation: xid.c:utf8_to_unicode Unexecuted instantiation: xid8funcs.c:utf8_to_unicode Unexecuted instantiation: xml.c:utf8_to_unicode Unexecuted instantiation: csvlog.c:utf8_to_unicode Unexecuted instantiation: elog.c:utf8_to_unicode Unexecuted instantiation: jsonlog.c:utf8_to_unicode Unexecuted instantiation: globals.c:utf8_to_unicode Unexecuted instantiation: miscinit.c:utf8_to_unicode Unexecuted instantiation: postinit.c:utf8_to_unicode Unexecuted instantiation: conv.c:utf8_to_unicode Unexecuted instantiation: mbutils.c:utf8_to_unicode Unexecuted instantiation: stringinfo_mb.c:utf8_to_unicode Unexecuted instantiation: wstrcmp.c:utf8_to_unicode Unexecuted instantiation: wstrncmp.c:utf8_to_unicode Unexecuted instantiation: guc.c:utf8_to_unicode Unexecuted instantiation: guc-file.c:utf8_to_unicode Unexecuted instantiation: guc_tables.c:utf8_to_unicode Unexecuted instantiation: mcxt.c:utf8_to_unicode Unexecuted instantiation: encnames.c:utf8_to_unicode Unexecuted instantiation: jsonapi.c:utf8_to_unicode Unexecuted instantiation: parse_manifest.c:utf8_to_unicode Unexecuted instantiation: saslprep.c:utf8_to_unicode Unexecuted instantiation: unicode_case.c:utf8_to_unicode Unexecuted instantiation: unicode_category.c:utf8_to_unicode Unexecuted instantiation: unicode_norm.c:utf8_to_unicode Unexecuted instantiation: wchar.c:utf8_to_unicode Unexecuted instantiation: chklocale.c:utf8_to_unicode Unexecuted instantiation: path.c:utf8_to_unicode |
585 | | |
586 | | /* |
587 | | * Map a Unicode code point to UTF-8. utf8string must have at least |
588 | | * unicode_utf8len(c) bytes available. |
589 | | */ |
590 | | static inline unsigned char * |
591 | | unicode_to_utf8(pg_wchar c, unsigned char *utf8string) |
592 | 0 | { |
593 | 0 | if (c <= 0x7F) |
594 | 0 | { |
595 | 0 | utf8string[0] = c; |
596 | 0 | } |
597 | 0 | else if (c <= 0x7FF) |
598 | 0 | { |
599 | 0 | utf8string[0] = 0xC0 | ((c >> 6) & 0x1F); |
600 | 0 | utf8string[1] = 0x80 | (c & 0x3F); |
601 | 0 | } |
602 | 0 | else if (c <= 0xFFFF) |
603 | 0 | { |
604 | 0 | utf8string[0] = 0xE0 | ((c >> 12) & 0x0F); |
605 | 0 | utf8string[1] = 0x80 | ((c >> 6) & 0x3F); |
606 | 0 | utf8string[2] = 0x80 | (c & 0x3F); |
607 | 0 | } |
608 | 0 | else |
609 | 0 | { |
610 | 0 | utf8string[0] = 0xF0 | ((c >> 18) & 0x07); |
611 | 0 | utf8string[1] = 0x80 | ((c >> 12) & 0x3F); |
612 | 0 | utf8string[2] = 0x80 | ((c >> 6) & 0x3F); |
613 | 0 | utf8string[3] = 0x80 | (c & 0x3F); |
614 | 0 | } |
615 | |
|
616 | 0 | return utf8string; |
617 | 0 | } Unexecuted instantiation: json_parser_fuzzer.c:unicode_to_utf8 Unexecuted instantiation: fuzzer_initialize.c:unicode_to_utf8 Unexecuted instantiation: printsimple.c:unicode_to_utf8 Unexecuted instantiation: printtup.c:unicode_to_utf8 Unexecuted instantiation: spgtextproc.c:unicode_to_utf8 Unexecuted instantiation: parallel.c:unicode_to_utf8 Unexecuted instantiation: namespace.c:unicode_to_utf8 Unexecuted instantiation: pg_collation.c:unicode_to_utf8 Unexecuted instantiation: pg_conversion.c:unicode_to_utf8 Unexecuted instantiation: pg_proc.c:unicode_to_utf8 Unexecuted instantiation: pg_type.c:unicode_to_utf8 Unexecuted instantiation: parse_node.c:unicode_to_utf8 Unexecuted instantiation: parser.c:unicode_to_utf8 Unexecuted instantiation: scan.c:unicode_to_utf8 Unexecuted instantiation: scansup.c:unicode_to_utf8 Unexecuted instantiation: async.c:unicode_to_utf8 Unexecuted instantiation: collationcmds.c:unicode_to_utf8 Unexecuted instantiation: conversioncmds.c:unicode_to_utf8 Unexecuted instantiation: copy.c:unicode_to_utf8 Unexecuted instantiation: copyfrom.c:unicode_to_utf8 Unexecuted instantiation: copyfromparse.c:unicode_to_utf8 Unexecuted instantiation: copyto.c:unicode_to_utf8 Unexecuted instantiation: dbcommands.c:unicode_to_utf8 Unexecuted instantiation: explain.c:unicode_to_utf8 Unexecuted instantiation: explain_dr.c:unicode_to_utf8 Unexecuted instantiation: extension.c:unicode_to_utf8 Unexecuted instantiation: indexcmds.c:unicode_to_utf8 Unexecuted instantiation: variable.c:unicode_to_utf8 Unexecuted instantiation: execMain.c:unicode_to_utf8 Unexecuted instantiation: execPartition.c:unicode_to_utf8 Unexecuted instantiation: execUtils.c:unicode_to_utf8 Unexecuted instantiation: auth-oauth.c:unicode_to_utf8 Unexecuted instantiation: auth-sasl.c:unicode_to_utf8 Unexecuted instantiation: auth-scram.c:unicode_to_utf8 Unexecuted instantiation: auth.c:unicode_to_utf8 Unexecuted instantiation: be-secure-common.c:unicode_to_utf8 Unexecuted instantiation: be-secure.c:unicode_to_utf8 Unexecuted instantiation: crypt.c:unicode_to_utf8 Unexecuted instantiation: hba.c:unicode_to_utf8 Unexecuted instantiation: pqcomm.c:unicode_to_utf8 Unexecuted instantiation: pqformat.c:unicode_to_utf8 Unexecuted instantiation: pqmq.c:unicode_to_utf8 Unexecuted instantiation: launch_backend.c:unicode_to_utf8 Unexecuted instantiation: postmaster.c:unicode_to_utf8 Unexecuted instantiation: regcomp.c:unicode_to_utf8 Unexecuted instantiation: regerror.c:unicode_to_utf8 Unexecuted instantiation: regexec.c:unicode_to_utf8 Unexecuted instantiation: regexport.c:unicode_to_utf8 Unexecuted instantiation: regfree.c:unicode_to_utf8 Unexecuted instantiation: regprefix.c:unicode_to_utf8 Unexecuted instantiation: applyparallelworker.c:unicode_to_utf8 Unexecuted instantiation: logicalfuncs.c:unicode_to_utf8 Unexecuted instantiation: proto.c:unicode_to_utf8 Unexecuted instantiation: worker.c:unicode_to_utf8 Unexecuted instantiation: walreceiver.c:unicode_to_utf8 Unexecuted instantiation: walsender.c:unicode_to_utf8 Unexecuted instantiation: backup_manifest.c:unicode_to_utf8 Unexecuted instantiation: basebackup_copy.c:unicode_to_utf8 Unexecuted instantiation: basebackup_incremental.c:unicode_to_utf8 Unexecuted instantiation: backend_startup.c:unicode_to_utf8 Unexecuted instantiation: dest.c:unicode_to_utf8 Unexecuted instantiation: fastpath.c:unicode_to_utf8 Unexecuted instantiation: postgres.c:unicode_to_utf8 Unexecuted instantiation: dict_ispell.c:unicode_to_utf8 Unexecuted instantiation: dict_synonym.c:unicode_to_utf8 Unexecuted instantiation: dict_thesaurus.c:unicode_to_utf8 Unexecuted instantiation: regis.c:unicode_to_utf8 Unexecuted instantiation: spell.c:unicode_to_utf8 Unexecuted instantiation: ts_locale.c:unicode_to_utf8 Unexecuted instantiation: ts_utils.c:unicode_to_utf8 Unexecuted instantiation: wparser_def.c:unicode_to_utf8 Unexecuted instantiation: backend_progress.c:unicode_to_utf8 Unexecuted instantiation: backend_status.c:unicode_to_utf8 Unexecuted instantiation: array_userfuncs.c:unicode_to_utf8 Unexecuted instantiation: arrayfuncs.c:unicode_to_utf8 Unexecuted instantiation: ascii.c:unicode_to_utf8 Unexecuted instantiation: bool.c:unicode_to_utf8 Unexecuted instantiation: cash.c:unicode_to_utf8 Unexecuted instantiation: char.c:unicode_to_utf8 Unexecuted instantiation: date.c:unicode_to_utf8 Unexecuted instantiation: encode.c:unicode_to_utf8 Unexecuted instantiation: enum.c:unicode_to_utf8 Unexecuted instantiation: float.c:unicode_to_utf8 Unexecuted instantiation: format_type.c:unicode_to_utf8 Unexecuted instantiation: formatting.c:unicode_to_utf8 Unexecuted instantiation: genfile.c:unicode_to_utf8 Unexecuted instantiation: geo_ops.c:unicode_to_utf8 Unexecuted instantiation: hbafuncs.c:unicode_to_utf8 Unexecuted instantiation: int.c:unicode_to_utf8 Unexecuted instantiation: int8.c:unicode_to_utf8 Unexecuted instantiation: json.c:unicode_to_utf8 Unexecuted instantiation: jsonb.c:unicode_to_utf8 Unexecuted instantiation: jsonfuncs.c:unicode_to_utf8 Unexecuted instantiation: jsonpath.c:unicode_to_utf8 Unexecuted instantiation: jsonpath_exec.c:unicode_to_utf8 Unexecuted instantiation: jsonpath_gram.c:unicode_to_utf8 Unexecuted instantiation: jsonpath_scan.c:unicode_to_utf8 Unexecuted instantiation: like.c:unicode_to_utf8 Unexecuted instantiation: like_support.c:unicode_to_utf8 Unexecuted instantiation: mac.c:unicode_to_utf8 Unexecuted instantiation: mac8.c:unicode_to_utf8 Unexecuted instantiation: mcxtfuncs.c:unicode_to_utf8 Unexecuted instantiation: multirangetypes.c:unicode_to_utf8 Unexecuted instantiation: name.c:unicode_to_utf8 Unexecuted instantiation: network.c:unicode_to_utf8 Unexecuted instantiation: numeric.c:unicode_to_utf8 Unexecuted instantiation: oid.c:unicode_to_utf8 Unexecuted instantiation: oracle_compat.c:unicode_to_utf8 Unexecuted instantiation: pg_locale.c:unicode_to_utf8 Unexecuted instantiation: pg_locale_builtin.c:unicode_to_utf8 Unexecuted instantiation: pg_locale_icu.c:unicode_to_utf8 Unexecuted instantiation: pg_locale_libc.c:unicode_to_utf8 Unexecuted instantiation: pg_lsn.c:unicode_to_utf8 Unexecuted instantiation: pseudotypes.c:unicode_to_utf8 Unexecuted instantiation: rangetypes.c:unicode_to_utf8 Unexecuted instantiation: regexp.c:unicode_to_utf8 Unexecuted instantiation: regproc.c:unicode_to_utf8 Unexecuted instantiation: rowtypes.c:unicode_to_utf8 Unexecuted instantiation: ruleutils.c:unicode_to_utf8 Unexecuted instantiation: tid.c:unicode_to_utf8 Unexecuted instantiation: timestamp.c:unicode_to_utf8 Unexecuted instantiation: tsquery.c:unicode_to_utf8 Unexecuted instantiation: tsvector.c:unicode_to_utf8 Unexecuted instantiation: tsvector_op.c:unicode_to_utf8 Unexecuted instantiation: tsvector_parser.c:unicode_to_utf8 Unexecuted instantiation: uuid.c:unicode_to_utf8 Unexecuted instantiation: varbit.c:unicode_to_utf8 Unexecuted instantiation: varchar.c:unicode_to_utf8 Unexecuted instantiation: varlena.c:unicode_to_utf8 Unexecuted instantiation: xid.c:unicode_to_utf8 Unexecuted instantiation: xid8funcs.c:unicode_to_utf8 Unexecuted instantiation: xml.c:unicode_to_utf8 Unexecuted instantiation: csvlog.c:unicode_to_utf8 Unexecuted instantiation: elog.c:unicode_to_utf8 Unexecuted instantiation: jsonlog.c:unicode_to_utf8 Unexecuted instantiation: globals.c:unicode_to_utf8 Unexecuted instantiation: miscinit.c:unicode_to_utf8 Unexecuted instantiation: postinit.c:unicode_to_utf8 Unexecuted instantiation: conv.c:unicode_to_utf8 Unexecuted instantiation: mbutils.c:unicode_to_utf8 Unexecuted instantiation: stringinfo_mb.c:unicode_to_utf8 Unexecuted instantiation: wstrcmp.c:unicode_to_utf8 Unexecuted instantiation: wstrncmp.c:unicode_to_utf8 Unexecuted instantiation: guc.c:unicode_to_utf8 Unexecuted instantiation: guc-file.c:unicode_to_utf8 Unexecuted instantiation: guc_tables.c:unicode_to_utf8 Unexecuted instantiation: mcxt.c:unicode_to_utf8 Unexecuted instantiation: encnames.c:unicode_to_utf8 Unexecuted instantiation: jsonapi.c:unicode_to_utf8 Unexecuted instantiation: parse_manifest.c:unicode_to_utf8 Unexecuted instantiation: saslprep.c:unicode_to_utf8 Unexecuted instantiation: unicode_case.c:unicode_to_utf8 Unexecuted instantiation: unicode_category.c:unicode_to_utf8 Unexecuted instantiation: unicode_norm.c:unicode_to_utf8 Unexecuted instantiation: wchar.c:unicode_to_utf8 Unexecuted instantiation: chklocale.c:unicode_to_utf8 Unexecuted instantiation: path.c:unicode_to_utf8 |
618 | | |
619 | | /* |
620 | | * Number of bytes needed to represent the given char in UTF8. |
621 | | */ |
622 | | static inline int |
623 | | unicode_utf8len(pg_wchar c) |
624 | 0 | { |
625 | 0 | if (c <= 0x7F) |
626 | 0 | return 1; |
627 | 0 | else if (c <= 0x7FF) |
628 | 0 | return 2; |
629 | 0 | else if (c <= 0xFFFF) |
630 | 0 | return 3; |
631 | 0 | else |
632 | 0 | return 4; |
633 | 0 | } Unexecuted instantiation: json_parser_fuzzer.c:unicode_utf8len Unexecuted instantiation: fuzzer_initialize.c:unicode_utf8len Unexecuted instantiation: printsimple.c:unicode_utf8len Unexecuted instantiation: printtup.c:unicode_utf8len Unexecuted instantiation: spgtextproc.c:unicode_utf8len Unexecuted instantiation: parallel.c:unicode_utf8len Unexecuted instantiation: namespace.c:unicode_utf8len Unexecuted instantiation: pg_collation.c:unicode_utf8len Unexecuted instantiation: pg_conversion.c:unicode_utf8len Unexecuted instantiation: pg_proc.c:unicode_utf8len Unexecuted instantiation: pg_type.c:unicode_utf8len Unexecuted instantiation: parse_node.c:unicode_utf8len Unexecuted instantiation: parser.c:unicode_utf8len Unexecuted instantiation: scan.c:unicode_utf8len Unexecuted instantiation: scansup.c:unicode_utf8len Unexecuted instantiation: async.c:unicode_utf8len Unexecuted instantiation: collationcmds.c:unicode_utf8len Unexecuted instantiation: conversioncmds.c:unicode_utf8len Unexecuted instantiation: copy.c:unicode_utf8len Unexecuted instantiation: copyfrom.c:unicode_utf8len Unexecuted instantiation: copyfromparse.c:unicode_utf8len Unexecuted instantiation: copyto.c:unicode_utf8len Unexecuted instantiation: dbcommands.c:unicode_utf8len Unexecuted instantiation: explain.c:unicode_utf8len Unexecuted instantiation: explain_dr.c:unicode_utf8len Unexecuted instantiation: extension.c:unicode_utf8len Unexecuted instantiation: indexcmds.c:unicode_utf8len Unexecuted instantiation: variable.c:unicode_utf8len Unexecuted instantiation: execMain.c:unicode_utf8len Unexecuted instantiation: execPartition.c:unicode_utf8len Unexecuted instantiation: execUtils.c:unicode_utf8len Unexecuted instantiation: auth-oauth.c:unicode_utf8len Unexecuted instantiation: auth-sasl.c:unicode_utf8len Unexecuted instantiation: auth-scram.c:unicode_utf8len Unexecuted instantiation: auth.c:unicode_utf8len Unexecuted instantiation: be-secure-common.c:unicode_utf8len Unexecuted instantiation: be-secure.c:unicode_utf8len Unexecuted instantiation: crypt.c:unicode_utf8len Unexecuted instantiation: hba.c:unicode_utf8len Unexecuted instantiation: pqcomm.c:unicode_utf8len Unexecuted instantiation: pqformat.c:unicode_utf8len Unexecuted instantiation: pqmq.c:unicode_utf8len Unexecuted instantiation: launch_backend.c:unicode_utf8len Unexecuted instantiation: postmaster.c:unicode_utf8len Unexecuted instantiation: regcomp.c:unicode_utf8len Unexecuted instantiation: regerror.c:unicode_utf8len Unexecuted instantiation: regexec.c:unicode_utf8len Unexecuted instantiation: regexport.c:unicode_utf8len Unexecuted instantiation: regfree.c:unicode_utf8len Unexecuted instantiation: regprefix.c:unicode_utf8len Unexecuted instantiation: applyparallelworker.c:unicode_utf8len Unexecuted instantiation: logicalfuncs.c:unicode_utf8len Unexecuted instantiation: proto.c:unicode_utf8len Unexecuted instantiation: worker.c:unicode_utf8len Unexecuted instantiation: walreceiver.c:unicode_utf8len Unexecuted instantiation: walsender.c:unicode_utf8len Unexecuted instantiation: backup_manifest.c:unicode_utf8len Unexecuted instantiation: basebackup_copy.c:unicode_utf8len Unexecuted instantiation: basebackup_incremental.c:unicode_utf8len Unexecuted instantiation: backend_startup.c:unicode_utf8len Unexecuted instantiation: dest.c:unicode_utf8len Unexecuted instantiation: fastpath.c:unicode_utf8len Unexecuted instantiation: postgres.c:unicode_utf8len Unexecuted instantiation: dict_ispell.c:unicode_utf8len Unexecuted instantiation: dict_synonym.c:unicode_utf8len Unexecuted instantiation: dict_thesaurus.c:unicode_utf8len Unexecuted instantiation: regis.c:unicode_utf8len Unexecuted instantiation: spell.c:unicode_utf8len Unexecuted instantiation: ts_locale.c:unicode_utf8len Unexecuted instantiation: ts_utils.c:unicode_utf8len Unexecuted instantiation: wparser_def.c:unicode_utf8len Unexecuted instantiation: backend_progress.c:unicode_utf8len Unexecuted instantiation: backend_status.c:unicode_utf8len Unexecuted instantiation: array_userfuncs.c:unicode_utf8len Unexecuted instantiation: arrayfuncs.c:unicode_utf8len Unexecuted instantiation: ascii.c:unicode_utf8len Unexecuted instantiation: bool.c:unicode_utf8len Unexecuted instantiation: cash.c:unicode_utf8len Unexecuted instantiation: char.c:unicode_utf8len Unexecuted instantiation: date.c:unicode_utf8len Unexecuted instantiation: encode.c:unicode_utf8len Unexecuted instantiation: enum.c:unicode_utf8len Unexecuted instantiation: float.c:unicode_utf8len Unexecuted instantiation: format_type.c:unicode_utf8len Unexecuted instantiation: formatting.c:unicode_utf8len Unexecuted instantiation: genfile.c:unicode_utf8len Unexecuted instantiation: geo_ops.c:unicode_utf8len Unexecuted instantiation: hbafuncs.c:unicode_utf8len Unexecuted instantiation: int.c:unicode_utf8len Unexecuted instantiation: int8.c:unicode_utf8len Unexecuted instantiation: json.c:unicode_utf8len Unexecuted instantiation: jsonb.c:unicode_utf8len Unexecuted instantiation: jsonfuncs.c:unicode_utf8len Unexecuted instantiation: jsonpath.c:unicode_utf8len Unexecuted instantiation: jsonpath_exec.c:unicode_utf8len Unexecuted instantiation: jsonpath_gram.c:unicode_utf8len Unexecuted instantiation: jsonpath_scan.c:unicode_utf8len Unexecuted instantiation: like.c:unicode_utf8len Unexecuted instantiation: like_support.c:unicode_utf8len Unexecuted instantiation: mac.c:unicode_utf8len Unexecuted instantiation: mac8.c:unicode_utf8len Unexecuted instantiation: mcxtfuncs.c:unicode_utf8len Unexecuted instantiation: multirangetypes.c:unicode_utf8len Unexecuted instantiation: name.c:unicode_utf8len Unexecuted instantiation: network.c:unicode_utf8len Unexecuted instantiation: numeric.c:unicode_utf8len Unexecuted instantiation: oid.c:unicode_utf8len Unexecuted instantiation: oracle_compat.c:unicode_utf8len Unexecuted instantiation: pg_locale.c:unicode_utf8len Unexecuted instantiation: pg_locale_builtin.c:unicode_utf8len Unexecuted instantiation: pg_locale_icu.c:unicode_utf8len Unexecuted instantiation: pg_locale_libc.c:unicode_utf8len Unexecuted instantiation: pg_lsn.c:unicode_utf8len Unexecuted instantiation: pseudotypes.c:unicode_utf8len Unexecuted instantiation: rangetypes.c:unicode_utf8len Unexecuted instantiation: regexp.c:unicode_utf8len Unexecuted instantiation: regproc.c:unicode_utf8len Unexecuted instantiation: rowtypes.c:unicode_utf8len Unexecuted instantiation: ruleutils.c:unicode_utf8len Unexecuted instantiation: tid.c:unicode_utf8len Unexecuted instantiation: timestamp.c:unicode_utf8len Unexecuted instantiation: tsquery.c:unicode_utf8len Unexecuted instantiation: tsvector.c:unicode_utf8len Unexecuted instantiation: tsvector_op.c:unicode_utf8len Unexecuted instantiation: tsvector_parser.c:unicode_utf8len Unexecuted instantiation: uuid.c:unicode_utf8len Unexecuted instantiation: varbit.c:unicode_utf8len Unexecuted instantiation: varchar.c:unicode_utf8len Unexecuted instantiation: varlena.c:unicode_utf8len Unexecuted instantiation: xid.c:unicode_utf8len Unexecuted instantiation: xid8funcs.c:unicode_utf8len Unexecuted instantiation: xml.c:unicode_utf8len Unexecuted instantiation: csvlog.c:unicode_utf8len Unexecuted instantiation: elog.c:unicode_utf8len Unexecuted instantiation: jsonlog.c:unicode_utf8len Unexecuted instantiation: globals.c:unicode_utf8len Unexecuted instantiation: miscinit.c:unicode_utf8len Unexecuted instantiation: postinit.c:unicode_utf8len Unexecuted instantiation: conv.c:unicode_utf8len Unexecuted instantiation: mbutils.c:unicode_utf8len Unexecuted instantiation: stringinfo_mb.c:unicode_utf8len Unexecuted instantiation: wstrcmp.c:unicode_utf8len Unexecuted instantiation: wstrncmp.c:unicode_utf8len Unexecuted instantiation: guc.c:unicode_utf8len Unexecuted instantiation: guc-file.c:unicode_utf8len Unexecuted instantiation: guc_tables.c:unicode_utf8len Unexecuted instantiation: mcxt.c:unicode_utf8len Unexecuted instantiation: encnames.c:unicode_utf8len Unexecuted instantiation: jsonapi.c:unicode_utf8len Unexecuted instantiation: parse_manifest.c:unicode_utf8len Unexecuted instantiation: saslprep.c:unicode_utf8len Unexecuted instantiation: unicode_case.c:unicode_utf8len Unexecuted instantiation: unicode_category.c:unicode_utf8len Unexecuted instantiation: unicode_norm.c:unicode_utf8len Unexecuted instantiation: wchar.c:unicode_utf8len Unexecuted instantiation: chklocale.c:unicode_utf8len Unexecuted instantiation: path.c:unicode_utf8len |
634 | | |
635 | | /* |
636 | | * The functions in this list are exported by libpq, and we need to be sure |
637 | | * that we know which calls are satisfied by libpq and which are satisfied |
638 | | * by static linkage to libpgcommon. (This is because we might be using a |
639 | | * libpq.so that's of a different major version and has encoding IDs that |
640 | | * differ from the current version's.) The nominal function names are what |
641 | | * are actually used in and exported by libpq, while the names exported by |
642 | | * libpgcommon.a and libpgcommon_srv.a end in "_private". |
643 | | */ |
644 | | #if defined(USE_PRIVATE_ENCODING_FUNCS) || !defined(FRONTEND) |
645 | 0 | #define pg_char_to_encoding pg_char_to_encoding_private |
646 | 0 | #define pg_encoding_to_char pg_encoding_to_char_private |
647 | 0 | #define pg_valid_server_encoding pg_valid_server_encoding_private |
648 | | #define pg_valid_server_encoding_id pg_valid_server_encoding_id_private |
649 | 0 | #define pg_utf_mblen pg_utf_mblen_private |
650 | | #endif |
651 | | |
652 | | /* |
653 | | * These functions are considered part of libpq's exported API and |
654 | | * are also declared in libpq-fe.h. |
655 | | */ |
656 | | extern int pg_char_to_encoding(const char *name); |
657 | | extern const char *pg_encoding_to_char(int encoding); |
658 | | extern int pg_valid_server_encoding_id(int encoding); |
659 | | |
660 | | /* |
661 | | * These functions are available to frontend code that links with libpgcommon |
662 | | * (in addition to the ones just above). The constant tables declared |
663 | | * earlier in this file are also available from libpgcommon. |
664 | | */ |
665 | | extern void pg_encoding_set_invalid(int encoding, char *dst); |
666 | | extern int pg_encoding_mblen(int encoding, const char *mbstr); |
667 | | extern int pg_encoding_mblen_or_incomplete(int encoding, const char *mbstr, |
668 | | size_t remaining); |
669 | | extern int pg_encoding_mblen_bounded(int encoding, const char *mbstr); |
670 | | extern int pg_encoding_dsplen(int encoding, const char *mbstr); |
671 | | extern int pg_encoding_verifymbchar(int encoding, const char *mbstr, int len); |
672 | | extern int pg_encoding_verifymbstr(int encoding, const char *mbstr, int len); |
673 | | extern int pg_encoding_max_length(int encoding); |
674 | | extern int pg_valid_client_encoding(const char *name); |
675 | | extern int pg_valid_server_encoding(const char *name); |
676 | | extern bool is_encoding_supported_by_icu(int encoding); |
677 | | extern const char *get_encoding_name_for_icu(int encoding); |
678 | | |
679 | | extern unsigned char *unicode_to_utf8(pg_wchar c, unsigned char *utf8string); |
680 | | extern pg_wchar utf8_to_unicode(const unsigned char *c); |
681 | | extern bool pg_utf8_islegal(const unsigned char *source, int length); |
682 | | extern int pg_utf_mblen(const unsigned char *s); |
683 | | extern int pg_mule_mblen(const unsigned char *s); |
684 | | |
685 | | /* |
686 | | * The remaining functions are backend-only. |
687 | | */ |
688 | | extern int pg_mb2wchar(const char *from, pg_wchar *to); |
689 | | extern int pg_mb2wchar_with_len(const char *from, pg_wchar *to, int len); |
690 | | extern int pg_encoding_mb2wchar_with_len(int encoding, |
691 | | const char *from, pg_wchar *to, int len); |
692 | | extern int pg_wchar2mb(const pg_wchar *from, char *to); |
693 | | extern int pg_wchar2mb_with_len(const pg_wchar *from, char *to, int len); |
694 | | extern int pg_encoding_wchar2mb_with_len(int encoding, |
695 | | const pg_wchar *from, char *to, int len); |
696 | | extern int pg_char_and_wchar_strcmp(const char *s1, const pg_wchar *s2); |
697 | | extern int pg_wchar_strncmp(const pg_wchar *s1, const pg_wchar *s2, size_t n); |
698 | | extern int pg_char_and_wchar_strncmp(const char *s1, const pg_wchar *s2, size_t n); |
699 | | extern size_t pg_wchar_strlen(const pg_wchar *str); |
700 | | extern int pg_mblen(const char *mbstr); |
701 | | extern int pg_dsplen(const char *mbstr); |
702 | | extern int pg_mbstrlen(const char *mbstr); |
703 | | extern int pg_mbstrlen_with_len(const char *mbstr, int limit); |
704 | | extern int pg_mbcliplen(const char *mbstr, int len, int limit); |
705 | | extern int pg_encoding_mbcliplen(int encoding, const char *mbstr, |
706 | | int len, int limit); |
707 | | extern int pg_mbcharcliplen(const char *mbstr, int len, int limit); |
708 | | extern int pg_database_encoding_max_length(void); |
709 | | extern mbcharacter_incrementer pg_database_encoding_character_incrementer(void); |
710 | | |
711 | | extern int PrepareClientEncoding(int encoding); |
712 | | extern int SetClientEncoding(int encoding); |
713 | | extern void InitializeClientEncoding(void); |
714 | | extern int pg_get_client_encoding(void); |
715 | | extern const char *pg_get_client_encoding_name(void); |
716 | | |
717 | | extern void SetDatabaseEncoding(int encoding); |
718 | | extern int GetDatabaseEncoding(void); |
719 | | extern const char *GetDatabaseEncodingName(void); |
720 | | extern void SetMessageEncoding(int encoding); |
721 | | extern int GetMessageEncoding(void); |
722 | | |
723 | | #ifdef ENABLE_NLS |
724 | | extern int pg_bind_textdomain_codeset(const char *domainname); |
725 | | #endif |
726 | | |
727 | | extern unsigned char *pg_do_encoding_conversion(unsigned char *src, int len, |
728 | | int src_encoding, |
729 | | int dest_encoding); |
730 | | extern int pg_do_encoding_conversion_buf(Oid proc, |
731 | | int src_encoding, |
732 | | int dest_encoding, |
733 | | unsigned char *src, int srclen, |
734 | | unsigned char *dest, int destlen, |
735 | | bool noError); |
736 | | |
737 | | extern char *pg_client_to_server(const char *s, int len); |
738 | | extern char *pg_server_to_client(const char *s, int len); |
739 | | extern char *pg_any_to_server(const char *s, int len, int encoding); |
740 | | extern char *pg_server_to_any(const char *s, int len, int encoding); |
741 | | |
742 | | extern void pg_unicode_to_server(pg_wchar c, unsigned char *s); |
743 | | extern bool pg_unicode_to_server_noerror(pg_wchar c, unsigned char *s); |
744 | | |
745 | | extern unsigned short BIG5toCNS(unsigned short big5, unsigned char *lc); |
746 | | extern unsigned short CNStoBIG5(unsigned short cns, unsigned char lc); |
747 | | |
748 | | extern int UtfToLocal(const unsigned char *utf, int len, |
749 | | unsigned char *iso, |
750 | | const pg_mb_radix_tree *map, |
751 | | const pg_utf_to_local_combined *cmap, int cmapsize, |
752 | | utf_local_conversion_func conv_func, |
753 | | int encoding, bool noError); |
754 | | extern int LocalToUtf(const unsigned char *iso, int len, |
755 | | unsigned char *utf, |
756 | | const pg_mb_radix_tree *map, |
757 | | const pg_local_to_utf_combined *cmap, int cmapsize, |
758 | | utf_local_conversion_func conv_func, |
759 | | int encoding, bool noError); |
760 | | |
761 | | extern bool pg_verifymbstr(const char *mbstr, int len, bool noError); |
762 | | extern bool pg_verify_mbstr(int encoding, const char *mbstr, int len, |
763 | | bool noError); |
764 | | extern int pg_verify_mbstr_len(int encoding, const char *mbstr, int len, |
765 | | bool noError); |
766 | | |
767 | | extern void check_encoding_conversion_args(int src_encoding, |
768 | | int dest_encoding, |
769 | | int len, |
770 | | int expected_src_encoding, |
771 | | int expected_dest_encoding); |
772 | | |
773 | | pg_noreturn extern void report_invalid_encoding(int encoding, const char *mbstr, int len); |
774 | | pg_noreturn extern void report_untranslatable_char(int src_encoding, int dest_encoding, |
775 | | const char *mbstr, int len); |
776 | | |
777 | | extern int local2local(const unsigned char *l, unsigned char *p, int len, |
778 | | int src_encoding, int dest_encoding, |
779 | | const unsigned char *tab, bool noError); |
780 | | extern int latin2mic(const unsigned char *l, unsigned char *p, int len, |
781 | | int lc, int encoding, bool noError); |
782 | | extern int mic2latin(const unsigned char *mic, unsigned char *p, int len, |
783 | | int lc, int encoding, bool noError); |
784 | | extern int latin2mic_with_table(const unsigned char *l, unsigned char *p, |
785 | | int len, int lc, int encoding, |
786 | | const unsigned char *tab, bool noError); |
787 | | extern int mic2latin_with_table(const unsigned char *mic, unsigned char *p, |
788 | | int len, int lc, int encoding, |
789 | | const unsigned char *tab, bool noError); |
790 | | |
791 | | #ifdef WIN32 |
792 | | extern WCHAR *pgwin32_message_to_UTF16(const char *str, int len, int *utf16len); |
793 | | #endif |
794 | | |
795 | | #endif /* PG_WCHAR_H */ |