LCOV - differential code coverage report
Current view: top level - src/interfaces/ecpg/pgtypeslib - common.c (source / functions) Coverage Total Hit UIC GIC
Current: c70b6db34ffeab48beef1fb4ce61bcad3772b8dd vs 06473f5a344df8c9594ead90a609b86f6724cff8 Lines: 68.8 % 77 53 24 53
Current Date: 2025-09-06 07:49:51 +0900 Functions: 100.0 % 4 4 4
Baseline: lcov-20250906-005545-baseline Branches: 51.6 % 31 16 15 16
Baseline Date: 2025-09-05 08:21:35 +0100 Line coverage date bins:
Legend: Lines:     hit not hit
Branches: + taken - not taken # not executed
(30,360] days: 100.0 % 1 1 1
(360..) days: 68.4 % 76 52 24 52
Function coverage date bins:
(360..) days: 100.0 % 4 4 4
Branch coverage date bins:
(360..) days: 51.6 % 31 16 15 16

 Age         Owner                    Branch data    TLA  Line data    Source code
                                  1                 :                : /* src/interfaces/ecpg/pgtypeslib/common.c */
                                  2                 :                : 
                                  3                 :                : #include "postgres_fe.h"
                                  4                 :                : 
                                  5                 :                : #include "pgtypes.h"
                                  6                 :                : #include "pgtypeslib_extern.h"
                                  7                 :                : 
                                  8                 :                : /* Return value is zero-filled. */
                                  9                 :                : char *
 8206 meskes@postgresql.or       10                 :GIC       39760 : pgtypes_alloc(long size)
                                 11                 :                : {
 8069 bruce@momjian.us           12                 :          39760 :     char       *new = (char *) calloc(1L, size);
                                 13                 :                : 
 8206 meskes@postgresql.or       14         [ -  + ]:          39760 :     if (!new)
 8206 meskes@postgresql.or       15                 :UIC           0 :         errno = ENOMEM;
 2942 peter_e@gmx.net            16                 :GIC       39760 :     return new;
                                 17                 :                : }
                                 18                 :                : 
                                 19                 :                : char *
 5011 meskes@postgresql.or       20                 :            391 : pgtypes_strdup(const char *str)
                                 21                 :                : {
  206 peter@eisentraut.org       22                 :            391 :     char       *new = strdup(str);
                                 23                 :                : 
 8206 meskes@postgresql.or       24         [ -  + ]:            391 :     if (!new)
 8206 meskes@postgresql.or       25                 :UIC           0 :         errno = ENOMEM;
 2942 peter_e@gmx.net            26                 :GIC         391 :     return new;
                                 27                 :                : }
                                 28                 :                : 
                                 29                 :                : int
 8069 bruce@momjian.us           30                 :             19 : pgtypes_fmt_replace(union un_fmt_comb replace_val, int replace_type, char **output, int *pstr_len)
                                 31                 :                : {
                                 32                 :                :     /*
                                 33                 :                :      * general purpose variable, set to 0 in order to fix compiler warning
                                 34                 :                :      */
                                 35                 :             19 :     int         i = 0;
                                 36                 :                : 
                                 37   [ +  +  +  +  :             19 :     switch (replace_type)
                                                 - ]
                                 38                 :                :     {
 8072 meskes@postgresql.or       39                 :              2 :         case PGTYPES_TYPE_NOTHING:
 8194                            40                 :              2 :             break;
 8072                            41                 :              4 :         case PGTYPES_TYPE_STRING_CONSTANT:
                                 42                 :                :         case PGTYPES_TYPE_STRING_MALLOCED:
                                 43                 :              4 :             i = strlen(replace_val.str_val);
 8069 bruce@momjian.us           44         [ +  - ]:              4 :             if (i + 1 <= *pstr_len)
                                 45                 :                :             {
                                 46                 :                :                 /* include trailing terminator in what we copy */
 2639 tgl@sss.pgh.pa.us          47                 :              4 :                 memcpy(*output, replace_val.str_val, i + 1);
 8194 meskes@postgresql.or       48                 :              4 :                 *pstr_len -= i;
                                 49                 :              4 :                 *output += i;
 8069 bruce@momjian.us           50         [ -  + ]:              4 :                 if (replace_type == PGTYPES_TYPE_STRING_MALLOCED)
 8072 meskes@postgresql.or       51                 :UIC           0 :                     free(replace_val.str_val);
 8194 meskes@postgresql.or       52                 :GIC           4 :                 return 0;
                                 53                 :                :             }
                                 54                 :                :             else
 8069 bruce@momjian.us           55                 :UIC           0 :                 return -1;
                                 56                 :                :             break;
 8072 meskes@postgresql.or       57                 :GIC           1 :         case PGTYPES_TYPE_CHAR:
 8069 bruce@momjian.us           58         [ +  - ]:              1 :             if (*pstr_len >= 2)
                                 59                 :                :             {
 8072 meskes@postgresql.or       60                 :              1 :                 (*output)[0] = replace_val.char_val;
 8194                            61                 :              1 :                 (*output)[1] = '\0';
                                 62                 :              1 :                 (*pstr_len)--;
                                 63                 :              1 :                 (*output)++;
                                 64                 :              1 :                 return 0;
                                 65                 :                :             }
                                 66                 :                :             else
 8069 bruce@momjian.us           67                 :UIC           0 :                 return -1;
                                 68                 :                :             break;
 8072 meskes@postgresql.or       69                 :GIC          12 :         case PGTYPES_TYPE_DOUBLE_NF:
                                 70                 :                :         case PGTYPES_TYPE_INT64:
                                 71                 :                :         case PGTYPES_TYPE_UINT:
                                 72                 :                :         case PGTYPES_TYPE_UINT_2_LZ:
                                 73                 :                :         case PGTYPES_TYPE_UINT_2_LS:
                                 74                 :                :         case PGTYPES_TYPE_UINT_3_LZ:
                                 75                 :                :         case PGTYPES_TYPE_UINT_4_LZ:
                                 76                 :                :             {
 8069 bruce@momjian.us           77                 :             12 :                 char       *t = pgtypes_alloc(PGTYPES_FMT_NUM_MAX_DIGITS);
                                 78                 :                : 
                                 79         [ -  + ]:             12 :                 if (!t)
 8194 meskes@postgresql.or       80                 :UIC           0 :                     return ENOMEM;
 8069 bruce@momjian.us           81   [ -  -  +  +  :GIC          12 :                 switch (replace_type)
                                        -  +  -  - ]
                                 82                 :                :                 {
 8072 meskes@postgresql.or       83                 :UIC           0 :                     case PGTYPES_TYPE_DOUBLE_NF:
 8194                            84                 :              0 :                         i = snprintf(t, PGTYPES_FMT_NUM_MAX_DIGITS,
                                 85                 :                :                                      "%0.0g", replace_val.double_val);
                                 86                 :              0 :                         break;
 8072                            87                 :              0 :                     case PGTYPES_TYPE_INT64:
 8194                            88                 :              0 :                         i = snprintf(t, PGTYPES_FMT_NUM_MAX_DIGITS,
                                 89                 :                :                                      INT64_FORMAT, replace_val.int64_val);
                                 90                 :              0 :                         break;
 8072 meskes@postgresql.or       91                 :GIC           3 :                     case PGTYPES_TYPE_UINT:
 8069 bruce@momjian.us           92                 :              3 :                         i = snprintf(t, PGTYPES_FMT_NUM_MAX_DIGITS,
                                 93                 :                :                                      "%u", replace_val.uint_val);
 8194 meskes@postgresql.or       94                 :              3 :                         break;
 8072                            95                 :              8 :                     case PGTYPES_TYPE_UINT_2_LZ:
 8069 bruce@momjian.us           96                 :              8 :                         i = snprintf(t, PGTYPES_FMT_NUM_MAX_DIGITS,
                                 97                 :                :                                      "%02u", replace_val.uint_val);
 8194 meskes@postgresql.or       98                 :              8 :                         break;
 8072 meskes@postgresql.or       99                 :UIC           0 :                     case PGTYPES_TYPE_UINT_2_LS:
 8069 bruce@momjian.us          100                 :              0 :                         i = snprintf(t, PGTYPES_FMT_NUM_MAX_DIGITS,
                                101                 :                :                                      "%2u", replace_val.uint_val);
 8194 meskes@postgresql.or      102                 :              0 :                         break;
 8072 meskes@postgresql.or      103                 :GIC           1 :                     case PGTYPES_TYPE_UINT_3_LZ:
 8069 bruce@momjian.us          104                 :              1 :                         i = snprintf(t, PGTYPES_FMT_NUM_MAX_DIGITS,
                                105                 :                :                                      "%03u", replace_val.uint_val);
 8194 meskes@postgresql.or      106                 :              1 :                         break;
 8072 meskes@postgresql.or      107                 :UIC           0 :                     case PGTYPES_TYPE_UINT_4_LZ:
 8069 bruce@momjian.us          108                 :              0 :                         i = snprintf(t, PGTYPES_FMT_NUM_MAX_DIGITS,
                                109                 :                :                                      "%04u", replace_val.uint_val);
 8194 meskes@postgresql.or      110                 :              0 :                         break;
                                111                 :                :                 }
                                112                 :                : 
 2579 tgl@sss.pgh.pa.us         113   [ +  -  -  + ]:GIC          12 :                 if (i < 0 || i >= PGTYPES_FMT_NUM_MAX_DIGITS)
                                114                 :                :                 {
 8194 meskes@postgresql.or      115                 :UIC           0 :                     free(t);
                                116                 :              0 :                     return -1;
                                117                 :                :                 }
 8194 meskes@postgresql.or      118                 :GIC          12 :                 i = strlen(t);
                                119                 :             12 :                 *pstr_len -= i;
                                120                 :                : 
                                121                 :                :                 /*
                                122                 :                :                  * if *pstr_len == 0, we don't have enough space for the
                                123                 :                :                  * terminator and the conversion fails
                                124                 :                :                  */
 8069 bruce@momjian.us          125         [ -  + ]:             12 :                 if (*pstr_len <= 0)
                                126                 :                :                 {
 8194 meskes@postgresql.or      127                 :UIC           0 :                     free(t);
                                128                 :              0 :                     return -1;
                                129                 :                :                 }
 8194 meskes@postgresql.or      130                 :GIC          12 :                 strcpy(*output, t);
                                131                 :             12 :                 *output += i;
                                132                 :             12 :                 free(t);
                                133                 :                :             }
                                134                 :             12 :             break;
 8194 meskes@postgresql.or      135                 :UIC           0 :         default:
                                136                 :              0 :             break;
                                137                 :                :     }
 8194 meskes@postgresql.or      138                 :GIC          14 :     return 0;
                                139                 :                : }
                                140                 :                : 
                                141                 :                : /* Functions declared in pgtypes.h. */
                                142                 :                : 
                                143                 :                : /* Just frees memory (mostly needed for Windows) */
                                144                 :                : void
 2637 tmunro@postgresql.or      145                 :           1190 : PGTYPESchar_free(char *ptr)
                                146                 :                : {
                                147                 :           1190 :     free(ptr);
                                148                 :           1190 : }
        

Generated by: LCOV version 2.4-beta