diff options
-rw-r--r-- | src/common/psprintf.c | 11 | ||||
-rw-r--r-- | src/include/common/fe_memutils.h | 14 | ||||
-rw-r--r-- | src/include/utils/palloc.h | 25 |
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))); |