#include "postgres_fe.h"#include <limits.h>#include "pqexpbuffer.h"
Go to the source code of this file.
Functions | |
| static void | markPQExpBufferBroken (PQExpBuffer str) |
| PQExpBuffer | createPQExpBuffer (void) |
| void | initPQExpBuffer (PQExpBuffer str) |
| void | destroyPQExpBuffer (PQExpBuffer str) |
| void | termPQExpBuffer (PQExpBuffer str) |
| void | resetPQExpBuffer (PQExpBuffer str) |
| int | enlargePQExpBuffer (PQExpBuffer str, size_t needed) |
| void | printfPQExpBuffer (PQExpBuffer str, const char *fmt,...) |
| void | appendPQExpBuffer (PQExpBuffer str, const char *fmt,...) |
| void | appendPQExpBufferStr (PQExpBuffer str, const char *data) |
| void | appendPQExpBufferChar (PQExpBuffer str, char ch) |
| void | appendBinaryPQExpBuffer (PQExpBuffer str, const char *data, size_t datalen) |
Variables | |
| static const char | oom_buffer [1] = "" |
| void appendBinaryPQExpBuffer | ( | PQExpBuffer | str, | |
| const char * | data, | |||
| size_t | datalen | |||
| ) |
Definition at line 362 of file pqexpbuffer.c.
References PQExpBufferData::data, enlargePQExpBuffer(), and PQExpBufferData::len.
Referenced by appendPQExpBufferStr(), createViewAsClause(), and pqGets_internal().
| void appendPQExpBuffer | ( | PQExpBuffer | str, | |
| const char * | fmt, | |||
| ... | ||||
| ) |
Definition at line 284 of file pqexpbuffer.c.
References PQExpBufferData::data, enlargePQExpBuffer(), PQExpBufferData::len, PQExpBufferData::maxlen, PQExpBufferBroken, and vsnprintf().
Referenced by _doSetSessionAuth(), _doSetWithOids(), _getObjectDescription(), _printTocEntry(), _reconnectToDB(), _selectOutputSchema(), _selectTablespace(), add_tablespace_footer(), AddAcl(), binary_upgrade_extension_member(), binary_upgrade_set_pg_class_oids(), binary_upgrade_set_type_oids_by_rel_oid(), binary_upgrade_set_type_oids_by_type_oid(), buildACLCommands(), buildDefaultACLCommands(), buildMatViewRefreshDependencies(), buildShSecLabelQuery(), cluster_one_database(), collectComments(), collectSecLabels(), connectDBStart(), connectFailureMessage(), connectNoDelay(), constructConnStr(), createViewAsClause(), describeAggregates(), describeFunctions(), describeOneTableDetails(), describeOneTSConfig(), describeOperators(), describeRoles(), describeTableDetails(), describeTablespaces(), describeTypes(), do_copy(), doShellQuoting(), dot_pg_pass_warning(), dumpAgg(), dumpAttrDef(), dumpBaseType(), dumpBlob(), dumpCast(), dumpCollation(), dumpComment(), dumpCompositeType(), dumpCompositeTypeColComments(), dumpConstraint(), dumpConversion(), dumpCreateDB(), dumpDatabase(), dumpDatabaseConfig(), dumpDefaultACL(), dumpDomain(), dumpEncoding(), dumpEnumType(), dumpEventTrigger(), dumpExtension(), dumpForeignDataWrapper(), dumpForeignServer(), dumpFunc(), dumpIndex(), dumpNamespace(), dumpOpclass(), dumpOpfamily(), dumpOpr(), dumpProcLang(), dumpRangeType(), dumpRoles(), dumpRule(), dumpSecLabel(), dumpSequence(), dumpSequenceData(), dumpShellType(), dumpStdStrings(), dumpTable(), dumpTableComment(), dumpTableConstraintComment(), dumpTableData(), dumpTableData_copy(), dumpTableData_insert(), dumpTableSchema(), dumpTableSecLabel(), dumpTablespaces(), dumpTrigger(), dumpTSConfig(), dumpTSDictionary(), dumpTSParser(), dumpTSTemplate(), dumpUserConfig(), dumpUserMappings(), emitShSecLabels(), ExecQueryUsingCursor(), expand_schema_name_patterns(), expand_table_name_patterns(), findLastBuiltinOid_V71(), fmtCopyColumnList(), fmtQualifiedId(), format_aggregate_signature(), format_function_arguments(), format_function_arguments_old(), format_function_signature(), GenerateRecoveryConf(), getAggregates(), getBlobs(), getCasts(), getCollations(), getConstraints(), getConversions(), getDefaultACLs(), getDependencies(), getDomainConstraints(), getEventTriggers(), getExtensionMembership(), getExtensions(), getForeignDataWrappers(), getForeignServers(), getFormattedTypeName(), getFuncs(), getIndexes(), getInherits(), getNamespaces(), getOpclasses(), getOperators(), getOpfamilies(), getProcLangs(), getRules(), getTableAttrs(), getTables(), getTriggers(), getTSConfigurations(), getTSDictionaries(), getTSParsers(), getTSTemplates(), getTypes(), listAllDbs(), listCasts(), listCollations(), listConversions(), listDefaultACLs(), listDomains(), listEventTriggers(), listExtensionContents(), listExtensions(), listForeignDataWrappers(), listForeignServers(), listForeignTables(), listLanguages(), listSchemas(), listTables(), listTSConfigs(), listTSConfigsVerbose(), listTSDictionaries(), listTSParsers(), listTSParsersVerbose(), listTSTemplates(), listUserMappings(), lockTableNoWait(), lookup_function_oid(), main(), makeAlterConfigCommand(), myFormatType(), objectDescription(), parseAclItem(), permissionsList(), PQconnectPoll(), pqGetErrorNotice3(), printACLColumn(), processSQLNamePattern(), refreshMatViewData(), reindex_one_database(), reindex_system_catalogs(), reportErrorPosition(), runPgDump(), selectSourceSchema(), setKeepalivesCount(), setKeepalivesIdle(), setKeepalivesInterval(), setup_connection(), and vacuum_one_database().
{
va_list args;
size_t avail;
int nprinted;
if (PQExpBufferBroken(str))
return; /* already failed */
for (;;)
{
/*
* Try to format the given string into the available space; but if
* there's hardly any space, don't bother trying, just fall through to
* enlarge the buffer first.
*/
if (str->maxlen > str->len + 16)
{
avail = str->maxlen - str->len - 1;
va_start(args, fmt);
nprinted = vsnprintf(str->data + str->len, avail,
fmt, args);
va_end(args);
/*
* Note: some versions of vsnprintf return the number of chars
* actually stored, but at least one returns -1 on failure. Be
* conservative about believing whether the print worked.
*/
if (nprinted >= 0 && nprinted < (int) avail - 1)
{
/* Success. Note nprinted does not include trailing null. */
str->len += nprinted;
break;
}
}
/* Double the buffer size and try again. */
if (!enlargePQExpBuffer(str, str->maxlen))
return; /* oops, out of memory */
}
}
| void appendPQExpBufferChar | ( | PQExpBuffer | str, | |
| char | ch | |||
| ) |
Definition at line 343 of file pqexpbuffer.c.
References PQExpBufferData::data, enlargePQExpBuffer(), and PQExpBufferData::len.
Referenced by AddAcl(), appendStringLiteralConn(), appendStringLiteralDQ(), constructConnStr(), copyAclUserName(), do_edit(), doConnStrQuoting(), doShellQuoting(), ExecuteInsertCommands(), fmtId(), MainLoop(), pg_append_history(), PQconnectPoll(), pqGetErrorNotice3(), processSQLNamePattern(), and reportErrorPosition().
| void appendPQExpBufferStr | ( | PQExpBuffer | str, | |
| const char * | data | |||
| ) |
Definition at line 332 of file pqexpbuffer.c.
References appendBinaryPQExpBuffer().
Referenced by _getObjectDescription(), add_role_attribute(), appendStringLiteralDQ(), describeOneTableDetails(), describeRoles(), do_copy(), do_edit(), doConnStrQuoting(), dumpBaseType(), dumpCompositeType(), dumpDomain(), dumpEventTrigger(), dumpTableData_copy(), dumpTableData_insert(), dumpTrigger(), fmtId(), GenerateRecoveryConf(), get_create_function_cmd(), gets_fromFile(), listDbRoleSettings(), main(), MainLoop(), minimal_error_message(), pg_append_history(), pqCatenateResultError(), PQexecFinish(), pqGetErrorNotice2(), pqGetErrorNotice3(), pqPrepareAsyncResult(), processSQLNamePattern(), and reportErrorPosition().
{
appendBinaryPQExpBuffer(str, data, strlen(data));
}
| PQExpBuffer createPQExpBuffer | ( | void | ) |
Definition at line 68 of file pqexpbuffer.c.
References initPQExpBuffer(), malloc, and NULL.
Referenced by _doSetSessionAuth(), _doSetWithOids(), _printTocEntry(), _reconnectToDB(), _selectOutputSchema(), _selectTablespace(), _WriteBlobData(), appendStringLiteralDQ(), binary_upgrade_set_pg_class_oids(), binary_upgrade_set_type_oids_by_rel_oid(), binary_upgrade_set_type_oids_by_type_oid(), buildACLCommands(), buildDefaultACLCommands(), buildMatViewRefreshDependencies(), buildShSecLabels(), collectComments(), collectSecLabels(), constructConnStr(), createViewAsClause(), defaultGetLocalPQExpBuffer(), dump_lo_buf(), dumpACL(), dumpAgg(), dumpAttrDef(), dumpBaseType(), dumpBlob(), dumpCast(), dumpCollation(), dumpComment(), dumpCompositeType(), dumpCompositeTypeColComments(), dumpConstraint(), dumpConversion(), dumpCreateDB(), dumpDatabase(), dumpDatabaseConfig(), dumpDbRoleConfig(), dumpDefaultACL(), dumpDomain(), dumpEncoding(), dumpEnumType(), dumpEventTrigger(), dumpExtension(), dumpForeignDataWrapper(), dumpForeignServer(), dumpFunc(), dumpGroups(), dumpIndex(), dumpNamespace(), dumpOpclass(), dumpOpfamily(), dumpOpr(), dumpProcLang(), dumpRangeType(), dumpRoles(), dumpRule(), dumpSecLabel(), dumpSequence(), dumpSequenceData(), dumpShellType(), dumpStdStrings(), dumpTable(), dumpTableComment(), dumpTableConstraintComment(), dumpTableData(), dumpTableData_copy(), dumpTableData_insert(), dumpTableSchema(), dumpTableSecLabel(), dumpTablespaces(), dumpTrigger(), dumpTSConfig(), dumpTSDictionary(), dumpTSParser(), dumpTSTemplate(), dumpUserConfig(), dumpUserMappings(), exec_command(), ExecuteInsertCommands(), expand_schema_name_patterns(), expand_table_name_patterns(), findLastBuiltinOid_V71(), fmtQualifiedId(), GenerateRecoveryConf(), get_create_function_cmd(), getAggregates(), getBlobs(), getCasts(), getCollations(), getConstraints(), getConversions(), getDefaultACLs(), getDependencies(), getDomainConstraints(), getEventTriggers(), getExtensionMembership(), getExtensions(), getForeignDataWrappers(), getForeignServers(), getFormattedTypeName(), getFuncs(), getIndexes(), getInherits(), getNamespaces(), getOpclasses(), getOperators(), getOpfamilies(), getProcLangs(), getRules(), gets_fromFile(), getTableAttrs(), getTables(), getThreadLocalPQExpBuffer(), getTriggers(), getTSConfigurations(), getTSDictionaries(), getTSParsers(), getTSTemplates(), getTypes(), lockTableNoWait(), lookup_function_oid(), main(), MainLoop(), makeAlterConfigCommand(), minimal_error_message(), myFormatType(), refreshMatViewData(), runPgDump(), selectSourceSchema(), and setup_connection().
{
PQExpBuffer res;
res = (PQExpBuffer) malloc(sizeof(PQExpBufferData));
if (res != NULL)
initPQExpBuffer(res);
return res;
}
| void destroyPQExpBuffer | ( | PQExpBuffer | str | ) |
Definition at line 110 of file pqexpbuffer.c.
References free, and termPQExpBuffer().
Referenced by _doSetSessionAuth(), _doSetWithOids(), _printTocEntry(), _reconnectToDB(), _selectOutputSchema(), _selectTablespace(), _WriteBlobData(), appendStringLiteralDQ(), BaseBackup(), binary_upgrade_set_pg_class_oids(), binary_upgrade_set_type_oids_by_rel_oid(), binary_upgrade_set_type_oids_by_type_oid(), buildACLCommands(), buildDefaultACLCommands(), buildMatViewRefreshDependencies(), buildShSecLabels(), collectComments(), collectSecLabels(), constructConnStr(), createViewAsClause(), DeCloneArchive(), dump_lo_buf(), dumpACL(), dumpAgg(), dumpAttrDef(), dumpBaseType(), dumpBlob(), dumpCast(), dumpCollation(), dumpComment(), dumpCompositeType(), dumpCompositeTypeColComments(), dumpConstraint(), dumpConversion(), dumpCreateDB(), dumpDatabase(), dumpDatabaseConfig(), dumpDbRoleConfig(), dumpDefaultACL(), dumpDomain(), dumpEncoding(), dumpEnumType(), dumpEventTrigger(), dumpExtension(), dumpForeignDataWrapper(), dumpForeignServer(), dumpFunc(), dumpGroups(), dumpIndex(), dumpNamespace(), dumpOpclass(), dumpOpfamily(), dumpOpr(), dumpProcLang(), dumpRangeType(), dumpRoles(), dumpRule(), dumpSecLabel(), dumpSequence(), dumpSequenceData(), dumpShellType(), dumpStdStrings(), dumpTable(), dumpTableComment(), dumpTableConstraintComment(), dumpTableData(), dumpTableData_copy(), dumpTableData_insert(), dumpTableSchema(), dumpTableSecLabel(), dumpTablespaces(), dumpTrigger(), dumpTSConfig(), dumpTSDictionary(), dumpTSParser(), dumpTSTemplate(), dumpUserConfig(), dumpUserMappings(), exec_command(), expand_schema_name_patterns(), expand_table_name_patterns(), findLastBuiltinOid_V71(), fmtQualifiedId(), get_create_function_cmd(), getAggregates(), getBlobs(), getCasts(), getCollations(), getConstraints(), getConversions(), getDefaultACLs(), getDependencies(), getDomainConstraints(), getEventTriggers(), getExtensionMembership(), getExtensions(), getForeignDataWrappers(), getForeignServers(), getFormattedTypeName(), getFuncs(), getIndexes(), getInherits(), getNamespaces(), getOpclasses(), getOperators(), getOpfamilies(), getProcLangs(), getRules(), getTableAttrs(), getTables(), getTriggers(), getTSConfigurations(), getTSDictionaries(), getTSParsers(), getTSTemplates(), getTypes(), lockTableNoWait(), lookup_function_oid(), main(), MainLoop(), makeAlterConfigCommand(), minimal_error_message(), myFormatType(), refreshMatViewData(), runPgDump(), selectSourceSchema(), and setup_connection().
{
if (str)
{
termPQExpBuffer(str);
free(str);
}
}
| int enlargePQExpBuffer | ( | PQExpBuffer | str, | |
| size_t | needed | |||
| ) |
Definition at line 168 of file pqexpbuffer.c.
References PQExpBufferData::data, PQExpBufferData::len, markPQExpBufferBroken(), PQExpBufferData::maxlen, NULL, PQExpBufferBroken, and realloc.
Referenced by appendBinaryPQExpBuffer(), appendByteaLiteral(), appendPQExpBuffer(), appendPQExpBufferChar(), appendStringLiteral(), appendStringLiteralConn(), and printfPQExpBuffer().
{
size_t newlen;
char *newdata;
if (PQExpBufferBroken(str))
return 0; /* already failed */
/*
* Guard against ridiculous "needed" values, which can occur if we're fed
* bogus data. Without this, we can get an overflow or infinite loop in
* the following.
*/
if (needed >= ((size_t) INT_MAX - str->len))
{
markPQExpBufferBroken(str);
return 0;
}
needed += str->len + 1; /* total space required now */
/* Because of the above test, we now have needed <= INT_MAX */
if (needed <= str->maxlen)
return 1; /* got enough space already */
/*
* We don't want to allocate just a little more space with each append;
* for efficiency, double the buffer size each time it overflows.
* Actually, we might need to more than double it if 'needed' is big...
*/
newlen = (str->maxlen > 0) ? (2 * str->maxlen) : 64;
while (needed > newlen)
newlen = 2 * newlen;
/*
* Clamp to INT_MAX in case we went past it. Note we are assuming here
* that INT_MAX <= UINT_MAX/2, else the above loop could overflow. We
* will still have newlen >= needed.
*/
if (newlen > (size_t) INT_MAX)
newlen = (size_t) INT_MAX;
newdata = (char *) realloc(str->data, newlen);
if (newdata != NULL)
{
str->data = newdata;
str->maxlen = newlen;
return 1;
}
markPQExpBufferBroken(str);
return 0;
}
| void initPQExpBuffer | ( | PQExpBuffer | str | ) |
Definition at line 86 of file pqexpbuffer.c.
References PQExpBufferData::data, INITIAL_EXPBUFFER_SIZE, PQExpBufferData::len, malloc, PQExpBufferData::maxlen, NULL, and oom_buffer.
Referenced by add_tablespace_footer(), cluster_one_database(), createPQExpBuffer(), describeAggregates(), describeFunctions(), describeOneTableDetails(), describeOneTSConfig(), describeOneTSParser(), describeOperators(), describeRoles(), describeTableDetails(), describeTablespaces(), describeTypes(), do_copy(), exec_command(), ExecQueryUsingCursor(), format_aggregate_signature(), format_function_arguments(), format_function_arguments_old(), format_function_signature(), getCasts(), getParameterStatus(), helpSQL(), listAllDbs(), listCasts(), listCollations(), listConversions(), listDbRoleSettings(), listDefaultACLs(), listDomains(), listEventTriggers(), listExtensionContents(), listExtensions(), listForeignDataWrappers(), listForeignServers(), listForeignTables(), listLanguages(), listOneExtensionContents(), listSchemas(), listTables(), listTSConfigs(), listTSConfigsVerbose(), listTSDictionaries(), listTSParsers(), listTSParsersVerbose(), listTSTemplates(), listUserMappings(), main(), makeEmptyPGconn(), objectDescription(), permissionsList(), pqCatenateResultError(), PQconndefaults(), PQconninfo(), PQconninfoParse(), pqGetErrorNotice2(), pqGetErrorNotice3(), processSQLNamePattern(), reindex_one_database(), reindex_system_catalogs(), resetPQExpBuffer(), and vacuum_one_database().
| static void markPQExpBufferBroken | ( | PQExpBuffer | str | ) | [static] |
Definition at line 46 of file pqexpbuffer.c.
References PQExpBufferData::data, free, PQExpBufferData::len, PQExpBufferData::maxlen, and oom_buffer.
Referenced by enlargePQExpBuffer().
{
if (str->data != oom_buffer)
free(str->data);
/*
* Casting away const here is a bit ugly, but it seems preferable to not
* marking oom_buffer const. We want to do that to encourage the compiler
* to put oom_buffer in read-only storage, so that anyone who tries to
* scribble on a broken PQExpBuffer will get a failure.
*/
str->data = (char *) oom_buffer;
str->len = 0;
str->maxlen = 0;
}
| void printfPQExpBuffer | ( | PQExpBuffer | str, | |
| const char * | fmt, | |||
| ... | ||||
| ) |
Definition at line 231 of file pqexpbuffer.c.
References PQExpBufferData::data, enlargePQExpBuffer(), PQExpBufferData::len, PQExpBufferData::maxlen, PQExpBufferBroken, resetPQExpBuffer(), and vsnprintf().
Referenced by add_tablespace_footer(), buildACLCommands(), connectOptions2(), conninfo_add_defaults(), conninfo_array_parse(), conninfo_init(), conninfo_parse(), conninfo_storeval(), conninfo_uri_decode(), conninfo_uri_parse_options(), conninfo_uri_parse_params(), describeAggregates(), describeFunctions(), describeOneTableDetails(), describeOneTSConfig(), describeOneTSParser(), describeOperators(), describeRoles(), describeTableDetails(), describeTablespaces(), describeTypes(), do_copy(), dumpDatabaseConfig(), dumpDbRoleConfig(), dumpGroups(), dumpRoles(), dumpRule(), dumpUserConfig(), exec_command(), get_create_function_cmd(), getAnotherTuple(), getRowDescriptions(), handleSyncLoss(), listAllDbs(), listCasts(), listCollations(), listConversions(), listDbRoleSettings(), listDefaultACLs(), listDomains(), listEventTriggers(), listExtensionContents(), listExtensions(), listForeignDataWrappers(), listForeignServers(), listForeignTables(), listLanguages(), listOneExtensionContents(), listSchemas(), listTables(), listTSConfigs(), listTSConfigsVerbose(), listTSDictionaries(), listTSParsers(), listTSParsersVerbose(), listTSTemplates(), listUserMappings(), lo_create(), lo_export(), lo_import_internal(), lo_initialize(), lo_lseek64(), lo_read(), lo_tell64(), lo_truncate(), lo_truncate64(), lo_write(), lookup_function_oid(), main(), minimal_error_message(), parseAclItem(), parseServiceFile(), parseServiceInfo(), permissionsList(), pg_fe_sendauth(), pg_local_sendauth(), pg_password_sendauth(), pqCheckInBufferSpace(), pqCheckOutBufferSpace(), PQconnectPoll(), pqEndcopy2(), pqEndcopy3(), PQescapeByteaInternal(), PQescapeInternal(), PQescapeStringInternal(), PQexecStart(), PQfn(), pqFunctionCall2(), pqFunctionCall3(), PQgetCopyData(), pqGetCopyData2(), pqGetCopyData3(), pqGetline3(), PQgetResult(), pqParseInput2(), pqParseInput3(), PQputCopyData(), PQputCopyEnd(), pqReadData(), PQreset(), PQresetPoll(), pqsecure_open_client(), pqsecure_read(), pqsecure_write(), PQsendDescribe(), PQsendPrepare(), PQsendQuery(), PQsendQueryGuts(), PQsendQueryParams(), PQsendQueryPrepared(), PQsendQueryStart(), pqSendSome(), pqSetenvPoll(), pqSocketCheck(), and pqWaitTimed().
{
va_list args;
size_t avail;
int nprinted;
resetPQExpBuffer(str);
if (PQExpBufferBroken(str))
return; /* already failed */
for (;;)
{
/*
* Try to format the given string into the available space; but if
* there's hardly any space, don't bother trying, just fall through to
* enlarge the buffer first.
*/
if (str->maxlen > str->len + 16)
{
avail = str->maxlen - str->len - 1;
va_start(args, fmt);
nprinted = vsnprintf(str->data + str->len, avail,
fmt, args);
va_end(args);
/*
* Note: some versions of vsnprintf return the number of chars
* actually stored, but at least one returns -1 on failure. Be
* conservative about believing whether the print worked.
*/
if (nprinted >= 0 && nprinted < (int) avail - 1)
{
/* Success. Note nprinted does not include trailing null. */
str->len += nprinted;
break;
}
}
/* Double the buffer size and try again. */
if (!enlargePQExpBuffer(str, str->maxlen))
return; /* oops, out of memory */
}
}
| void resetPQExpBuffer | ( | PQExpBuffer | str | ) |
Definition at line 142 of file pqexpbuffer.c.
References PQExpBufferData::data, initPQExpBuffer(), PQExpBufferData::len, and oom_buffer.
Referenced by connectDBComplete(), copyAclUserName(), defaultGetLocalPQExpBuffer(), describeOneTableDetails(), describeRoles(), do_edit(), dumpBlob(), dumpCompositeTypeColComments(), dumpCreateDB(), dumpDatabase(), dumpOpclass(), dumpOpfamily(), dumpRoles(), dumpSequence(), dumpSequenceData(), dumpTableComment(), dumpTableData_insert(), dumpTableSecLabel(), dumpTSConfig(), dumpUserMappings(), exec_command(), ExecuteInsertCommands(), findLastBuiltinOid_V71(), get_create_function_cmd(), getConstraints(), getIndexes(), gets_fromFile(), getTableAttrs(), getTables(), getThreadLocalPQExpBuffer(), getTriggers(), listDbRoleSettings(), lockTableNoWait(), MainLoop(), parseAclItem(), pg_send_history(), pqEndcopy2(), pqEndcopy3(), PQexecFinish(), PQfn(), pqGetErrorNotice2(), pqGetErrorNotice3(), pqGets_internal(), pqPrepareAsyncResult(), PQputCopyEnd(), PQsendQueryStart(), printfPQExpBuffer(), and processSQLNamePattern().
{
if (str)
{
if (str->data != oom_buffer)
{
str->len = 0;
str->data[0] = '\0';
}
else
{
/* try to reinitialize to valid state */
initPQExpBuffer(str);
}
}
}
| void termPQExpBuffer | ( | PQExpBuffer | str | ) |
Definition at line 125 of file pqexpbuffer.c.
References PQExpBufferData::data, free, PQExpBufferData::len, PQExpBufferData::maxlen, and oom_buffer.
Referenced by add_tablespace_footer(), cluster_one_database(), describeAggregates(), describeFunctions(), describeOneTableDetails(), describeOneTSConfig(), describeOneTSParser(), describeOperators(), describeRoles(), describeTableDetails(), describeTablespaces(), describeTypes(), destroyPQExpBuffer(), do_copy(), exec_command(), ExecQueryUsingCursor(), freePGconn(), getParameterStatus(), listAllDbs(), listCasts(), listCollations(), listConversions(), listDefaultACLs(), listDomains(), listEventTriggers(), listExtensionContents(), listExtensions(), listForeignDataWrappers(), listForeignServers(), listForeignTables(), listLanguages(), listOneExtensionContents(), listSchemas(), listTables(), listTSConfigs(), listTSConfigsVerbose(), listTSDictionaries(), listTSParsers(), listTSParsersVerbose(), listTSTemplates(), listUserMappings(), main(), objectDescription(), permissionsList(), pqCatenateResultError(), PQconndefaults(), PQconninfo(), PQconninfoParse(), pqGetErrorNotice2(), pqGetErrorNotice3(), processSQLNamePattern(), reindex_one_database(), reindex_system_catalogs(), and vacuum_one_database().
{
if (str->data != oom_buffer)
free(str->data);
/* just for luck, make the buffer validly empty. */
str->data = (char *) oom_buffer; /* see comment above */
str->maxlen = 0;
str->len = 0;
}
const char oom_buffer[1] = "" [static] |
Definition at line 37 of file pqexpbuffer.c.
Referenced by initPQExpBuffer(), markPQExpBufferBroken(), resetPQExpBuffer(), and termPQExpBuffer().
1.7.1