Consistently use "superuser" instead of "super user"
[pgsql.git] / src / common / fe_memutils.c
blobec64172a59ccb6864a220d71a1978be34dd506a7
1 /*-------------------------------------------------------------------------
3 * fe_memutils.c
4 * memory management support for frontend code
6 * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
10 * IDENTIFICATION
11 * src/common/fe_memutils.c
13 *-------------------------------------------------------------------------
16 #ifndef FRONTEND
17 #error "This file is not expected to be compiled for backend code"
18 #endif
20 #include "postgres_fe.h"
22 static inline void *
23 pg_malloc_internal(size_t size, int flags)
25 void *tmp;
27 /* Avoid unportable behavior of malloc(0) */
28 if (size == 0)
29 size = 1;
30 tmp = malloc(size);
31 if (tmp == NULL)
33 if ((flags & MCXT_ALLOC_NO_OOM) == 0)
35 fprintf(stderr, _("out of memory\n"));
36 exit(EXIT_FAILURE);
38 return NULL;
41 if ((flags & MCXT_ALLOC_ZERO) != 0)
42 MemSet(tmp, 0, size);
43 return tmp;
46 void *
47 pg_malloc(size_t size)
49 return pg_malloc_internal(size, 0);
52 void *
53 pg_malloc0(size_t size)
55 return pg_malloc_internal(size, MCXT_ALLOC_ZERO);
58 void *
59 pg_malloc_extended(size_t size, int flags)
61 return pg_malloc_internal(size, flags);
64 void *
65 pg_realloc(void *ptr, size_t size)
67 void *tmp;
69 /* Avoid unportable behavior of realloc(NULL, 0) */
70 if (ptr == NULL && size == 0)
71 size = 1;
72 tmp = realloc(ptr, size);
73 if (!tmp)
75 fprintf(stderr, _("out of memory\n"));
76 exit(EXIT_FAILURE);
78 return tmp;
82 * "Safe" wrapper around strdup().
84 char *
85 pg_strdup(const char *in)
87 char *tmp;
89 if (!in)
91 fprintf(stderr,
92 _("cannot duplicate null pointer (internal error)\n"));
93 exit(EXIT_FAILURE);
95 tmp = strdup(in);
96 if (!tmp)
98 fprintf(stderr, _("out of memory\n"));
99 exit(EXIT_FAILURE);
101 return tmp;
104 void
105 pg_free(void *ptr)
107 if (ptr != NULL)
108 free(ptr);
112 * Frontend emulation of backend memory management functions. Useful for
113 * programs that compile backend files.
115 void *
116 palloc(Size size)
118 return pg_malloc_internal(size, 0);
121 void *
122 palloc0(Size size)
124 return pg_malloc_internal(size, MCXT_ALLOC_ZERO);
127 void *
128 palloc_extended(Size size, int flags)
130 return pg_malloc_internal(size, flags);
133 void
134 pfree(void *pointer)
136 pg_free(pointer);
139 char *
140 pstrdup(const char *in)
142 return pg_strdup(in);
145 char *
146 pnstrdup(const char *in, Size size)
148 char *tmp;
149 int len;
151 if (!in)
153 fprintf(stderr,
154 _("cannot duplicate null pointer (internal error)\n"));
155 exit(EXIT_FAILURE);
158 len = strnlen(in, size);
159 tmp = malloc(len + 1);
160 if (tmp == NULL)
162 fprintf(stderr, _("out of memory\n"));
163 exit(EXIT_FAILURE);
166 memcpy(tmp, in, len);
167 tmp[len] = '\0';
169 return tmp;
172 void *
173 repalloc(void *pointer, Size size)
175 return pg_realloc(pointer, size);