LCOV - differential code coverage report
Current view: top level - src/common - fe_memutils.c (source / functions) Coverage Total Hit UIC UBC GIC GNC CBC EUB ECB DCB
Current: Differential Code Coverage HEAD vs 15 Lines: 73.8 % 65 48 2 15 18 1 29 2 17 2
Current Date: 2023-04-08 17:13:01 Functions: 100.0 % 14 14 7 1 6 7
Baseline: 15 Line coverage date bins:
Baseline Date: 2023-04-08 15:09:40 (240..) days: 73.8 % 65 48 2 15 18 1 29 2 17
Legend: Lines: hit not hit Function coverage date bins:
(240..) days: 66.7 % 21 14 7 1 6 7

 Age         Owner                  TLA  Line data    Source code
                                  1                 : /*-------------------------------------------------------------------------
                                  2                 :  *
                                  3                 :  * fe_memutils.c
                                  4                 :  *    memory management support for frontend code
                                  5                 :  *
                                  6                 :  * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
                                  7                 :  * Portions Copyright (c) 1994, Regents of the University of California
                                  8                 :  *
                                  9                 :  *
                                 10                 :  * IDENTIFICATION
                                 11                 :  *    src/common/fe_memutils.c
                                 12                 :  *
                                 13                 :  *-------------------------------------------------------------------------
                                 14                 :  */
                                 15                 : 
                                 16                 : #ifndef FRONTEND
                                 17                 : #error "This file is not expected to be compiled for backend code"
                                 18                 : #endif
                                 19                 : 
                                 20                 : #include "postgres_fe.h"
                                 21                 : 
                                 22                 : static inline void *
 2928 fujii                      23 CBC     2678707 : pg_malloc_internal(size_t size, int flags)
                                 24                 : {
                                 25                 :     void       *tmp;
                                 26                 : 
                                 27                 :     /* Avoid unportable behavior of malloc(0) */
 3708 alvherre                   28         2678707 :     if (size == 0)
                                 29            2581 :         size = 1;
                                 30         2678707 :     tmp = malloc(size);
 2928 fujii                      31         2678707 :     if (tmp == NULL)
                                 32                 :     {
 2928 fujii                      33 UBC           0 :         if ((flags & MCXT_ALLOC_NO_OOM) == 0)
                                 34                 :         {
                                 35               0 :             fprintf(stderr, _("out of memory\n"));
                                 36               0 :             exit(EXIT_FAILURE);
                                 37                 :         }
                                 38               0 :         return NULL;
                                 39                 :     }
                                 40                 : 
 2928 fujii                      41 CBC     2678707 :     if ((flags & MCXT_ALLOC_ZERO) != 0)
                                 42         3419756 :         MemSet(tmp, 0, size);
 3708 alvherre                   43         2678707 :     return tmp;
                                 44                 : }
                                 45                 : 
                                 46                 : void *
 2928 fujii                      47         1210683 : pg_malloc(size_t size)
                                 48                 : {
                                 49         1210683 :     return pg_malloc_internal(size, 0);
                                 50                 : }
                                 51                 : 
                                 52                 : void *
 3708 alvherre                   53          995756 : pg_malloc0(size_t size)
                                 54                 : {
 2928 fujii                      55          995756 :     return pg_malloc_internal(size, MCXT_ALLOC_ZERO);
                                 56                 : }
                                 57                 : 
                                 58                 : void *
                                 59           44711 : pg_malloc_extended(size_t size, int flags)
                                 60                 : {
                                 61           44711 :     return pg_malloc_internal(size, flags);
                                 62                 : }
                                 63                 : 
                                 64                 : void *
 3708 alvherre                   65           25313 : pg_realloc(void *ptr, size_t size)
                                 66                 : {
                                 67                 :     void       *tmp;
                                 68                 : 
                                 69                 :     /* Avoid unportable behavior of realloc(NULL, 0) */
 3602 bruce                      70           25313 :     if (ptr == NULL && size == 0)
 3602 bruce                      71 UBC           0 :         size = 1;
 3602 bruce                      72 CBC       25313 :     tmp = realloc(ptr, size);
                                 73           25313 :     if (!tmp)
                                 74                 :     {
 3708 alvherre                   75 UBC           0 :         fprintf(stderr, _("out of memory\n"));
                                 76               0 :         exit(EXIT_FAILURE);
                                 77                 :     }
 3602 bruce                      78 CBC       25313 :     return tmp;
                                 79                 : }
                                 80                 : 
                                 81                 : /*
                                 82                 :  * "Safe" wrapper around strdup().
                                 83                 :  */
                                 84                 : char *
 3708 alvherre                   85         9328493 : pg_strdup(const char *in)
                                 86                 : {
                                 87                 :     char       *tmp;
                                 88                 : 
                                 89         9328493 :     if (!in)
                                 90                 :     {
 3708 alvherre                   91 UBC           0 :         fprintf(stderr,
                                 92               0 :                 _("cannot duplicate null pointer (internal error)\n"));
                                 93               0 :         exit(EXIT_FAILURE);
                                 94                 :     }
 3708 alvherre                   95 CBC     9328493 :     tmp = strdup(in);
                                 96         9328493 :     if (!tmp)
                                 97                 :     {
 3708 alvherre                   98 UBC           0 :         fprintf(stderr, _("out of memory\n"));
                                 99               0 :         exit(EXIT_FAILURE);
                                100                 :     }
 3708 alvherre                  101 CBC     9328493 :     return tmp;
                                102                 : }
                                103                 : 
                                104                 : void
                                105         1717727 : pg_free(void *ptr)
                                106                 : {
  297 peter                     107 GNC     1717727 :     free(ptr);
 3708 alvherre                  108 GIC     1717727 : }
                                109                 : 
                                110                 : /*
                                111                 :  * Frontend emulation of backend memory management functions.  Useful for
                                112                 :  * programs that compile backend files.
                                113                 :  */
 3708 alvherre                  114 ECB             : void *
 3708 alvherre                  115 GIC      426781 : palloc(Size size)
 3708 alvherre                  116 ECB             : {
 2928 fujii                     117 GIC      426781 :     return pg_malloc_internal(size, 0);
                                118                 : }
                                119                 : 
 3708 alvherre                  120 ECB             : void *
 3708 alvherre                  121 GIC         447 : palloc0(Size size)
 3708 alvherre                  122 ECB             : {
 2928 fujii                     123 GIC         447 :     return pg_malloc_internal(size, MCXT_ALLOC_ZERO);
                                124                 : }
                                125                 : 
 2928 fujii                     126 ECB             : void *
 2928 fujii                     127 GIC         329 : palloc_extended(Size size, int flags)
 2928 fujii                     128 ECB             : {
 2928 fujii                     129 GIC         329 :     return pg_malloc_internal(size, flags);
                                130                 : }
                                131                 : 
 3708 alvherre                  132 ECB             : void
 3708 alvherre                  133 GIC      521479 : pfree(void *pointer)
 3708 alvherre                  134 ECB             : {
 3708 alvherre                  135 CBC      521479 :     pg_free(pointer);
 3708 alvherre                  136 GIC      521479 : }
                                137                 : 
 3708 alvherre                  138 ECB             : char *
 3708 alvherre                  139 GIC      581511 : pstrdup(const char *in)
 3708 alvherre                  140 ECB             : {
 3708 alvherre                  141 GIC      581511 :     return pg_strdup(in);
                                142                 : }
                                143                 : 
 1222 alvherre                  144 ECB             : char *
 1222 alvherre                  145 GIC         128 : pnstrdup(const char *in, Size size)
                                146                 : {
                                147                 :     char       *tmp;
                                148                 :     int         len;
 1222 alvherre                  149 ECB             : 
 1222 alvherre                  150 GIC         128 :     if (!in)
 1222 alvherre                  151 EUB             :     {
 1222 alvherre                  152 UBC           0 :         fprintf(stderr,
                                153               0 :                 _("cannot duplicate null pointer (internal error)\n"));
 1222 alvherre                  154 UIC           0 :         exit(EXIT_FAILURE);
                                155                 :     }
 1222 alvherre                  156 ECB             : 
 1222 alvherre                  157 CBC         128 :     len = strnlen(in, size);
                                158             128 :     tmp = malloc(len + 1);
 1222 alvherre                  159 GIC         128 :     if (tmp == NULL)
 1222 alvherre                  160 EUB             :     {
 1222 alvherre                  161 UBC           0 :         fprintf(stderr, _("out of memory\n"));
 1222 alvherre                  162 UIC           0 :         exit(EXIT_FAILURE);
                                163                 :     }
 1222 alvherre                  164 ECB             : 
 1222 alvherre                  165 CBC         128 :     memcpy(tmp, in, len);
 1222 alvherre                  166 GIC         128 :     tmp[len] = '\0';
 1222 alvherre                  167 ECB             : 
 1222 alvherre                  168 GIC         128 :     return tmp;
                                169                 : }
                                170                 : 
 3708 alvherre                  171 ECB             : void *
 3708 alvherre                  172 GIC         323 : repalloc(void *pointer, Size size)
 3708 alvherre                  173 ECB             : {
 3708 alvherre                  174 GIC         323 :     return pg_realloc(pointer, size);
                                175                 : }
        

Generated by: LCOV version v1.16-55-g56c0a2a