YugabyteDB (2.13.1.0-b60, 21121d69985fbf76aa6958d8f04a9bfa936293b5)

Coverage Report

Created: 2022-03-22 16:43

/Users/deen/code/yugabyte-db/src/postgres/src/common/fe_memutils.c
Line
Count
Source (jump to first uncovered line)
1
/*-------------------------------------------------------------------------
2
 *
3
 * fe_memutils.c
4
 *    memory management support for frontend code
5
 *
6
 * Portions Copyright (c) 1996-2018, 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 *
23
pg_malloc_internal(size_t size, int flags)
24
288k
{
25
288k
  void     *tmp;
26
27
  /* Avoid unportable behavior of malloc(0) */
28
288k
  if (size == 0)
29
0
    size = 1;
30
288k
  tmp = malloc(size);
31
288k
  if (tmp == NULL)
32
0
  {
33
0
    if ((flags & MCXT_ALLOC_NO_OOM) == 0)
34
0
    {
35
0
      fprintf(stderr, _("out of memory\n"));
36
0
      exit(EXIT_FAILURE);
37
0
    }
38
0
    return NULL;
39
0
  }
40
41
288k
  if ((flags & MCXT_ALLOC_ZERO) != 0)
42
61.3k
    MemSet(tmp, 0, size);
43
288k
  return tmp;
44
288k
}
45
46
void *
47
pg_malloc(size_t size)
48
101k
{
49
101k
  return pg_malloc_internal(size, 0);
50
101k
}
51
52
void *
53
pg_malloc0(size_t size)
54
61.3k
{
55
61.3k
  return pg_malloc_internal(size, MCXT_ALLOC_ZERO);
56
61.3k
}
57
58
void *
59
pg_malloc_extended(size_t size, int flags)
60
0
{
61
0
  return pg_malloc_internal(size, flags);
62
0
}
63
64
void *
65
pg_realloc(void *ptr, size_t size)
66
199
{
67
199
  void     *tmp;
68
69
  /* Avoid unportable behavior of realloc(NULL, 0) */
70
199
  if (ptr == NULL && 
size == 08
)
71
0
    size = 1;
72
199
  tmp = realloc(ptr, size);
73
199
  if (!tmp)
74
0
  {
75
0
    fprintf(stderr, _("out of memory\n"));
76
0
    exit(EXIT_FAILURE);
77
0
  }
78
199
  return tmp;
79
199
}
80
81
/*
82
 * "Safe" wrapper around strdup().
83
 */
84
char *
85
pg_strdup(const char *in)
86
17.4M
{
87
17.4M
  char     *tmp;
88
89
17.4M
  if (!in)
90
0
  {
91
0
    fprintf(stderr,
92
0
        _("cannot duplicate null pointer (internal error)\n"));
93
0
    exit(EXIT_FAILURE);
94
0
  }
95
17.4M
  tmp = strdup(in);
96
17.4M
  if (!tmp)
97
0
  {
98
0
    fprintf(stderr, _("out of memory\n"));
99
0
    exit(EXIT_FAILURE);
100
0
  }
101
17.4M
  return tmp;
102
17.4M
}
103
104
void
105
pg_free(void *ptr)
106
1.33M
{
107
1.33M
  if (ptr != NULL)
108
1.31M
    free(ptr);
109
1.33M
}
110
111
/*
112
 * Frontend emulation of backend memory management functions.  Useful for
113
 * programs that compile backend files.
114
 */
115
void *
116
palloc(Size size)
117
126k
{
118
126k
  return pg_malloc_internal(size, 0);
119
126k
}
120
121
void *
122
palloc0(Size size)
123
0
{
124
0
  return pg_malloc_internal(size, MCXT_ALLOC_ZERO);
125
0
}
126
127
void *
128
palloc_extended(Size size, int flags)
129
0
{
130
0
  return pg_malloc_internal(size, flags);
131
0
}
132
133
void
134
pfree(void *pointer)
135
1.28M
{
136
1.28M
  pg_free(pointer);
137
1.28M
}
138
139
char *
140
pstrdup(const char *in)
141
17.7M
{
142
17.7M
  return pg_strdup(in);
143
17.7M
}
144
145
void *
146
repalloc(void *pointer, Size size)
147
0
{
148
0
  return pg_realloc(pointer, size);
149
0
}