PostgreSQL Source Code  git master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
stringinfo.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  StringInfoData
 

Macros

#define appendStringInfoCharMacro(str, ch)
 

Typedefs

typedef struct StringInfoData StringInfoData
 
typedef StringInfoDataStringInfo
 

Functions

StringInfo makeStringInfo (void)
 
StringInfo makeLongStringInfo (void)
 
void initStringInfo (StringInfo str)
 
void initLongStringInfo (StringInfo str)
 
void resetStringInfo (StringInfo str)
 
void appendStringInfo (StringInfo str, const char *fmt,...) pg_attribute_printf(2
 
void int appendStringInfoVA (StringInfo str, const char *fmt, va_list args) pg_attribute_printf(2
 
void int void appendStringInfoString (StringInfo str, const char *s)
 
void appendStringInfoChar (StringInfo str, char ch)
 
void appendStringInfoSpaces (StringInfo str, int count)
 
void appendBinaryStringInfo (StringInfo str, const char *data, int datalen)
 
void enlargeStringInfo (StringInfo str, int needed)
 

Macro Definition Documentation

#define appendStringInfoCharMacro (   str,
  ch 
)

Typedef Documentation

Definition at line 46 of file stringinfo.h.

Function Documentation

void appendBinaryStringInfo ( StringInfo  str,
const char *  data,
int  datalen 
)

Definition at line 240 of file stringinfo.c.

References Assert, StringInfoData::data, enlargeStringInfo(), StringInfoData::len, and NULL.

Referenced by add_indent(), appendStringInfoRegexpSubstr(), appendStringInfoString(), appendStringInfoText(), buf_add_txid(), buf_init(), bytea_string_agg_transfn(), config_enum_get_options(), CopyReadLine(), CopyReadLineText(), CopySendData(), CopySendString(), ExecBuildSlotValueDescription(), GetOldFunctionMessage(), HandleParallelMessages(), hstore_to_json(), hstore_to_json_loose(), hstore_to_jsonb_loose(), int8_avg_deserialize(), json_lex_string(), jsonb_put_escaped_value(), JsonbToCStringWorker(), log_line_prefix(), map_sql_identifier_to_xml_name(), map_xml_name_to_sql_identifier(), numeric_avg_deserialize(), numeric_deserialize(), numeric_poly_deserialize(), parse_fcall_arguments(), parse_fcall_arguments_20(), pg_decode_message(), plpgsql_append_source_text(), pq_getstring(), pq_sendbytes(), pq_sendcountedtext(), pq_sendfloat4(), pq_sendint(), pq_sendint64(), pq_sendstring(), pq_sendtext(), process_pipe_input(), range_recv(), replace_text(), replace_text_regexp(), TQSendRecordInfo(), unaccent_lexize(), write_csvlog(), XLogInsertRecord(), and XLogWalRcvProcessMsg().

241 {
242  Assert(str != NULL);
243 
244  /* Make more room if needed */
245  enlargeStringInfo(str, datalen);
246 
247  /* OK, append the data */
248  memcpy(str->data + str->len, data, datalen);
249  str->len += datalen;
250 
251  /*
252  * Keep a trailing null in place, even though it's probably useless for
253  * binary data. (Some callers are dealing with text but call this because
254  * their input isn't null-terminated.)
255  */
256  str->data[str->len] = '\0';
257 }
void enlargeStringInfo(StringInfo str, int needed)
Definition: stringinfo.c:277
#define NULL
Definition: c.h:226
#define Assert(condition)
Definition: c.h:671
void appendStringInfo ( StringInfo  str,
const char *  fmt,
  ... 
)
void appendStringInfoChar ( StringInfo  str,
char  ch 
)

Definition at line 201 of file stringinfo.c.

References appendStringInfo(), StringInfoData::data, enlargeStringInfo(), StringInfoData::len, and StringInfoData::maxlen.

Referenced by _outAExpr(), _outList(), _outValue(), appendConditions(), appendContextKeyword(), appendStringInfoRegexpSubstr(), appendTypeNameToBuffer(), array_dim_to_json(), brin_page_items(), BuildIndexValueDescription(), circle_out(), composite_to_json(), ConvertTriggerToFK(), cube_out(), database_to_xml_internal(), DeadLockReport(), deparseAggref(), deparseArrayExpr(), deparseArrayRef(), deparseBoolExpr(), deparseDistinctExpr(), deparseFuncExpr(), deparseInsertSql(), deparseNullTest(), deparseOpExpr(), deparseScalarArrayOpExpr(), deparseStringLiteral(), do_pg_start_backup(), escape_param_str(), exec_stmt_raise(), ExecBuildSlotValueDescription(), ExplainBeginOutput(), ExplainCloseGroup(), ExplainJSONLineEnding(), ExplainNode(), ExplainOpenGroup(), ExplainProperty(), ExplainPropertyList(), ExplainPropertyListNested(), ExplainSeparatePlans(), ExplainXMLTag(), ExplainYAMLLineStarting(), format_procedure_internal(), FreePageManagerDumpBtree(), funcname_signature_string(), generate_operator_name(), get_agg_expr(), get_basic_select_query(), get_coercion_expr(), get_column_alias_list(), get_delete_query_def(), get_from_clause_coldeflist(), get_from_clause_item(), get_func_expr(), get_insert_query_def(), get_oper_expr(), get_parameter(), get_rule_expr(), get_rule_expr_paren(), get_rule_windowspec(), get_setop_query(), get_special_variable(), get_sql_insert(), get_sublink_expr(), get_tablesample_def(), get_update_query_def(), get_update_query_targetlist_def(), get_values_def(), get_variable(), get_windowfunc_expr(), get_with_clause(), hstore_to_json(), hstore_to_json_loose(), incompatible_module_error(), InteractiveBackend(), json_agg_transfn(), json_build_array(), json_build_object(), json_lex_string(), json_object(), json_object_two_arg(), libpqrcv_startstreaming(), log_line_prefix(), make_ruledef(), make_viewdef(), mxid_to_string(), NameListToQuotedString(), NameListToString(), outBitmapset(), outDatum(), outNode(), outToken(), path_encode(), pg_decode_change(), pg_get_constraintdef_worker(), pg_get_functiondef(), pg_get_indexdef_worker(), pg_get_partkeydef_worker(), pg_get_triggerdef_worker(), pg_split_opts(), pgp_armor_encode(), postgresImportForeignSchema(), pq_send_ascii_string(), print_function_arguments(), print_function_rettype(), print_literal(), printSubscripts(), query_to_xml_internal(), range_bound_escape(), range_deparse(), range_parse_bound(), record_in(), record_out(), reportDependentObjects(), RI_Initial_Check(), schema_to_xml_internal(), send_message_to_frontend(), send_message_to_server_log(), sepgsql_proc_post_create(), serialize_deflist(), show_buffer_usage(), show_modifytable_info(), show_tablesample(), show_tidbitmap_info(), simple_quote_literal(), SPI_sql_row_to_xmlelement(), storeObjectDescription(), stringlist_to_identifierstr(), tuple_to_stringinfo(), txid_snapshot_out(), TypeNameListToString(), uuid_out(), write_csvlog(), xlog_outdesc(), and xmlpi().

202 {
203  /* Make more room if needed */
204  if (str->len + 1 >= str->maxlen)
205  enlargeStringInfo(str, 1);
206 
207  /* OK, append the character */
208  str->data[str->len] = ch;
209  str->len++;
210  str->data[str->len] = '\0';
211 }
void enlargeStringInfo(StringInfo str, int needed)
Definition: stringinfo.c:277
void appendStringInfoSpaces ( StringInfo  str,
int  count 
)

Definition at line 219 of file stringinfo.c.

References StringInfoData::data, enlargeStringInfo(), and StringInfoData::len.

Referenced by appendContextKeyword(), ExplainCloseGroup(), ExplainDummyGroup(), ExplainNode(), ExplainOpenGroup(), ExplainProperty(), ExplainPropertyList(), ExplainPropertyListNested(), ExplainXMLTag(), ExplainYAMLLineStarting(), log_line_prefix(), show_buffer_usage(), show_hash_info(), show_modifytable_info(), show_sort_info(), show_tablesample(), show_tidbitmap_info(), and text_format_append_string().

220 {
221  if (count > 0)
222  {
223  /* Make more room if needed */
224  enlargeStringInfo(str, count);
225 
226  /* OK, append the spaces */
227  while (--count >= 0)
228  str->data[str->len++] = ' ';
229  str->data[str->len] = '\0';
230  }
231 }
void enlargeStringInfo(StringInfo str, int needed)
Definition: stringinfo.c:277
void int void appendStringInfoString ( StringInfo  str,
const char *  s 
)

Definition at line 189 of file stringinfo.c.

References appendBinaryStringInfo(), and appendStringInfo().

Referenced by _outAConst(), _outAExpr(), _outAgg(), _outBoolExpr(), _outConst(), _outConstraint(), _outCustomPath(), _outCustomScan(), _outForeignKeyCacheInfo(), _outForeignKeyOptInfo(), _outGroup(), _outMergeAppend(), _outMergeJoin(), _outPathInfo(), _outPathTarget(), _outQuery(), _outRecursiveUnion(), _outSetOp(), _outSort(), _outUnique(), _outValue(), _outWindowAgg(), appendAggOrderBy(), appendConditions(), appendContextKeyword(), appendGroupByClause(), appendOrderByClause(), appendTypeNameToBuffer(), array_dim_to_json(), array_to_json_internal(), array_to_text_internal(), brin_page_items(), build_tuplestore_recursively(), BuildIndexValueDescription(), composite_to_json(), concat_internal(), config_enum_get_options(), ConvertTriggerToFK(), cube_out(), database_to_xml_internal(), database_to_xmlschema_internal(), datum_to_json(), DeadLockReport(), decompile_column_index_array(), deparseAggref(), deparseAnalyzeSizeSql(), deparseAnalyzeSql(), deparseArrayExpr(), deparseBoolExpr(), deparseColumnRef(), deparseConst(), deparseDeleteSql(), deparseDirectDeleteSql(), deparseDirectUpdateSql(), deparseDistinctExpr(), deparseExplicitTargetList(), deparseFromExpr(), deparseFromExprForRel(), deparseFuncExpr(), deparseInsertSql(), deparseLockingClause(), deparseNullTest(), deparseOperatorName(), deparseSelectSql(), deparseSortGroupClause(), deparseTargetList(), deparseUpdateSql(), errdetail_params(), escape_json(), escape_xml(), estimate_path_cost_size(), exec_stmt_raise(), ExecBuildSlotValueDescription(), execute_extension_script(), ExplainBeginOutput(), ExplainDummyGroup(), ExplainEndOutput(), ExplainIndexScanDetails(), ExplainNode(), ExplainOneUtility(), ExplainOpenGroup(), ExplainProperty(), ExplainPropertyList(), ExplainPropertyListNested(), ExplainQuery(), ExplainTargetRel(), ExplainXMLTag(), ExportSnapshot(), flatten_reloptions(), flatten_set_variable_args(), format_expr_params(), format_operator_internal(), format_preparedparamsdata(), format_procedure_internal(), funcname_signature_string(), generate_operator_name(), get_agg_expr(), get_basic_select_query(), get_column_alias_list(), get_const_expr(), get_from_clause(), get_from_clause_coldeflist(), get_from_clause_item(), get_func_expr(), get_insert_query_def(), get_query_def(), get_rule_expr(), get_rule_groupingset(), get_rule_orderby(), get_rule_sortgroupclause(), get_rule_windowclause(), get_rule_windowspec(), get_select_query_def(), get_setop_query(), get_sql_delete(), get_sql_insert(), get_sql_update(), get_sublink_expr(), get_tablesample_def(), get_target_list(), get_tuple_of_interest(), get_update_query_def(), get_update_query_targetlist_def(), get_utility_query_def(), get_values_def(), get_variable(), get_windowfunc_expr(), get_with_clause(), getConstraintTypeDescription(), getObjectIdentityParts(), getObjectTypeDescription(), getProcedureTypeDescription(), getRelationIdentity(), getRelationTypeDescription(), gin_desc(), hstore_to_json(), hstore_to_json_loose(), incompatible_module_error(), json_agg_transfn(), json_build_array(), json_build_object(), json_object(), json_object_agg_transfn(), json_object_two_arg(), jsonb_put_escaped_value(), libpqrcv_startstreaming(), log_line_prefix(), make_ruledef(), make_temptable_name_n(), map_multipart_sql_identifier_to_xml_name(), map_sql_catalog_to_xmlschema_types(), map_sql_identifier_to_xml_name(), map_sql_schema_to_xmlschema_types(), map_sql_table_to_xmlschema(), map_sql_type_to_xml_name(), map_sql_type_to_xmlschema_type(), map_sql_value_to_xml_value(), map_xml_name_to_sql_identifier(), NameListToQuotedString(), NameListToString(), op_signature_string(), out_infobits(), out_member(), outDatum(), outNode(), outToken(), pg_decode_change(), pg_decode_commit_txn(), pg_extension_update_paths(), pg_get_constraintdef_worker(), pg_get_functiondef(), pg_get_indexdef_worker(), pg_get_partkeydef_worker(), pg_get_triggerdef_worker(), pg_output_begin(), pgp_armor_encode(), PLy_traceback(), postgresImportForeignSchema(), print_function_arguments(), print_function_rettype(), print_function_trftypes(), print_literal(), quote_qualified_identifier(), range_deparse(), refresh_by_match_merge(), report_triggers(), ri_Check_Pk_Match(), RI_FKey_cascade_upd(), RI_FKey_check(), RI_FKey_setdefault_del(), RI_FKey_setdefault_upd(), RI_FKey_setnull_del(), RI_FKey_setnull_upd(), ri_GenerateQual(), RI_Initial_Check(), ri_ReportViolation(), ri_restrict_del(), ri_restrict_upd(), schema_to_xml_internal(), schema_to_xmlschema_internal(), send_message_to_frontend(), send_message_to_server_log(), sepgsql_proc_post_create(), serialize_deflist(), show_buffer_usage(), show_modifytable_info(), show_sort_group_keys(), show_sortorder_options(), show_tablesample(), show_tidbitmap_info(), ShowUsage(), single_encode(), smgr_desc(), sn_scalar(), spg_desc(), SPI_sql_row_to_xmlelement(), standby_desc_invalidations(), standby_desc_running_xacts(), StartupXLOG(), stringlist_to_identifierstr(), text_format_append_string(), tuple_to_stringinfo(), write_auto_conf_file(), write_csvlog(), xact_desc_abort(), xact_desc_assignment(), xact_desc_commit(), xlog_desc(), xlog_outdesc(), XLogInsertRecord(), xml_out_internal(), xmlcomment(), xmlconcat(), xmldata_root_element_start(), xmlpi(), xmlroot(), xsd_schema_element_end(), and xsd_schema_element_start().

190 {
191  appendBinaryStringInfo(str, s, strlen(s));
192 }
void appendBinaryStringInfo(StringInfo str, const char *data, int datalen)
Definition: stringinfo.c:240
void int appendStringInfoVA ( StringInfo  str,
const char *  fmt,
va_list  args 
)
void enlargeStringInfo ( StringInfo  str,
int  needed 
)

Definition at line 277 of file stringinfo.c.

References StringInfoData::data, elog, ereport, errcode(), errdetail(), errmsg(), ERROR, StringInfoData::len, StringInfoData::long_ok, MaxAllocSize, StringInfoData::maxlen, and repalloc_huge().

Referenced by appendBinaryStringInfo(), appendStringInfo(), appendStringInfoChar(), appendStringInfoSpaces(), CopyReadAttributesCSV(), CopyReadAttributesText(), CopyReadBinaryAttribute(), GetOldFunctionMessage(), JsonbToCStringWorker(), logicalrep_write_tuple(), pgp_armor_decode(), pgp_armor_encode(), PLy_elog(), pq_getmessage(), reserveFromBuffer(), and XLogSendPhysical().

278 {
279  Size newlen;
280  Size limit;
281 
282  /*
283  * Determine the upper size limit. Because of overflow concerns outside
284  * of this module, we limit ourselves to 4-byte signed integer range,
285  * even for "long_ok" strings.
286  */
287  limit = str->long_ok ?
288  (((Size) 1) << (sizeof(int32) * 8 - 1)) - 1 :
289  MaxAllocSize;
290 
291  /*
292  * Guard against out-of-range "needed" values. Without this, we can get
293  * an overflow or infinite loop in the following.
294  */
295  if (needed < 0) /* should not happen */
296  elog(ERROR, "invalid string enlargement request size: %d", needed);
297  if (((Size) needed) >= (limit - (Size) str->len))
298  ereport(ERROR,
299  (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
300  errmsg("out of memory"),
301  errdetail("Cannot enlarge string buffer containing %d bytes by %d more bytes.",
302  str->len, needed)));
303 
304  needed += str->len + 1; /* total space required now */
305 
306  /* Because of the above test, we now have needed <= limit */
307 
308  if (needed <= str->maxlen)
309  return; /* got enough space already */
310 
311  /*
312  * We don't want to allocate just a little more space with each append;
313  * for efficiency, double the buffer size each time it overflows.
314  * Actually, we might need to more than double it if 'needed' is big...
315  */
316  newlen = 2 * (Size) str->maxlen;
317  while ((Size) needed > newlen)
318  newlen = 2 * newlen;
319 
320  /*
321  * Clamp to the limit in case we went past it. (We used to depend on
322  * limit <= INT32_MAX/2, to avoid overflow in the loop above; we no longer
323  * depend on that, but if "needed" and str->maxlen ever become wider, we
324  * will need similar caution here.) We will still have newlen >= needed.
325  */
326  if (newlen > limit)
327  newlen = limit;
328 
329  str->data = (char *) repalloc_huge(str->data, newlen);
330 
331  str->maxlen = newlen;
332 }
int errcode(int sqlerrcode)
Definition: elog.c:575
signed int int32
Definition: c.h:253
#define ERROR
Definition: elog.h:43
int errdetail(const char *fmt,...)
Definition: elog.c:873
#define ereport(elevel, rest)
Definition: elog.h:122
#define MaxAllocSize
Definition: memutils.h:40
size_t Size
Definition: c.h:353
void * repalloc_huge(void *pointer, Size size)
Definition: mcxt.c:1104
int errmsg(const char *fmt,...)
Definition: elog.c:797
#define elog
Definition: elog.h:219
void initLongStringInfo ( StringInfo  str)

Definition at line 81 of file stringinfo.c.

References initStringInfo(), and StringInfoData::long_ok.

Referenced by BeginCopyFrom(), and makeLongStringInfo().

82 {
83  initStringInfo(str);
84  str->long_ok = true;
85 }
void initStringInfo(StringInfo str)
Definition: stringinfo.c:65
void initStringInfo ( StringInfo  str)

Definition at line 65 of file stringinfo.c.

References StringInfoData::data, StringInfoData::long_ok, StringInfoData::maxlen, palloc(), and resetStringInfo().

Referenced by array_to_text_internal(), bmsToString(), bqarr_in(), brin_page_items(), build_tuplestore_recursively(), BuildIndexValueDescription(), checkSharedDependencies(), circle_out(), concat_internal(), config_enum_get_options(), convertToJsonb(), ConvertTriggerToFK(), create_cursor(), cube_out(), cursor_to_xml(), dblink_close(), dblink_fdw_validator(), dblink_fetch(), dblink_open(), DeadLockReport(), deparse_expression_pretty(), deparseAnalyzeSizeSql(), deparseFromExprForRel(), do_pg_start_backup(), DropSubscription(), errdetail_params(), escape_xml(), estimate_path_cost_size(), exec_replication_command(), exec_stmt_raise(), ExecBuildSlotValueDescription(), ExecEvalXml(), execute_extension_script(), expand_fmt_string(), ExportSnapshot(), file_fdw_validator(), flatten_reloptions(), flatten_set_variable_args(), format_expr_params(), format_node_dump(), format_operator_internal(), format_preparedparamsdata(), format_procedure_internal(), FreePageManagerDump(), fsm_page_contents(), funcname_signature_string(), generate_operator_name(), get_from_clause(), get_sql_delete(), get_sql_insert(), get_sql_update(), get_target_list(), get_tuple_of_interest(), getObjectDescription(), getObjectIdentityParts(), getObjectTypeDescription(), HandleParallelMessages(), hstore_to_json(), hstore_to_json_loose(), hstore_to_jsonb_loose(), incompatible_module_error(), initialize_worker_spi(), initLongStringInfo(), int8_avg_deserialize(), json_object(), json_object_two_arg(), KnownAssignedXidsDisplay(), lazy_scan_heap(), lazy_vacuum_rel(), libpqrcv_create_slot(), libpqrcv_startstreaming(), make_temptable_name_n(), makeStringInfo(), map_multipart_sql_identifier_to_xml_name(), map_sql_catalog_to_xmlschema_types(), map_sql_identifier_to_xml_name(), map_sql_schema_to_xmlschema_types(), map_sql_table_to_xmlschema(), map_sql_type_to_xml_name(), map_sql_type_to_xmlschema_type(), map_sql_typecoll_to_xmlschema_types(), map_sql_value_to_xml_value(), map_xml_name_to_sql_identifier(), mxid_to_string(), NameListToQuotedString(), NameListToString(), nodeToString(), numeric_avg_deserialize(), numeric_deserialize(), numeric_poly_deserialize(), op_signature_string(), parse_fcall_arguments(), parse_fcall_arguments_20(), path_encode(), pg_armor(), pg_dearmor(), pg_extension_update_paths(), pg_get_constraintdef_worker(), pg_get_function_arguments(), pg_get_function_identity_arguments(), pg_get_function_result(), pg_get_functiondef(), pg_get_indexdef_worker(), pg_get_partkeydef_worker(), pg_get_ruledef_worker(), pg_get_triggerdef_worker(), pg_get_viewdef_worker(), pg_split_opts(), PLy_elog(), PLy_traceback(), postgres_fdw_validator(), postgresAcquireSampleRowsFunc(), postgresAnalyzeForeignTable(), postgresGetForeignPlan(), postgresImportForeignSchema(), PostgresMain(), postgresPlanDirectModify(), postgresPlanForeignModify(), postgresql_fdw_validator(), pq_beginmessage(), pq_begintypsend(), pretty_format_node_dump(), print_function_rettype(), process_pipe_input(), ProcSleep(), quote_object_name(), quote_qualified_identifier(), range_bound_escape(), range_deparse(), range_parse_bound(), range_recv(), record_in(), record_out(), recv_password_packet(), refresh_by_match_merge(), replace_text(), replace_text_regexp(), reportDependentObjects(), ri_Check_Pk_Match(), RI_FKey_cascade_del(), RI_FKey_cascade_upd(), RI_FKey_check(), RI_FKey_setdefault_del(), RI_FKey_setdefault_upd(), RI_FKey_setnull_del(), RI_FKey_setnull_upd(), RI_Initial_Check(), ri_ReportViolation(), ri_restrict_del(), ri_restrict_upd(), rm_redo_error_callback(), schema_get_xml_visible_tables(), send_message_to_frontend(), send_message_to_server_log(), sepgsql_attribute_post_create(), sepgsql_audit_log(), sepgsql_database_post_create(), sepgsql_proc_post_create(), sepgsql_relation_post_create(), sepgsql_schema_post_create(), serialize_deflist(), show_sort_group_keys(), ShowTransactionStateRec(), ShowUsage(), StartupXLOG(), stringlist_to_identifierstr(), table_to_xml_internal(), text_format(), TQSendRecordInfo(), txid_snapshot_out(), TypeNameListToString(), TypeNameToString(), typeStringToTypeName(), unaccent_lexize(), uuid_out(), WalReceiverMain(), write_auto_conf_file(), write_csvlog(), XLogInsertRecord(), xml_out_internal(), xmlcomment(), xmlconcat(), xmlpi(), xmlroot(), and xpath_table().

66 {
67  int size = 1024; /* initial default buffer size */
68 
69  str->data = (char *) palloc(size);
70  str->maxlen = size;
71  str->long_ok = false;
72  resetStringInfo(str);
73 }
void resetStringInfo(StringInfo str)
Definition: stringinfo.c:94
void * palloc(Size size)
Definition: mcxt.c:891
StringInfo makeLongStringInfo ( void  )

Definition at line 46 of file stringinfo.c.

References initLongStringInfo(), and palloc().

Referenced by CopyTo(), and ReceiveCopyBegin().

47 {
48  StringInfo res;
49 
50  res = (StringInfo) palloc(sizeof(StringInfoData));
51 
52  initLongStringInfo(res);
53 
54  return res;
55 }
void initLongStringInfo(StringInfo str)
Definition: stringinfo.c:81
StringInfoData * StringInfo
Definition: stringinfo.h:46
void * palloc(Size size)
Definition: mcxt.c:891