LCOV - code coverage report
Current view: top level - src/backend/utils/mb/conversion_procs/latin2_and_win1250 - latin2_and_win1250.c (source / functions) Hit Total Coverage
Test: PostgreSQL 18devel Lines: 55 55 100.0 %
Date: 2024-12-12 17:14:55 Functions: 13 13 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*-------------------------------------------------------------------------
       2             :  *
       3             :  *    LATIN2 and WIN1250
       4             :  *
       5             :  * Portions Copyright (c) 1996-2024, 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/latin2_and_win1250/latin2_and_win1250.c
      10             :  *
      11             :  *-------------------------------------------------------------------------
      12             :  */
      13             : 
      14             : #include "postgres.h"
      15             : #include "fmgr.h"
      16             : #include "mb/pg_wchar.h"
      17             : 
      18           6 : PG_MODULE_MAGIC;
      19             : 
      20           6 : PG_FUNCTION_INFO_V1(latin2_to_mic);
      21           6 : PG_FUNCTION_INFO_V1(mic_to_latin2);
      22           6 : PG_FUNCTION_INFO_V1(win1250_to_mic);
      23           6 : PG_FUNCTION_INFO_V1(mic_to_win1250);
      24           6 : PG_FUNCTION_INFO_V1(latin2_to_win1250);
      25           6 : PG_FUNCTION_INFO_V1(win1250_to_latin2);
      26             : 
      27             : /* ----------
      28             :  * conv_proc(
      29             :  *      INTEGER,    -- source encoding id
      30             :  *      INTEGER,    -- destination encoding id
      31             :  *      CSTRING,    -- source string (null terminated C string)
      32             :  *      CSTRING,    -- destination string (null terminated C string)
      33             :  *      INTEGER,    -- source string length
      34             :  *      BOOL        -- if true, don't throw an error if conversion fails
      35             :  * ) returns INTEGER;
      36             :  *
      37             :  * Returns the number of bytes successfully converted.
      38             :  * ----------
      39             :  */
      40             : 
      41             : /* WIN1250 to ISO-8859-2 */
      42             : static const unsigned char win1250_2_iso88592[] = {
      43             :     0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
      44             :     0x88, 0x89, 0xA9, 0x8B, 0xA6, 0xAB, 0xAE, 0xAC,
      45             :     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
      46             :     0x98, 0x99, 0xB9, 0x9B, 0xB6, 0xBB, 0xBE, 0xBC,
      47             :     0xA0, 0xB7, 0xA2, 0xA3, 0xA4, 0xA1, 0x00, 0xA7,
      48             :     0xA8, 0x00, 0xAA, 0x00, 0x00, 0xAD, 0x00, 0xAF,
      49             :     0xB0, 0x00, 0xB2, 0xB3, 0xB4, 0x00, 0x00, 0x00,
      50             :     0xB8, 0xB1, 0xBA, 0x00, 0xA5, 0xBD, 0xB5, 0xBF,
      51             :     0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
      52             :     0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
      53             :     0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
      54             :     0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
      55             :     0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
      56             :     0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
      57             :     0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
      58             :     0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
      59             : };
      60             : 
      61             : /* ISO-8859-2 to WIN1250 */
      62             : static const unsigned char iso88592_2_win1250[] = {
      63             :     0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
      64             :     0x88, 0x89, 0x00, 0x8B, 0x00, 0x00, 0x00, 0x00,
      65             :     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
      66             :     0x98, 0x99, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x00,
      67             :     0xA0, 0xA5, 0xA2, 0xA3, 0xA4, 0xBC, 0x8C, 0xA7,
      68             :     0xA8, 0x8A, 0xAA, 0x8D, 0x8F, 0xAD, 0x8E, 0xAF,
      69             :     0xB0, 0xB9, 0xB2, 0xB3, 0xB4, 0xBE, 0x9C, 0xA1,
      70             :     0xB8, 0x9A, 0xBA, 0x9D, 0x9F, 0xBD, 0x9E, 0xBF,
      71             :     0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
      72             :     0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
      73             :     0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
      74             :     0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
      75             :     0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
      76             :     0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
      77             :     0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
      78             :     0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
      79             : };
      80             : 
      81             : 
      82             : Datum
      83           6 : latin2_to_mic(PG_FUNCTION_ARGS)
      84             : {
      85           6 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
      86           6 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
      87           6 :     int         len = PG_GETARG_INT32(4);
      88           6 :     bool        noError = PG_GETARG_BOOL(5);
      89             :     int         converted;
      90             : 
      91           6 :     CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN2, PG_MULE_INTERNAL);
      92             : 
      93           6 :     converted = latin2mic(src, dest, len, LC_ISO8859_2, PG_LATIN2, noError);
      94             : 
      95           6 :     PG_RETURN_INT32(converted);
      96             : }
      97             : 
      98             : Datum
      99           6 : mic_to_latin2(PG_FUNCTION_ARGS)
     100             : {
     101           6 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
     102           6 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
     103           6 :     int         len = PG_GETARG_INT32(4);
     104           6 :     bool        noError = PG_GETARG_BOOL(5);
     105             :     int         converted;
     106             : 
     107           6 :     CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_LATIN2);
     108             : 
     109           6 :     converted = mic2latin(src, dest, len, LC_ISO8859_2, PG_LATIN2, noError);
     110             : 
     111           6 :     PG_RETURN_INT32(converted);
     112             : }
     113             : 
     114             : Datum
     115           6 : win1250_to_mic(PG_FUNCTION_ARGS)
     116             : {
     117           6 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
     118           6 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
     119           6 :     int         len = PG_GETARG_INT32(4);
     120           6 :     bool        noError = PG_GETARG_BOOL(5);
     121             :     int         converted;
     122             : 
     123           6 :     CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1250, PG_MULE_INTERNAL);
     124             : 
     125           6 :     converted = latin2mic_with_table(src, dest, len, LC_ISO8859_2, PG_WIN1250,
     126             :                                      win1250_2_iso88592, noError);
     127             : 
     128           6 :     PG_RETURN_INT32(converted);
     129             : }
     130             : 
     131             : Datum
     132           6 : mic_to_win1250(PG_FUNCTION_ARGS)
     133             : {
     134           6 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
     135           6 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
     136           6 :     int         len = PG_GETARG_INT32(4);
     137           6 :     bool        noError = PG_GETARG_BOOL(5);
     138             :     int         converted;
     139             : 
     140           6 :     CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_WIN1250);
     141             : 
     142           6 :     converted = mic2latin_with_table(src, dest, len, LC_ISO8859_2, PG_WIN1250,
     143             :                                      iso88592_2_win1250, noError);
     144             : 
     145           6 :     PG_RETURN_INT32(converted);
     146             : }
     147             : 
     148             : Datum
     149           6 : latin2_to_win1250(PG_FUNCTION_ARGS)
     150             : {
     151           6 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
     152           6 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
     153           6 :     int         len = PG_GETARG_INT32(4);
     154           6 :     bool        noError = PG_GETARG_BOOL(5);
     155             :     int         converted;
     156             : 
     157           6 :     CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN2, PG_WIN1250);
     158             : 
     159           6 :     converted = local2local(src, dest, len, PG_LATIN2, PG_WIN1250,
     160             :                             iso88592_2_win1250, noError);
     161             : 
     162           6 :     PG_RETURN_INT32(converted);
     163             : }
     164             : 
     165             : Datum
     166           6 : win1250_to_latin2(PG_FUNCTION_ARGS)
     167             : {
     168           6 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
     169           6 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
     170           6 :     int         len = PG_GETARG_INT32(4);
     171           6 :     bool        noError = PG_GETARG_BOOL(5);
     172             :     int         converted;
     173             : 
     174           6 :     CHECK_ENCODING_CONVERSION_ARGS(PG_WIN1250, PG_LATIN2);
     175             : 
     176           6 :     converted = local2local(src, dest, len, PG_WIN1250, PG_LATIN2,
     177             :                             win1250_2_iso88592, noError);
     178             : 
     179           6 :     PG_RETURN_INT32(converted);
     180             : }

Generated by: LCOV version 1.14