LCOV - differential code coverage report
Current view: top level - src/backend/utils/mb/conversion_procs/cyrillic - cyrillic.c (source / functions) Coverage Total Hit CBC DCB
Current: bed3ffbf9d952be6c7d739d068cdce44c046dfb7 vs 574581b50ac9c63dd9e4abebb731a3b67e5b50f6 Lines: 100.0 % 109 109 109 72
Current Date: 2026-05-05 10:23:31 +0900 Functions: 100.0 % 25 25 25 16
Baseline: lcov-20260505-025707-baseline Line coverage date bins:
Baseline Date: 2026-05-05 10:27:06 +0900 (360..) days: 100.0 % 109 109 109
Legend: Lines:     hit not hit Function coverage date bins:
(360..) days: 100.0 % 25 25 25

 Age         Owner                  TLA  Line data    Source code
                                  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                 : 
  405 tgl@sss.pgh.pa.us          18 CBC           8 : PG_MODULE_MAGIC_EXT(
                                 19                 :                     .name = "cyrillic",
                                 20                 :                     .version = PG_VERSION
                                 21                 : );
                                 22                 : 
 8592                            23               4 : PG_FUNCTION_INFO_V1(koi8r_to_win1251);
                                 24               4 : PG_FUNCTION_INFO_V1(win1251_to_koi8r);
 7729 bruce@momjian.us           25               4 : PG_FUNCTION_INFO_V1(koi8r_to_win866);
                                 26               4 : PG_FUNCTION_INFO_V1(win866_to_koi8r);
                                 27               4 : PG_FUNCTION_INFO_V1(win866_to_win1251);
                                 28               4 : PG_FUNCTION_INFO_V1(win1251_to_win866);
 8592 tgl@sss.pgh.pa.us          29               8 : PG_FUNCTION_INFO_V1(iso_to_koi8r);
                                 30               4 : PG_FUNCTION_INFO_V1(koi8r_to_iso);
                                 31               4 : PG_FUNCTION_INFO_V1(iso_to_win1251);
                                 32               4 : PG_FUNCTION_INFO_V1(win1251_to_iso);
 7729 bruce@momjian.us           33               4 : PG_FUNCTION_INFO_V1(iso_to_win866);
                                 34               4 : PG_FUNCTION_INFO_V1(win866_to_iso);
                                 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 */
                                 61                 : static 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 */
                                 81                 : static 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 */
                                101                 : static 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 */
                                121                 : static 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 */
                                141                 : static 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 */
                                161                 : static 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 */
                                181                 : static 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 */
                                201                 : static 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 */
                                221                 : static 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 */
                                241                 : static 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 */
                                261                 : static 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 */
                                281                 : static 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                 : 
                                301                 : Datum
 8665 ishii@postgresql.org      302               4 : koi8r_to_win1251(PG_FUNCTION_ARGS)
                                303                 : {
 7528 tgl@sss.pgh.pa.us         304               4 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
                                305               4 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
 8644 bruce@momjian.us          306               4 :     int         len = PG_GETARG_INT32(4);
 1860 heikki.linnakangas@i      307               4 :     bool        noError = PG_GETARG_BOOL(5);
                                308                 :     int         converted;
                                309                 : 
 6305 tgl@sss.pgh.pa.us         310               4 :     CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8R, PG_WIN1251);
                                311                 : 
 1860 heikki.linnakangas@i      312               4 :     converted = local2local(src, dest, len, PG_KOI8R, PG_WIN1251, koi2win1251, noError);
                                313                 : 
                                314               4 :     PG_RETURN_INT32(converted);
                                315                 : }
                                316                 : 
                                317                 : Datum
 8665 ishii@postgresql.org      318               4 : win1251_to_koi8r(PG_FUNCTION_ARGS)
                                319                 : {
 7528 tgl@sss.pgh.pa.us         320               4 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
                                321               4 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
 8644 bruce@momjian.us          322               4 :     int         len = PG_GETARG_INT32(4);
 1860 heikki.linnakangas@i      323               4 :     bool        noError = PG_GETARG_BOOL(5);
                                324                 :     int         converted;
                                325                 : 
 6305 tgl@sss.pgh.pa.us         326               4 :     CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1251, PG_KOI8R);
                                327                 : 
 1860 heikki.linnakangas@i      328               4 :     converted = local2local(src, dest, len, PG_WIN1251, PG_KOI8R, win12512koi, noError);
                                329                 : 
                                330               4 :     PG_RETURN_INT32(converted);
                                331                 : }
                                332                 : 
                                333                 : Datum
 7729 bruce@momjian.us          334               4 : koi8r_to_win866(PG_FUNCTION_ARGS)
                                335                 : {
 7528 tgl@sss.pgh.pa.us         336               4 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
                                337               4 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
 8644 bruce@momjian.us          338               4 :     int         len = PG_GETARG_INT32(4);
 1860 heikki.linnakangas@i      339               4 :     bool        noError = PG_GETARG_BOOL(5);
                                340                 :     int         converted;
                                341                 : 
 6305 tgl@sss.pgh.pa.us         342               4 :     CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8R, PG_WIN866);
                                343                 : 
 1860 heikki.linnakangas@i      344               4 :     converted = local2local(src, dest, len, PG_KOI8R, PG_WIN866, koi2win866, noError);
                                345                 : 
                                346               4 :     PG_RETURN_INT32(converted);
                                347                 : }
                                348                 : 
                                349                 : Datum
 7729 bruce@momjian.us          350               4 : win866_to_koi8r(PG_FUNCTION_ARGS)
                                351                 : {
 7528 tgl@sss.pgh.pa.us         352               4 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
                                353               4 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
 8644 bruce@momjian.us          354               4 :     int         len = PG_GETARG_INT32(4);
 1860 heikki.linnakangas@i      355               4 :     bool        noError = PG_GETARG_BOOL(5);
                                356                 :     int         converted;
                                357                 : 
 6305 tgl@sss.pgh.pa.us         358               4 :     CHECK_ENCODING_CONVERSION_ARGS(PG_WIN866, PG_KOI8R);
                                359                 : 
 1860 heikki.linnakangas@i      360               4 :     converted = local2local(src, dest, len, PG_WIN866, PG_KOI8R, win8662koi, noError);
                                361                 : 
                                362               4 :     PG_RETURN_INT32(converted);
                                363                 : }
                                364                 : 
                                365                 : Datum
 7729 bruce@momjian.us          366               4 : win866_to_win1251(PG_FUNCTION_ARGS)
                                367                 : {
 7528 tgl@sss.pgh.pa.us         368               4 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
                                369               4 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
 8644 bruce@momjian.us          370               4 :     int         len = PG_GETARG_INT32(4);
 1860 heikki.linnakangas@i      371               4 :     bool        noError = PG_GETARG_BOOL(5);
                                372                 :     int         converted;
                                373                 : 
 6305 tgl@sss.pgh.pa.us         374               4 :     CHECK_ENCODING_CONVERSION_ARGS(PG_WIN866, PG_WIN1251);
                                375                 : 
 1860 heikki.linnakangas@i      376               4 :     converted = local2local(src, dest, len, PG_WIN866, PG_WIN1251, win8662win1251, noError);
                                377                 : 
                                378               4 :     PG_RETURN_INT32(converted);
                                379                 : }
                                380                 : 
                                381                 : Datum
 7729 bruce@momjian.us          382               4 : win1251_to_win866(PG_FUNCTION_ARGS)
                                383                 : {
 7528 tgl@sss.pgh.pa.us         384               4 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
                                385               4 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
 8644 bruce@momjian.us          386               4 :     int         len = PG_GETARG_INT32(4);
 1860 heikki.linnakangas@i      387               4 :     bool        noError = PG_GETARG_BOOL(5);
                                388                 :     int         converted;
                                389                 : 
 6305 tgl@sss.pgh.pa.us         390               4 :     CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1251, PG_WIN866);
                                391                 : 
 1860 heikki.linnakangas@i      392               4 :     converted = local2local(src, dest, len, PG_WIN1251, PG_WIN866, win12512win866, noError);
                                393                 : 
                                394               4 :     PG_RETURN_INT32(converted);
                                395                 : }
                                396                 : 
                                397                 : Datum
 8665 ishii@postgresql.org      398             100 : iso_to_koi8r(PG_FUNCTION_ARGS)
                                399                 : {
 7528 tgl@sss.pgh.pa.us         400             100 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
                                401             100 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
 8644 bruce@momjian.us          402             100 :     int         len = PG_GETARG_INT32(4);
 1860 heikki.linnakangas@i      403             100 :     bool        noError = PG_GETARG_BOOL(5);
                                404                 :     int         converted;
                                405                 : 
 6305 tgl@sss.pgh.pa.us         406             100 :     CHECK_ENCODING_CONVERSION_ARGS(PG_ISO_8859_5, PG_KOI8R);
                                407                 : 
 1860 heikki.linnakangas@i      408             100 :     converted = local2local(src, dest, len, PG_ISO_8859_5, PG_KOI8R, iso2koi, noError);
                                409                 : 
                                410              64 :     PG_RETURN_INT32(converted);
                                411                 : }
                                412                 : 
                                413                 : Datum
 8665 ishii@postgresql.org      414               4 : koi8r_to_iso(PG_FUNCTION_ARGS)
                                415                 : {
 7528 tgl@sss.pgh.pa.us         416               4 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
                                417               4 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
 8644 bruce@momjian.us          418               4 :     int         len = PG_GETARG_INT32(4);
 1860 heikki.linnakangas@i      419               4 :     bool        noError = PG_GETARG_BOOL(5);
                                420                 :     int         converted;
                                421                 : 
 6305 tgl@sss.pgh.pa.us         422               4 :     CHECK_ENCODING_CONVERSION_ARGS(PG_KOI8R, PG_ISO_8859_5);
                                423                 : 
 1860 heikki.linnakangas@i      424               4 :     converted = local2local(src, dest, len, PG_KOI8R, PG_ISO_8859_5, koi2iso, noError);
                                425                 : 
                                426               4 :     PG_RETURN_INT32(converted);
                                427                 : }
                                428                 : 
                                429                 : Datum
 8665 ishii@postgresql.org      430               4 : iso_to_win1251(PG_FUNCTION_ARGS)
                                431                 : {
 7528 tgl@sss.pgh.pa.us         432               4 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
                                433               4 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
 8644 bruce@momjian.us          434               4 :     int         len = PG_GETARG_INT32(4);
 1860 heikki.linnakangas@i      435               4 :     bool        noError = PG_GETARG_BOOL(5);
                                436                 :     int         converted;
                                437                 : 
 6305 tgl@sss.pgh.pa.us         438               4 :     CHECK_ENCODING_CONVERSION_ARGS(PG_ISO_8859_5, PG_WIN1251);
                                439                 : 
 1860 heikki.linnakangas@i      440               4 :     converted = local2local(src, dest, len, PG_ISO_8859_5, PG_WIN1251, iso2win1251, noError);
                                441                 : 
                                442               4 :     PG_RETURN_INT32(converted);
                                443                 : }
                                444                 : 
                                445                 : Datum
 8665 ishii@postgresql.org      446               4 : win1251_to_iso(PG_FUNCTION_ARGS)
                                447                 : {
 7528 tgl@sss.pgh.pa.us         448               4 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
                                449               4 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
 8644 bruce@momjian.us          450               4 :     int         len = PG_GETARG_INT32(4);
 1860 heikki.linnakangas@i      451               4 :     bool        noError = PG_GETARG_BOOL(5);
                                452                 :     int         converted;
                                453                 : 
 6305 tgl@sss.pgh.pa.us         454               4 :     CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1251, PG_ISO_8859_5);
                                455                 : 
 1860 heikki.linnakangas@i      456               4 :     converted = local2local(src, dest, len, PG_WIN1251, PG_ISO_8859_5, win12512iso, noError);
                                457                 : 
                                458               4 :     PG_RETURN_INT32(converted);
                                459                 : }
                                460                 : 
                                461                 : Datum
 7729 bruce@momjian.us          462               4 : iso_to_win866(PG_FUNCTION_ARGS)
                                463                 : {
 7528 tgl@sss.pgh.pa.us         464               4 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
                                465               4 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
 8644 bruce@momjian.us          466               4 :     int         len = PG_GETARG_INT32(4);
 1860 heikki.linnakangas@i      467               4 :     bool        noError = PG_GETARG_BOOL(5);
                                468                 :     int         converted;
                                469                 : 
 6305 tgl@sss.pgh.pa.us         470               4 :     CHECK_ENCODING_CONVERSION_ARGS(PG_ISO_8859_5, PG_WIN866);
                                471                 : 
 1860 heikki.linnakangas@i      472               4 :     converted = local2local(src, dest, len, PG_ISO_8859_5, PG_WIN866, iso2win866, noError);
                                473                 : 
                                474               4 :     PG_RETURN_INT32(converted);
                                475                 : }
                                476                 : 
                                477                 : Datum
 7729 bruce@momjian.us          478               4 : win866_to_iso(PG_FUNCTION_ARGS)
                                479                 : {
 7528 tgl@sss.pgh.pa.us         480               4 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
                                481               4 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
 8644 bruce@momjian.us          482               4 :     int         len = PG_GETARG_INT32(4);
 1860 heikki.linnakangas@i      483               4 :     bool        noError = PG_GETARG_BOOL(5);
                                484                 :     int         converted;
                                485                 : 
 6305 tgl@sss.pgh.pa.us         486               4 :     CHECK_ENCODING_CONVERSION_ARGS(PG_WIN866, PG_ISO_8859_5);
                                487                 : 
 1860 heikki.linnakangas@i      488               4 :     converted = local2local(src, dest, len, PG_WIN866, PG_ISO_8859_5, win8662iso, noError);
                                489                 : 
                                490               4 :     PG_RETURN_INT32(converted);
                                491                 : }
        

Generated by: LCOV version 2.5.0-beta