PostgreSQL Source Code git master
Loading...
Searching...
No Matches
cyrillic.c
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * KOI8R, WIN1251, WIN866 and ISO_8859_5
4 *
5 * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
6 * Portions Copyright (c) 1994, Regents of the University of California
7 *
8 * IDENTIFICATION
9 * src/backend/utils/mb/conversion_procs/cyrillic/cyrillic.c
10 *
11 *-------------------------------------------------------------------------
12 */
13
14#include "postgres.h"
15#include "fmgr.h"
16#include "mb/pg_wchar.h"
17
19 .name = "cyrillic",
20 .version = PG_VERSION
21);
22
35
36/* ----------
37 * conv_proc(
38 * INTEGER, -- source encoding id
39 * INTEGER, -- destination encoding id
40 * CSTRING, -- source string (null terminated C string)
41 * CSTRING, -- destination string (null terminated C string)
42 * INTEGER, -- source string length
43 * BOOL -- if true, don't throw an error if conversion fails
44 * ) returns INTEGER;
45 *
46 * Returns the number of bytes successfully converted.
47 * ----------
48 */
49
50/*
51 * Cyrillic support
52 * currently supported Cyrillic encodings:
53 *
54 * KOI8-R
55 * ISO-8859-5
56 * Microsoft's CP1251 (windows-1251)
57 * Alternativny Variant (MS-DOS CP866)
58 */
59
60/* ISO-8859-5 to KOI8-R */
61static const unsigned char iso2koi[] = {
62 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
63 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
64 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
65 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
66 0x00, 0xB3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
67 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68 0xE1, 0xE2, 0xF7, 0xE7, 0xE4, 0xE5, 0xF6, 0xFA,
69 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0,
70 0xF2, 0xF3, 0xF4, 0xF5, 0xE6, 0xE8, 0xE3, 0xFE,
71 0xFB, 0xFD, 0xFF, 0xF9, 0xF8, 0xFC, 0xE0, 0xF1,
72 0xC1, 0xC2, 0xD7, 0xC7, 0xC4, 0xC5, 0xD6, 0xDA,
73 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0,
74 0xD2, 0xD3, 0xD4, 0xD5, 0xC6, 0xC8, 0xC3, 0xDE,
75 0xDB, 0xDD, 0xDF, 0xD9, 0xD8, 0xDC, 0xC0, 0xD1,
76 0x00, 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
78};
79
80/* KOI8-R to ISO-8859-5 */
81static const unsigned char koi2iso[] = {
82 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
84 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
86 0x00, 0x00, 0x00, 0xF1, 0x00, 0x00, 0x00, 0x00,
87 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x00, 0x00,
89 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90 0xEE, 0xD0, 0xD1, 0xE6, 0xD4, 0xD5, 0xE4, 0xD3,
91 0xE5, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE,
92 0xDF, 0xEF, 0xE0, 0xE1, 0xE2, 0xE3, 0xD6, 0xD2,
93 0xEC, 0xEB, 0xD7, 0xE8, 0xED, 0xE9, 0xE7, 0xEA,
94 0xCE, 0xB0, 0xB1, 0xC6, 0xB4, 0xB5, 0xC4, 0xB3,
95 0xC5, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE,
96 0xBF, 0xCF, 0xC0, 0xC1, 0xC2, 0xC3, 0xB6, 0xB2,
97 0xCC, 0xCB, 0xB7, 0xC8, 0xCD, 0xC9, 0xC7, 0xCA
98};
99
100/* WIN1251 to KOI8-R */
101static const unsigned char win12512koi[] = {
102 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106 0x00, 0x00, 0x00, 0x00, 0x00, 0xBD, 0x00, 0x00,
107 0xB3, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x00, 0xB7,
108 0x00, 0x00, 0xB6, 0xA6, 0xAD, 0x00, 0x00, 0x00,
109 0xA3, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x00, 0xA7,
110 0xE1, 0xE2, 0xF7, 0xE7, 0xE4, 0xE5, 0xF6, 0xFA,
111 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0,
112 0xF2, 0xF3, 0xF4, 0xF5, 0xE6, 0xE8, 0xE3, 0xFE,
113 0xFB, 0xFD, 0xFF, 0xF9, 0xF8, 0xFC, 0xE0, 0xF1,
114 0xC1, 0xC2, 0xD7, 0xC7, 0xC4, 0xC5, 0xD6, 0xDA,
115 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0,
116 0xD2, 0xD3, 0xD4, 0xD5, 0xC6, 0xC8, 0xC3, 0xDE,
117 0xDB, 0xDD, 0xDF, 0xD9, 0xD8, 0xDC, 0xC0, 0xD1
118};
119
120/* KOI8-R to WIN1251 */
121static const unsigned char koi2win1251[] = {
122 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
125 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126 0x00, 0x00, 0x00, 0xB8, 0xBA, 0x00, 0xB3, 0xBF,
127 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00,
128 0x00, 0x00, 0x00, 0xA8, 0xAA, 0x00, 0xB2, 0xAF,
129 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00,
130 0xFE, 0xE0, 0xE1, 0xF6, 0xE4, 0xE5, 0xF4, 0xE3,
131 0xF5, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE,
132 0xEF, 0xFF, 0xF0, 0xF1, 0xF2, 0xF3, 0xE6, 0xE2,
133 0xFC, 0xFB, 0xE7, 0xF8, 0xFD, 0xF9, 0xF7, 0xFA,
134 0xDE, 0xC0, 0xC1, 0xD6, 0xC4, 0xC5, 0xD4, 0xC3,
135 0xD5, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE,
136 0xCF, 0xDF, 0xD0, 0xD1, 0xD2, 0xD3, 0xC6, 0xC2,
137 0xDC, 0xDB, 0xC7, 0xD8, 0xDD, 0xD9, 0xD7, 0xDA
138};
139
140/* WIN866 to KOI8-R */
141static const unsigned char win8662koi[] = {
142 0xE1, 0xE2, 0xF7, 0xE7, 0xE4, 0xE5, 0xF6, 0xFA,
143 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0,
144 0xF2, 0xF3, 0xF4, 0xF5, 0xE6, 0xE8, 0xE3, 0xFE,
145 0xFB, 0xFD, 0xFF, 0xF9, 0xF8, 0xFC, 0xE0, 0xF1,
146 0xC1, 0xC2, 0xD7, 0xC7, 0xC4, 0xC5, 0xD6, 0xDA,
147 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0,
148 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149 0x00, 0x00, 0x00, 0x00, 0x00, 0xBD, 0x00, 0x00,
150 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
151 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
152 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
154 0xD2, 0xD3, 0xD4, 0xD5, 0xC6, 0xC8, 0xC3, 0xDE,
155 0xDB, 0xDD, 0xDF, 0xD9, 0xD8, 0xDC, 0xC0, 0xD1,
156 0xB3, 0xA3, 0xB4, 0xA4, 0xB7, 0xA7, 0x00, 0x00,
157 0xB6, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
158};
159
160/* KOI8-R to WIN866 */
161static const unsigned char koi2win866[] = {
162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
166 0x00, 0x00, 0x00, 0xF1, 0xF3, 0x00, 0xF9, 0xF5,
167 0x00, 0x00, 0x00, 0x00, 0x00, 0xAD, 0x00, 0x00,
168 0x00, 0x00, 0x00, 0xF0, 0xF2, 0x00, 0xF8, 0xF4,
169 0x00, 0x00, 0x00, 0x00, 0x00, 0xBD, 0x00, 0x00,
170 0xEE, 0xA0, 0xA1, 0xE6, 0xA4, 0xA5, 0xE4, 0xA3,
171 0xE5, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE,
172 0xAF, 0xEF, 0xE0, 0xE1, 0xE2, 0xE3, 0xA6, 0xA2,
173 0xEC, 0xEB, 0xA7, 0xE8, 0xED, 0xE9, 0xE7, 0xEA,
174 0x9E, 0x80, 0x81, 0x96, 0x84, 0x85, 0x94, 0x83,
175 0x95, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E,
176 0x8F, 0x9F, 0x90, 0x91, 0x92, 0x93, 0x86, 0x82,
177 0x9C, 0x9B, 0x87, 0x98, 0x9D, 0x99, 0x97, 0x9A
178};
179
180/* WIN866 to WIN1251 */
181static const unsigned char win8662win1251[] = {
182 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
183 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
184 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
185 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
186 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
187 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
188 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
189 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00,
190 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
191 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
192 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
194 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
195 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
196 0xA8, 0xB8, 0xAA, 0xBA, 0xAF, 0xBF, 0x00, 0x00,
197 0xB2, 0xB3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
198};
199
200/* WIN1251 to WIN866 */
201static const unsigned char win12512win866[] = {
202 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
203 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
204 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
205 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
206 0x00, 0x00, 0x00, 0x00, 0x00, 0xBD, 0x00, 0x00,
207 0xF0, 0x00, 0xF2, 0x00, 0x00, 0x00, 0x00, 0xF4,
208 0x00, 0x00, 0xF8, 0xF9, 0xAD, 0x00, 0x00, 0x00,
209 0xF1, 0x00, 0xF3, 0x00, 0x00, 0x00, 0x00, 0xF5,
210 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
211 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
212 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
213 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
214 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
215 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
216 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
217 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF
218};
219
220/* ISO-8859-5 to WIN1251 */
221static const unsigned char iso2win1251[] = {
222 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
223 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
224 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
225 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
226 0x00, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
227 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
228 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
229 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
230 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
231 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
232 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
233 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
234 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
235 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
236 0x00, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
237 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
238};
239
240/* WIN1251 to ISO-8859-5 */
241static const unsigned char win12512iso[] = {
242 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
243 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
244 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
245 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
246 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
247 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
248 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
249 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
250 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
251 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
252 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
253 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
254 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
255 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
256 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
257 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF
258};
259
260/* ISO-8859-5 to WIN866 */
261static const unsigned char iso2win866[] = {
262 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
263 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
264 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
265 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
266 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
267 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
268 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
269 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
270 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
271 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
272 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
273 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
274 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
275 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
276 0x00, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
277 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
278};
279
280/* WIN866 to ISO-8859-5 */
281static const unsigned char win8662iso[] = {
282 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
283 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
284 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
285 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
286 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
287 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
288 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
289 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
290 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
291 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
292 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
293 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
294 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
295 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
296 0xA1, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
297 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
298};
299
300
301Datum
303{
304 unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
305 unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
306 int len = PG_GETARG_INT32(4);
307 bool noError = PG_GETARG_BOOL(5);
308 int converted;
309
311
313
315}
316
317Datum
319{
320 unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
321 unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
322 int len = PG_GETARG_INT32(4);
323 bool noError = PG_GETARG_BOOL(5);
324 int converted;
325
327
329
331}
332
333Datum
335{
336 unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
337 unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
338 int len = PG_GETARG_INT32(4);
339 bool noError = PG_GETARG_BOOL(5);
340 int converted;
341
343
345
347}
348
349Datum
351{
352 unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
353 unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
354 int len = PG_GETARG_INT32(4);
355 bool noError = PG_GETARG_BOOL(5);
356 int converted;
357
359
361
363}
364
365Datum
367{
368 unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
369 unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
370 int len = PG_GETARG_INT32(4);
371 bool noError = PG_GETARG_BOOL(5);
372 int converted;
373
375
377
379}
380
381Datum
383{
384 unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
385 unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
386 int len = PG_GETARG_INT32(4);
387 bool noError = PG_GETARG_BOOL(5);
388 int converted;
389
391
393
395}
396
397Datum
399{
400 unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
401 unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
402 int len = PG_GETARG_INT32(4);
403 bool noError = PG_GETARG_BOOL(5);
404 int converted;
405
407
409
411}
412
413Datum
415{
416 unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
417 unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
418 int len = PG_GETARG_INT32(4);
419 bool noError = PG_GETARG_BOOL(5);
420 int converted;
421
423
425
427}
428
429Datum
431{
432 unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
433 unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
434 int len = PG_GETARG_INT32(4);
435 bool noError = PG_GETARG_BOOL(5);
436 int converted;
437
439
441
443}
444
445Datum
447{
448 unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
449 unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
450 int len = PG_GETARG_INT32(4);
451 bool noError = PG_GETARG_BOOL(5);
452 int converted;
453
455
457
459}
460
461Datum
463{
464 unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
465 unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
466 int len = PG_GETARG_INT32(4);
467 bool noError = PG_GETARG_BOOL(5);
468 int converted;
469
471
473
475}
476
477Datum
479{
480 unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
481 unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
482 int len = PG_GETARG_INT32(4);
483 bool noError = PG_GETARG_BOOL(5);
484 int converted;
485
487
489
491}
int local2local(const unsigned char *l, unsigned char *p, int len, int src_encoding, int dest_encoding, const unsigned char *tab, bool noError)
Definition conv.c:33
static const unsigned char win8662koi[]
Definition cyrillic.c:141
static const unsigned char iso2win866[]
Definition cyrillic.c:261
Datum win866_to_win1251(PG_FUNCTION_ARGS)
Definition cyrillic.c:366
Datum win1251_to_win866(PG_FUNCTION_ARGS)
Definition cyrillic.c:382
static const unsigned char win12512win866[]
Definition cyrillic.c:201
Datum koi8r_to_win1251(PG_FUNCTION_ARGS)
Definition cyrillic.c:302
static const unsigned char win8662iso[]
Definition cyrillic.c:281
Datum iso_to_win866(PG_FUNCTION_ARGS)
Definition cyrillic.c:462
static const unsigned char win12512iso[]
Definition cyrillic.c:241
static const unsigned char koi2iso[]
Definition cyrillic.c:81
Datum win866_to_iso(PG_FUNCTION_ARGS)
Definition cyrillic.c:478
static const unsigned char win12512koi[]
Definition cyrillic.c:101
static const unsigned char iso2win1251[]
Definition cyrillic.c:221
Datum koi8r_to_iso(PG_FUNCTION_ARGS)
Definition cyrillic.c:414
static const unsigned char win8662win1251[]
Definition cyrillic.c:181
static const unsigned char koi2win1251[]
Definition cyrillic.c:121
static const unsigned char koi2win866[]
Definition cyrillic.c:161
Datum win866_to_koi8r(PG_FUNCTION_ARGS)
Definition cyrillic.c:350
Datum win1251_to_iso(PG_FUNCTION_ARGS)
Definition cyrillic.c:446
Datum iso_to_koi8r(PG_FUNCTION_ARGS)
Definition cyrillic.c:398
static const unsigned char iso2koi[]
Definition cyrillic.c:61
Datum win1251_to_koi8r(PG_FUNCTION_ARGS)
Definition cyrillic.c:318
Datum iso_to_win1251(PG_FUNCTION_ARGS)
Definition cyrillic.c:430
Datum koi8r_to_win866(PG_FUNCTION_ARGS)
Definition cyrillic.c:334
#define PG_MODULE_MAGIC_EXT(...)
Definition fmgr.h:540
#define PG_GETARG_CSTRING(n)
Definition fmgr.h:278
#define PG_FUNCTION_INFO_V1(funcname)
Definition fmgr.h:417
#define PG_RETURN_INT32(x)
Definition fmgr.h:355
#define PG_GETARG_INT32(n)
Definition fmgr.h:269
#define PG_GETARG_BOOL(n)
Definition fmgr.h:274
#define PG_FUNCTION_ARGS
Definition fmgr.h:193
const void size_t len
@ PG_KOI8R
Definition pg_wchar.h:98
@ PG_ISO_8859_5
Definition pg_wchar.h:101
@ PG_WIN1251
Definition pg_wchar.h:99
@ PG_WIN866
Definition pg_wchar.h:96
#define CHECK_ENCODING_CONVERSION_ARGS(srcencoding, destencoding)
Definition pg_wchar.h:360
uint64_t Datum
Definition postgres.h:70
static int fb(int x)
const char * name