aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/psprintf.c11
-rw-r--r--src/include/common/fe_memutils.h14
-rw-r--r--src/include/utils/palloc.h25
3 files changed, 32 insertions, 18 deletions
diff --git a/src/common/psprintf.c b/src/common/psprintf.c
index 026040f7b76..b01e1953609 100644
--- a/src/common/psprintf.c
+++ b/src/common/psprintf.c
@@ -15,12 +15,19 @@
*/
#ifndef FRONTEND
+
#include "postgres.h"
+
+#include "utils/memutils.h"
+
#else
+
#include "postgres_fe.h"
-#endif
-#include "utils/memutils.h"
+/* It's possible we could use a different value for this in frontend code */
+#define MaxAllocSize ((Size) 0x3fffffff) /* 1 gigabyte - 1 */
+
+#endif
/*
diff --git a/src/include/common/fe_memutils.h b/src/include/common/fe_memutils.h
index 96ee7b3ef66..3da1891ef2c 100644
--- a/src/include/common/fe_memutils.h
+++ b/src/include/common/fe_memutils.h
@@ -9,12 +9,24 @@
#ifndef FE_MEMUTILS_H
#define FE_MEMUTILS_H
+/* "Safe" memory allocation functions --- these exit(1) on failure */
extern char *pg_strdup(const char *in);
extern void *pg_malloc(size_t size);
extern void *pg_malloc0(size_t size);
extern void *pg_realloc(void *pointer, size_t size);
extern void pg_free(void *pointer);
-#include "utils/palloc.h"
+/* Equivalent functions, deliberately named the same as backend functions */
+extern char *pstrdup(const char *in);
+extern void *palloc(Size size);
+extern void *palloc0(Size size);
+extern void *repalloc(void *pointer, Size size);
+extern void pfree(void *pointer);
+
+/* sprintf into a palloc'd buffer --- these are in psprintf.c */
+extern char *psprintf(const char *fmt,...)
+__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2)));
+extern size_t pvsnprintf(char *buf, size_t len, const char *fmt, va_list args)
+__attribute__((format(PG_PRINTF_ATTRIBUTE, 3, 0)));
#endif /* FE_MEMUTILS_H */
diff --git a/src/include/utils/palloc.h b/src/include/utils/palloc.h
index ff440f7c89c..61d03351d13 100644
--- a/src/include/utils/palloc.h
+++ b/src/include/utils/palloc.h
@@ -35,12 +35,10 @@
*/
typedef struct MemoryContextData *MemoryContext;
-#ifndef FRONTEND
-
/*
* CurrentMemoryContext is the default allocation context for palloc().
- * We declare it here so that palloc() can be a macro. Avoid accessing it
- * directly! Instead, use MemoryContextSwitchTo() to change the setting.
+ * Avoid accessing it directly! Instead, use MemoryContextSwitchTo()
+ * to change the setting.
*/
extern PGDLLIMPORT MemoryContext CurrentMemoryContext;
@@ -51,9 +49,10 @@ extern void *MemoryContextAlloc(MemoryContext context, Size size);
extern void *MemoryContextAllocZero(MemoryContext context, Size size);
extern void *MemoryContextAllocZeroAligned(MemoryContext context, Size size);
-/* Higher-limit allocators. */
-extern void *MemoryContextAllocHuge(MemoryContext context, Size size);
-extern void *repalloc_huge(void *pointer, Size size);
+extern void *palloc(Size size);
+extern void *palloc0(Size size);
+extern void *repalloc(void *pointer, Size size);
+extern void pfree(void *pointer);
/*
* The result of palloc() is always word-aligned, so we can skip testing
@@ -68,6 +67,10 @@ extern void *repalloc_huge(void *pointer, Size size);
MemoryContextAllocZeroAligned(CurrentMemoryContext, sz) : \
MemoryContextAllocZero(CurrentMemoryContext, sz) )
+/* Higher-limit allocators. */
+extern void *MemoryContextAllocHuge(MemoryContext context, Size size);
+extern void *repalloc_huge(void *pointer, Size size);
+
/*
* MemoryContextSwitchTo can't be a macro in standard C compilers.
* But we can make it an inline function if the compiler supports it.
@@ -93,17 +96,9 @@ MemoryContextSwitchTo(MemoryContext context)
* allocated in a context, not with malloc().
*/
extern char *MemoryContextStrdup(MemoryContext context, const char *string);
-#endif /* !FRONTEND */
-
extern char *pstrdup(const char *in);
extern char *pnstrdup(const char *in, Size len);
-/* basic memory allocation functions */
-extern void *palloc(Size size);
-extern void *palloc0(Size size);
-extern void pfree(void *pointer);
-extern void *repalloc(void *pointer, Size size);
-
/* sprintf into a palloc'd buffer --- these are in psprintf.c */
extern char *psprintf(const char *fmt,...)
__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2)));