LCOV - code coverage report
Current view: top level - src/backend/utils/mb/conversion_procs/latin_and_mic - latin_and_mic.c (source / functions) Hit Total Coverage
Test: PostgreSQL 18devel Lines: 55 55 100.0 %
Date: 2025-04-01 16:15:31 Functions: 13 13 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*-------------------------------------------------------------------------
       2             :  *
       3             :  *    LATINn and MULE_INTERNAL
       4             :  *
       5             :  * Portions Copyright (c) 1996-2025, 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/latin_and_mic/latin_and_mic.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_EXT(
      19             :                     .name = "latin_and_mic",
      20             :                     .version = PG_VERSION
      21             : );
      22             : 
      23           6 : PG_FUNCTION_INFO_V1(latin1_to_mic);
      24           6 : PG_FUNCTION_INFO_V1(mic_to_latin1);
      25           6 : PG_FUNCTION_INFO_V1(latin3_to_mic);
      26           6 : PG_FUNCTION_INFO_V1(mic_to_latin3);
      27           6 : PG_FUNCTION_INFO_V1(latin4_to_mic);
      28           6 : PG_FUNCTION_INFO_V1(mic_to_latin4);
      29             : 
      30             : /* ----------
      31             :  * conv_proc(
      32             :  *      INTEGER,    -- source encoding id
      33             :  *      INTEGER,    -- destination encoding id
      34             :  *      CSTRING,    -- source string (null terminated C string)
      35             :  *      CSTRING,    -- destination string (null terminated C string)
      36             :  *      INTEGER,    -- source string length
      37             :  *      BOOL        -- if true, don't throw an error if conversion fails
      38             :  * ) returns INTEGER;
      39             :  *
      40             :  * Returns the number of bytes successfully converted.
      41             :  * ----------
      42             :  */
      43             : 
      44             : 
      45             : Datum
      46           6 : latin1_to_mic(PG_FUNCTION_ARGS)
      47             : {
      48           6 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
      49           6 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
      50           6 :     int         len = PG_GETARG_INT32(4);
      51           6 :     bool        noError = PG_GETARG_BOOL(5);
      52             :     int         converted;
      53             : 
      54           6 :     CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN1, PG_MULE_INTERNAL);
      55             : 
      56           6 :     converted = latin2mic(src, dest, len, LC_ISO8859_1, PG_LATIN1, noError);
      57             : 
      58           6 :     PG_RETURN_INT32(converted);
      59             : }
      60             : 
      61             : Datum
      62           6 : mic_to_latin1(PG_FUNCTION_ARGS)
      63             : {
      64           6 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
      65           6 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
      66           6 :     int         len = PG_GETARG_INT32(4);
      67           6 :     bool        noError = PG_GETARG_BOOL(5);
      68             :     int         converted;
      69             : 
      70           6 :     CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_LATIN1);
      71             : 
      72           6 :     converted = mic2latin(src, dest, len, LC_ISO8859_1, PG_LATIN1, noError);
      73             : 
      74           6 :     PG_RETURN_INT32(converted);
      75             : }
      76             : 
      77             : Datum
      78           6 : latin3_to_mic(PG_FUNCTION_ARGS)
      79             : {
      80           6 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
      81           6 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
      82           6 :     int         len = PG_GETARG_INT32(4);
      83           6 :     bool        noError = PG_GETARG_BOOL(5);
      84             :     int         converted;
      85             : 
      86           6 :     CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN3, PG_MULE_INTERNAL);
      87             : 
      88           6 :     converted = latin2mic(src, dest, len, LC_ISO8859_3, PG_LATIN3, noError);
      89             : 
      90           6 :     PG_RETURN_INT32(converted);
      91             : }
      92             : 
      93             : Datum
      94           6 : mic_to_latin3(PG_FUNCTION_ARGS)
      95             : {
      96           6 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
      97           6 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
      98           6 :     int         len = PG_GETARG_INT32(4);
      99           6 :     bool        noError = PG_GETARG_BOOL(5);
     100             :     int         converted;
     101             : 
     102           6 :     CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_LATIN3);
     103             : 
     104           6 :     converted = mic2latin(src, dest, len, LC_ISO8859_3, PG_LATIN3, noError);
     105             : 
     106           6 :     PG_RETURN_INT32(converted);
     107             : }
     108             : 
     109             : Datum
     110           6 : latin4_to_mic(PG_FUNCTION_ARGS)
     111             : {
     112           6 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
     113           6 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
     114           6 :     int         len = PG_GETARG_INT32(4);
     115           6 :     bool        noError = PG_GETARG_BOOL(5);
     116             :     int         converted;
     117             : 
     118           6 :     CHECK_ENCODING_CONVERSION_ARGS(PG_LATIN4, PG_MULE_INTERNAL);
     119             : 
     120           6 :     converted = latin2mic(src, dest, len, LC_ISO8859_4, PG_LATIN4, noError);
     121             : 
     122           6 :     PG_RETURN_INT32(converted);
     123             : }
     124             : 
     125             : Datum
     126           6 : mic_to_latin4(PG_FUNCTION_ARGS)
     127             : {
     128           6 :     unsigned char *src = (unsigned char *) PG_GETARG_CSTRING(2);
     129           6 :     unsigned char *dest = (unsigned char *) PG_GETARG_CSTRING(3);
     130           6 :     int         len = PG_GETARG_INT32(4);
     131           6 :     bool        noError = PG_GETARG_BOOL(5);
     132             :     int         converted;
     133             : 
     134           6 :     CHECK_ENCODING_CONVERSION_ARGS(PG_MULE_INTERNAL, PG_LATIN4);
     135             : 
     136           6 :     converted = mic2latin(src, dest, len, LC_ISO8859_4, PG_LATIN4, noError);
     137             : 
     138           6 :     PG_RETURN_INT32(converted);
     139             : }

Generated by: LCOV version 1.14