diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/stringinfo.c | 71 |
1 files changed, 61 insertions, 10 deletions
diff --git a/src/common/stringinfo.c b/src/common/stringinfo.c index 55d2fbb864d..f4317003411 100644 --- a/src/common/stringinfo.c +++ b/src/common/stringinfo.c @@ -30,6 +30,40 @@ /* + * initStringInfoInternal + * + * Initialize a StringInfoData struct (with previously undefined contents) + * to describe an empty string. + * The initial memory allocation size is specified by 'initsize'. + * The valid range for 'initsize' is 1 to MaxAllocSize. + */ +static inline void +initStringInfoInternal(StringInfo str, int initsize) +{ + Assert(initsize >= 1 && initsize <= MaxAllocSize); + + str->data = (char *) palloc(initsize); + str->maxlen = initsize; + resetStringInfo(str); +} + +/* + * makeStringInfoInternal(int initsize) + * + * Create an empty 'StringInfoData' & return a pointer to it. + * The initial memory allocation size is specified by 'initsize'. + * The valid range for 'initsize' is 1 to MaxAllocSize. + */ +static inline StringInfo +makeStringInfoInternal(int initsize) +{ + StringInfo res = (StringInfo) palloc(sizeof(StringInfoData)); + + initStringInfoInternal(res, initsize); + return res; +} + +/* * makeStringInfo * * Create an empty 'StringInfoData' & return a pointer to it. @@ -37,13 +71,20 @@ StringInfo makeStringInfo(void) { - StringInfo res; - - res = (StringInfo) palloc(sizeof(StringInfoData)); - - initStringInfo(res); + return makeStringInfoInternal(STRINGINFO_DEFAULT_SIZE); +} - return res; +/* + * makeStringInfoExt(int initsize) + * + * Create an empty 'StringInfoData' & return a pointer to it. + * The initial memory allocation size is specified by 'initsize'. + * The valid range for 'initsize' is 1 to MaxAllocSize. + */ +StringInfo +makeStringInfoExt(int initsize) +{ + return makeStringInfoInternal(initsize); } /* @@ -55,11 +96,21 @@ makeStringInfo(void) void initStringInfo(StringInfo str) { - int size = 1024; /* initial default buffer size */ + return initStringInfoInternal(str, STRINGINFO_DEFAULT_SIZE); +} - str->data = (char *) palloc(size); - str->maxlen = size; - resetStringInfo(str); +/* + * initStringInfoExt + * + * Initialize a StringInfoData struct (with previously undefined contents) + * to describe an empty string. + * The initial memory allocation size is specified by 'initsize'. + * The valid range for 'initsize' is 1 to MaxAllocSize. + */ +void +initStringInfoExt(StringInfo str, int initsize) +{ + initStringInfoInternal(str, initsize); } /* |