summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2025-12-05 16:40:26 +0900
committerMichael Paquier <michael@paquier.xyz>2025-12-05 16:40:26 +0900
commit31d3847a37bec060fb4177b2fc6c0fdfc7a08011 (patch)
treec93bc37750ca509c99f123dc88f320d98bec15ba
parent2f04110225ab30fbd9889d6f5d73fd6b3e1b308b (diff)
Use more palloc_object() and palloc_array() in contrib/
The idea is to encourage more the use of these new routines across the tree, as these offer stronger type safety guarantees than palloc(). In an ideal world, palloc() would then act as an internal routine of these flavors, whose footprint in the tree is minimal. The patch sent by the author is very large, and this chunk of changes represents something like 10% of the overall patch submitted. The code compiled is the same before and after this commit, using objdump to do some validation with a difference taken in-between. There are some diffs, which are caused by changes in line numbers because some of the new allocation formulas are shorter, for the following files: trgm_regexp.c, xpath.c and pg_walinspect.c. Author: David Geier <geidav.pg@gmail.com> Discussion: https://postgr.es/m/ad0748d4-3080-436e-b0bc-ac8f86a3466a@gmail.com
-rw-r--r--contrib/amcheck/verify_gin.c12
-rw-r--r--contrib/amcheck/verify_heapam.c2
-rw-r--r--contrib/amcheck/verify_nbtree.c2
-rw-r--r--contrib/basebackup_to_shell/basebackup_to_shell.c2
-rw-r--r--contrib/bloom/blinsert.c2
-rw-r--r--contrib/bloom/blscan.c4
-rw-r--r--contrib/bloom/blutils.c2
-rw-r--r--contrib/bloom/blvacuum.c4
-rw-r--r--contrib/btree_gin/btree_gin.c20
-rw-r--r--contrib/btree_gist/btree_inet.c4
-rw-r--r--contrib/btree_gist/btree_interval.c6
-rw-r--r--contrib/btree_gist/btree_time.c4
-rw-r--r--contrib/btree_gist/btree_ts.c8
-rw-r--r--contrib/btree_gist/btree_utils_num.c4
-rw-r--r--contrib/btree_gist/btree_utils_var.c6
-rw-r--r--contrib/btree_gist/btree_uuid.c2
-rw-r--r--contrib/cube/cube.c2
-rw-r--r--contrib/dict_int/dict_int.c4
-rw-r--r--contrib/dict_xsyn/dict_xsyn.c8
-rw-r--r--contrib/file_fdw/file_fdw.c4
-rw-r--r--contrib/hstore/hstore_gist.c6
-rw-r--r--contrib/hstore/hstore_io.c2
-rw-r--r--contrib/intarray/_int_bool.c8
-rw-r--r--contrib/intarray/_int_gin.c4
-rw-r--r--contrib/intarray/_int_gist.c12
-rw-r--r--contrib/intarray/_intbig_gist.c6
-rw-r--r--contrib/jsonb_plperl/jsonb_plperl.c2
-rw-r--r--contrib/jsonb_plpython/jsonb_plpython.c2
-rw-r--r--contrib/ltree/_ltree_gist.c6
-rw-r--r--contrib/ltree/_ltree_op.c2
-rw-r--r--contrib/ltree/ltree_gist.c6
-rw-r--r--contrib/ltree/ltree_io.c6
-rw-r--r--contrib/ltree/ltree_op.c2
-rw-r--r--contrib/ltree/ltxtquery_io.c8
-rw-r--r--contrib/pageinspect/brinfuncs.c2
-rw-r--r--contrib/pageinspect/btreefuncs.c6
-rw-r--r--contrib/pageinspect/ginfuncs.c2
-rw-r--r--contrib/pageinspect/hashfuncs.c2
-rw-r--r--contrib/pageinspect/heapfuncs.c4
-rw-r--r--contrib/pg_overexplain/pg_overexplain.c2
-rw-r--r--contrib/pg_trgm/trgm_gin.c8
-rw-r--r--contrib/pg_trgm/trgm_gist.c10
-rw-r--r--contrib/pg_trgm/trgm_regexp.c22
-rw-r--r--contrib/pg_visibility/pg_visibility.c2
-rw-r--r--contrib/pg_walinspect/pg_walinspect.c5
-rw-r--r--contrib/pgcrypto/mbuf.c8
-rw-r--r--contrib/pgcrypto/openssl.c4
-rw-r--r--contrib/pgcrypto/pgp-cfb.c2
-rw-r--r--contrib/pgcrypto/pgp-compress.c4
-rw-r--r--contrib/pgcrypto/pgp-decrypt.c4
-rw-r--r--contrib/pgcrypto/pgp-encrypt.c4
-rw-r--r--contrib/pgcrypto/pgp-pgsql.c6
-rw-r--r--contrib/pgcrypto/pgp-pubkey.c2
-rw-r--r--contrib/pgcrypto/px-hmac.c2
-rw-r--r--contrib/pgcrypto/px.c2
-rw-r--r--contrib/seg/seg.c10
-rw-r--r--contrib/sepgsql/label.c2
-rw-r--r--contrib/sepgsql/uavc.c2
-rw-r--r--contrib/spi/refint.c2
-rw-r--r--contrib/sslinfo/sslinfo.c2
-rw-r--r--contrib/tablefunc/tablefunc.c4
-rw-r--r--contrib/test_decoding/test_decoding.c2
-rw-r--r--contrib/tsm_system_rows/tsm_system_rows.c2
-rw-r--r--contrib/tsm_system_time/tsm_system_time.c2
-rw-r--r--contrib/unaccent/unaccent.c8
-rw-r--r--contrib/xml2/xpath.c3
-rw-r--r--contrib/xml2/xslt_proc.c2
67 files changed, 157 insertions, 161 deletions
diff --git a/contrib/amcheck/verify_gin.c b/contrib/amcheck/verify_gin.c
index efc56227568..253da4b1f0b 100644
--- a/contrib/amcheck/verify_gin.c
+++ b/contrib/amcheck/verify_gin.c
@@ -117,7 +117,7 @@ ginReadTupleWithoutState(IndexTuple itup, int *nitems)
}
else
{
- ipd = (ItemPointer) palloc(sizeof(ItemPointerData) * nipd);
+ ipd = palloc_array(ItemPointerData, nipd);
memcpy(ipd, ptr, sizeof(ItemPointerData) * nipd);
}
*nitems = nipd;
@@ -152,7 +152,7 @@ gin_check_posting_tree_parent_keys_consistency(Relation rel, BlockNumber posting
leafdepth = -1;
/* Start the scan at the root page */
- stack = (GinPostingTreeScanItem *) palloc0(sizeof(GinPostingTreeScanItem));
+ stack = palloc0_object(GinPostingTreeScanItem);
stack->depth = 0;
ItemPointerSetInvalid(&stack->parentkey);
stack->parentblk = InvalidBlockNumber;
@@ -354,7 +354,7 @@ gin_check_posting_tree_parent_keys_consistency(Relation rel, BlockNumber posting
stack->blkno, i)));
/* This is an internal page, recurse into the child. */
- ptr = (GinPostingTreeScanItem *) palloc(sizeof(GinPostingTreeScanItem));
+ ptr = palloc_object(GinPostingTreeScanItem);
ptr->depth = stack->depth + 1;
/*
@@ -412,7 +412,7 @@ gin_check_parent_keys_consistency(Relation rel,
leafdepth = -1;
/* Start the scan at the root page */
- stack = (GinScanItem *) palloc0(sizeof(GinScanItem));
+ stack = palloc0_object(GinScanItem);
stack->depth = 0;
stack->parenttup = NULL;
stack->parentblk = InvalidBlockNumber;
@@ -473,7 +473,7 @@ gin_check_parent_keys_consistency(Relation rel,
elog(DEBUG3, "split detected for blk: %u, parent blk: %u", stack->blkno, stack->parentblk);
- ptr = (GinScanItem *) palloc(sizeof(GinScanItem));
+ ptr = palloc_object(GinScanItem);
ptr->depth = stack->depth;
ptr->parenttup = CopyIndexTuple(stack->parenttup);
ptr->parentblk = stack->parentblk;
@@ -601,7 +601,7 @@ gin_check_parent_keys_consistency(Relation rel,
{
GinScanItem *ptr;
- ptr = (GinScanItem *) palloc(sizeof(GinScanItem));
+ ptr = palloc_object(GinScanItem);
ptr->depth = stack->depth + 1;
/* last tuple in layer has no high key */
if (i == maxoff && rightlink == InvalidBlockNumber)
diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c
index 4963e9245cb..a090e18c697 100644
--- a/contrib/amcheck/verify_heapam.c
+++ b/contrib/amcheck/verify_heapam.c
@@ -1838,7 +1838,7 @@ check_tuple_attribute(HeapCheckContext *ctx)
{
ToastedAttribute *ta;
- ta = (ToastedAttribute *) palloc0(sizeof(ToastedAttribute));
+ ta = palloc0_object(ToastedAttribute);
VARATT_EXTERNAL_GET_POINTER(ta->toast_pointer, attr);
ta->blkno = ctx->blkno;
diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c
index fce8bd9f9f9..f91392a3a49 100644
--- a/contrib/amcheck/verify_nbtree.c
+++ b/contrib/amcheck/verify_nbtree.c
@@ -399,7 +399,7 @@ bt_check_every_level(Relation rel, Relation heaprel, bool heapkeyspace,
/*
* Initialize state for entire verification operation
*/
- state = palloc0(sizeof(BtreeCheckState));
+ state = palloc0_object(BtreeCheckState);
state->rel = rel;
state->heaprel = heaprel;
state->heapkeyspace = heapkeyspace;
diff --git a/contrib/basebackup_to_shell/basebackup_to_shell.c b/contrib/basebackup_to_shell/basebackup_to_shell.c
index 8720f5a4372..345d3ed895d 100644
--- a/contrib/basebackup_to_shell/basebackup_to_shell.c
+++ b/contrib/basebackup_to_shell/basebackup_to_shell.c
@@ -136,7 +136,7 @@ shell_get_sink(bbsink *next_sink, void *detail_arg)
* We remember the current value of basebackup_to_shell.shell_command to
* be certain that it can't change under us during the backup.
*/
- sink = palloc0(sizeof(bbsink_shell));
+ sink = palloc0_object(bbsink_shell);
*((const bbsink_ops **) &sink->base.bbs_ops) = &bbsink_shell_ops;
sink->base.bbs_next = next_sink;
sink->target_detail = detail_arg;
diff --git a/contrib/bloom/blinsert.c b/contrib/bloom/blinsert.c
index 7866438122f..c11e06c34ee 100644
--- a/contrib/bloom/blinsert.c
+++ b/contrib/bloom/blinsert.c
@@ -151,7 +151,7 @@ blbuild(Relation heap, Relation index, IndexInfo *indexInfo)
MemoryContextDelete(buildstate.tmpCtx);
- result = (IndexBuildResult *) palloc(sizeof(IndexBuildResult));
+ result = palloc_object(IndexBuildResult);
result->heap_tuples = reltuples;
result->index_tuples = buildstate.indtuples;
diff --git a/contrib/bloom/blscan.c b/contrib/bloom/blscan.c
index d072f47fe28..0d71edbe91c 100644
--- a/contrib/bloom/blscan.c
+++ b/contrib/bloom/blscan.c
@@ -29,7 +29,7 @@ blbeginscan(Relation r, int nkeys, int norderbys)
scan = RelationGetIndexScan(r, nkeys, norderbys);
- so = (BloomScanOpaque) palloc(sizeof(BloomScanOpaqueData));
+ so = (BloomScanOpaque) palloc_object(BloomScanOpaqueData);
initBloomState(&so->state, scan->indexRelation);
so->sign = NULL;
@@ -86,7 +86,7 @@ blgetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
/* New search: have to calculate search signature */
ScanKey skey = scan->keyData;
- so->sign = palloc0(sizeof(BloomSignatureWord) * so->state.opts.bloomLength);
+ so->sign = palloc0_array(BloomSignatureWord, so->state.opts.bloomLength);
for (i = 0; i < scan->numberOfKeys; i++)
{
diff --git a/contrib/bloom/blutils.c b/contrib/bloom/blutils.c
index bbeefc3a75b..7a468b4a173 100644
--- a/contrib/bloom/blutils.c
+++ b/contrib/bloom/blutils.c
@@ -86,7 +86,7 @@ makeDefaultBloomOptions(void)
BloomOptions *opts;
int i;
- opts = (BloomOptions *) palloc0(sizeof(BloomOptions));
+ opts = palloc0_object(BloomOptions);
/* Convert DEFAULT_BLOOM_LENGTH from # of bits to # of words */
opts->bloomLength = (DEFAULT_BLOOM_LENGTH + SIGNWORDBITS - 1) / SIGNWORDBITS;
for (i = 0; i < INDEX_MAX_KEYS; i++)
diff --git a/contrib/bloom/blvacuum.c b/contrib/bloom/blvacuum.c
index 1485a6a703f..e68a9008f56 100644
--- a/contrib/bloom/blvacuum.c
+++ b/contrib/bloom/blvacuum.c
@@ -42,7 +42,7 @@ blbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
GenericXLogState *gxlogState;
if (stats == NULL)
- stats = (IndexBulkDeleteResult *) palloc0(sizeof(IndexBulkDeleteResult));
+ stats = palloc0_object(IndexBulkDeleteResult);
initBloomState(&state, index);
@@ -171,7 +171,7 @@ blvacuumcleanup(IndexVacuumInfo *info, IndexBulkDeleteResult *stats)
return stats;
if (stats == NULL)
- stats = (IndexBulkDeleteResult *) palloc0(sizeof(IndexBulkDeleteResult));
+ stats = palloc0_object(IndexBulkDeleteResult);
/*
* Iterate over the pages: insert deleted pages into FSM and collect
diff --git a/contrib/btree_gin/btree_gin.c b/contrib/btree_gin/btree_gin.c
index 966b76e591b..afb8b3820af 100644
--- a/contrib/btree_gin/btree_gin.c
+++ b/contrib/btree_gin/btree_gin.c
@@ -52,7 +52,7 @@ gin_btree_extract_value(FunctionCallInfo fcinfo, bool is_varlena)
{
Datum datum = PG_GETARG_DATUM(0);
int32 *nentries = (int32 *) PG_GETARG_POINTER(1);
- Datum *entries = (Datum *) palloc(sizeof(Datum));
+ Datum *entries = palloc_object(Datum);
/* Ensure that values stored in the index are not toasted */
if (is_varlena)
@@ -75,9 +75,9 @@ gin_btree_extract_query(FunctionCallInfo fcinfo,
StrategyNumber strategy = PG_GETARG_UINT16(2);
bool **partialmatch = (bool **) PG_GETARG_POINTER(3);
Pointer **extra_data = (Pointer **) PG_GETARG_POINTER(4);
- Datum *entries = (Datum *) palloc(sizeof(Datum));
- QueryInfo *data = (QueryInfo *) palloc(sizeof(QueryInfo));
- bool *ptr_partialmatch = (bool *) palloc(sizeof(bool));
+ Datum *entries = palloc_object(Datum);
+ QueryInfo *data = palloc_object(QueryInfo);
+ bool *ptr_partialmatch = palloc_object(bool);
int btree_strat,
rhs_code;
@@ -140,7 +140,7 @@ gin_btree_extract_query(FunctionCallInfo fcinfo,
data->orig_datum = datum;
data->entry_datum = entries[0];
data->typecmp = cmp_fns[rhs_code];
- *extra_data = (Pointer *) palloc(sizeof(Pointer));
+ *extra_data = palloc_object(Pointer);
**extra_data = (Pointer) data;
PG_RETURN_POINTER(entries);
@@ -579,7 +579,7 @@ GIN_SUPPORT(time, leftmostvalue_time, time_rhs_is_varlena, NULL, time_cmp_fns)
static Datum
leftmostvalue_timetz(void)
{
- TimeTzADT *v = palloc(sizeof(TimeTzADT));
+ TimeTzADT *v = palloc_object(TimeTzADT);
v->time = 0;
v->zone = -24 * 3600; /* XXX is that true? */
@@ -639,7 +639,7 @@ GIN_SUPPORT(date, leftmostvalue_date, date_rhs_is_varlena, date_cvt_fns, date_cm
static Datum
leftmostvalue_interval(void)
{
- Interval *v = palloc(sizeof(Interval));
+ Interval *v = palloc_object(Interval);
INTERVAL_NOBEGIN(v);
@@ -657,7 +657,7 @@ GIN_SUPPORT(interval, leftmostvalue_interval, interval_rhs_is_varlena, NULL, int
static Datum
leftmostvalue_macaddr(void)
{
- macaddr *v = palloc0(sizeof(macaddr));
+ macaddr *v = palloc0_object(macaddr);
return MacaddrPGetDatum(v);
}
@@ -673,7 +673,7 @@ GIN_SUPPORT(macaddr, leftmostvalue_macaddr, macaddr_rhs_is_varlena, NULL, macadd
static Datum
leftmostvalue_macaddr8(void)
{
- macaddr8 *v = palloc0(sizeof(macaddr8));
+ macaddr8 *v = palloc0_object(macaddr8);
return Macaddr8PGetDatum(v);
}
@@ -910,7 +910,7 @@ leftmostvalue_uuid(void)
* palloc0 will create the UUID with all zeroes:
* "00000000-0000-0000-0000-000000000000"
*/
- pg_uuid_t *retval = (pg_uuid_t *) palloc0(sizeof(pg_uuid_t));
+ pg_uuid_t *retval = palloc0_object(pg_uuid_t);
return UUIDPGetDatum(retval);
}
diff --git a/contrib/btree_gist/btree_inet.c b/contrib/btree_gist/btree_inet.c
index 52bf3e2446e..e726375f61d 100644
--- a/contrib/btree_gist/btree_inet.c
+++ b/contrib/btree_gist/btree_inet.c
@@ -97,10 +97,10 @@ gbt_inet_compress(PG_FUNCTION_ARGS)
if (entry->leafkey)
{
- inetKEY *r = (inetKEY *) palloc(sizeof(inetKEY));
+ inetKEY *r = palloc_object(inetKEY);
bool failure = false;
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
r->lower = convert_network_to_scalar(entry->key, INETOID, &failure);
Assert(!failure);
r->upper = r->lower;
diff --git a/contrib/btree_gist/btree_interval.c b/contrib/btree_gist/btree_interval.c
index 19eefc60cde..1fc27f60384 100644
--- a/contrib/btree_gist/btree_interval.c
+++ b/contrib/btree_gist/btree_interval.c
@@ -150,7 +150,7 @@ gbt_intv_compress(PG_FUNCTION_ARGS)
{
char *r = (char *) palloc(2 * INTERVALSIZE);
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
if (entry->leafkey)
{
@@ -190,10 +190,10 @@ gbt_intv_decompress(PG_FUNCTION_ARGS)
if (INTERVALSIZE != sizeof(Interval))
{
- intvKEY *r = palloc(sizeof(intvKEY));
+ intvKEY *r = palloc_object(intvKEY);
char *key = DatumGetPointer(entry->key);
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
memcpy(&r->lower, key, INTERVALSIZE);
memcpy(&r->upper, key + INTERVALSIZE, INTERVALSIZE);
diff --git a/contrib/btree_gist/btree_time.c b/contrib/btree_gist/btree_time.c
index 9483846c473..e744f1be017 100644
--- a/contrib/btree_gist/btree_time.c
+++ b/contrib/btree_gist/btree_time.c
@@ -162,11 +162,11 @@ gbt_timetz_compress(PG_FUNCTION_ARGS)
if (entry->leafkey)
{
- timeKEY *r = (timeKEY *) palloc(sizeof(timeKEY));
+ timeKEY *r = palloc_object(timeKEY);
TimeTzADT *tz = DatumGetTimeTzADTP(entry->key);
TimeADT tmp;
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
/* We are using the time + zone only to compress */
tmp = tz->time + (tz->zone * INT64CONST(1000000));
diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c
index b7bbae2f4d6..3b163a729cb 100644
--- a/contrib/btree_gist/btree_ts.c
+++ b/contrib/btree_gist/btree_ts.c
@@ -146,7 +146,7 @@ ts_dist(PG_FUNCTION_ARGS)
if (TIMESTAMP_NOT_FINITE(a) || TIMESTAMP_NOT_FINITE(b))
{
- Interval *p = palloc(sizeof(Interval));
+ Interval *p = palloc_object(Interval);
p->day = INT_MAX;
p->month = INT_MAX;
@@ -170,7 +170,7 @@ tstz_dist(PG_FUNCTION_ARGS)
if (TIMESTAMP_NOT_FINITE(a) || TIMESTAMP_NOT_FINITE(b))
{
- Interval *p = palloc(sizeof(Interval));
+ Interval *p = palloc_object(Interval);
p->day = INT_MAX;
p->month = INT_MAX;
@@ -212,13 +212,13 @@ gbt_tstz_compress(PG_FUNCTION_ARGS)
if (entry->leafkey)
{
- tsKEY *r = (tsKEY *) palloc(sizeof(tsKEY));
+ tsKEY *r = palloc_object(tsKEY);
TimestampTz ts = DatumGetTimestampTz(entry->key);
Timestamp gmt;
gmt = tstz_to_ts_gmt(ts);
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
r->lower = r->upper = gmt;
gistentryinit(*retval, PointerGetDatum(r),
entry->rel, entry->page,
diff --git a/contrib/btree_gist/btree_utils_num.c b/contrib/btree_gist/btree_utils_num.c
index 9ba97f96fbf..51c8836f27a 100644
--- a/contrib/btree_gist/btree_utils_num.c
+++ b/contrib/btree_gist/btree_utils_num.c
@@ -89,7 +89,7 @@ gbt_num_compress(GISTENTRY *entry, const gbtree_ninfo *tinfo)
memcpy(&r[0], leaf, tinfo->size);
memcpy(&r[tinfo->size], leaf, tinfo->size);
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page,
entry->offset, false);
}
@@ -156,7 +156,7 @@ gbt_num_fetch(GISTENTRY *entry, const gbtree_ninfo *tinfo)
datum = entry->key;
}
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, datum, entry->rel, entry->page, entry->offset,
false);
return retval;
diff --git a/contrib/btree_gist/btree_utils_var.c b/contrib/btree_gist/btree_utils_var.c
index fb466e5aa32..7fbea0cfb7b 100644
--- a/contrib/btree_gist/btree_utils_var.c
+++ b/contrib/btree_gist/btree_utils_var.c
@@ -40,7 +40,7 @@ gbt_var_decompress(PG_FUNCTION_ARGS)
if (key != (GBT_VARKEY *) DatumGetPointer(entry->key))
{
- GISTENTRY *retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ GISTENTRY *retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(key),
entry->rel, entry->page,
@@ -289,7 +289,7 @@ gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo *tinfo)
r = gbt_var_key_from_datum(leaf);
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(r),
entry->rel, entry->page,
entry->offset, true);
@@ -309,7 +309,7 @@ gbt_var_fetch(PG_FUNCTION_ARGS)
GBT_VARKEY_R r = gbt_var_key_readable(key);
GISTENTRY *retval;
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(r.lower),
entry->rel, entry->page,
entry->offset, true);
diff --git a/contrib/btree_gist/btree_uuid.c b/contrib/btree_gist/btree_uuid.c
index 07f304f39f1..1091af222d1 100644
--- a/contrib/btree_gist/btree_uuid.c
+++ b/contrib/btree_gist/btree_uuid.c
@@ -108,7 +108,7 @@ gbt_uuid_compress(PG_FUNCTION_ARGS)
char *r = (char *) palloc(2 * UUID_LEN);
pg_uuid_t *key = DatumGetUUIDP(entry->key);
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
memcpy(r, key, UUID_LEN);
memcpy(r + UUID_LEN, key, UUID_LEN);
diff --git a/contrib/cube/cube.c b/contrib/cube/cube.c
index aa47e141f81..3600457cbc0 100644
--- a/contrib/cube/cube.c
+++ b/contrib/cube/cube.c
@@ -471,7 +471,7 @@ g_cube_decompress(PG_FUNCTION_ARGS)
if (key != DatumGetNDBOXP(entry->key))
{
- GISTENTRY *retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ GISTENTRY *retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(key),
entry->rel, entry->page,
diff --git a/contrib/dict_int/dict_int.c b/contrib/dict_int/dict_int.c
index bdad52d2028..5d9523a1a63 100644
--- a/contrib/dict_int/dict_int.c
+++ b/contrib/dict_int/dict_int.c
@@ -38,7 +38,7 @@ dintdict_init(PG_FUNCTION_ARGS)
DictInt *d;
ListCell *l;
- d = (DictInt *) palloc0(sizeof(DictInt));
+ d = palloc0_object(DictInt);
d->maxlen = 6;
d->rejectlong = false;
d->absval = false;
@@ -83,7 +83,7 @@ dintdict_lexize(PG_FUNCTION_ARGS)
char *in = (char *) PG_GETARG_POINTER(1);
int len = PG_GETARG_INT32(2);
char *txt;
- TSLexeme *res = palloc0(sizeof(TSLexeme) * 2);
+ TSLexeme *res = palloc0_array(TSLexeme, 2);
res[1].lexeme = NULL;
diff --git a/contrib/dict_xsyn/dict_xsyn.c b/contrib/dict_xsyn/dict_xsyn.c
index 1ec5285d6d1..bbb2fd850fd 100644
--- a/contrib/dict_xsyn/dict_xsyn.c
+++ b/contrib/dict_xsyn/dict_xsyn.c
@@ -109,9 +109,9 @@ read_dictionary(DictSyn *d, const char *filename)
{
d->len = (d->len > 0) ? 2 * d->len : 16;
if (d->syn)
- d->syn = (Syn *) repalloc(d->syn, sizeof(Syn) * d->len);
+ d->syn = repalloc_array(d->syn, Syn, d->len);
else
- d->syn = (Syn *) palloc(sizeof(Syn) * d->len);
+ d->syn = palloc_array(Syn, d->len);
}
/* Save first word only if we will match it */
@@ -150,7 +150,7 @@ dxsyn_init(PG_FUNCTION_ARGS)
ListCell *l;
char *filename = NULL;
- d = (DictSyn *) palloc0(sizeof(DictSyn));
+ d = palloc0_object(DictSyn);
d->len = 0;
d->syn = NULL;
d->matchorig = true;
@@ -235,7 +235,7 @@ dxsyn_lexize(PG_FUNCTION_ARGS)
char *end;
int nsyns = 0;
- res = palloc(sizeof(TSLexeme));
+ res = palloc_object(TSLexeme);
pos = value;
while ((syn = find_word(pos, &end)) != NULL)
diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 70564a68b13..e9cda3c47d1 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -531,7 +531,7 @@ fileGetForeignRelSize(PlannerInfo *root,
* we might as well get everything and not need to re-fetch it later in
* planning.
*/
- fdw_private = (FileFdwPlanState *) palloc(sizeof(FileFdwPlanState));
+ fdw_private = palloc_object(FileFdwPlanState);
fileGetOptions(foreigntableid,
&fdw_private->filename,
&fdw_private->is_program,
@@ -712,7 +712,7 @@ fileBeginForeignScan(ForeignScanState *node, int eflags)
* Save state in node->fdw_state. We must save enough information to call
* BeginCopyFrom() again.
*/
- festate = (FileFdwExecutionState *) palloc(sizeof(FileFdwExecutionState));
+ festate = palloc_object(FileFdwExecutionState);
festate->filename = filename;
festate->is_program = is_program;
festate->options = options;
diff --git a/contrib/hstore/hstore_gist.c b/contrib/hstore/hstore_gist.c
index 69515dc3d3f..36825ef867b 100644
--- a/contrib/hstore/hstore_gist.c
+++ b/contrib/hstore/hstore_gist.c
@@ -175,7 +175,7 @@ ghstore_compress(PG_FUNCTION_ARGS)
}
}
- retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(res),
entry->rel, entry->page,
entry->offset,
@@ -195,7 +195,7 @@ ghstore_compress(PG_FUNCTION_ARGS)
res = ghstore_alloc(true, siglen, NULL);
- retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(res),
entry->rel, entry->page,
entry->offset,
@@ -429,7 +429,7 @@ ghstore_picksplit(PG_FUNCTION_ARGS)
maxoff = OffsetNumberNext(maxoff);
/* sort before ... */
- costvector = (SPLITCOST *) palloc(sizeof(SPLITCOST) * maxoff);
+ costvector = palloc_array(SPLITCOST, maxoff);
for (j = FirstOffsetNumber; j <= maxoff; j = OffsetNumberNext(j))
{
costvector[j - 1].pos = j;
diff --git a/contrib/hstore/hstore_io.c b/contrib/hstore/hstore_io.c
index 9c53877c4a5..6b01f27c5a4 100644
--- a/contrib/hstore/hstore_io.c
+++ b/contrib/hstore/hstore_io.c
@@ -221,7 +221,7 @@ parse_hstore(HSParser *state)
bool escaped = false;
state->plen = 16;
- state->pairs = (Pairs *) palloc(sizeof(Pairs) * state->plen);
+ state->pairs = palloc_array(Pairs, state->plen);
state->pcur = 0;
state->ptr = state->begin;
state->word = NULL;
diff --git a/contrib/intarray/_int_bool.c b/contrib/intarray/_int_bool.c
index 2b2c3f4029e..f45df86d60c 100644
--- a/contrib/intarray/_int_bool.c
+++ b/contrib/intarray/_int_bool.c
@@ -135,7 +135,7 @@ gettoken(WORKSTATE *state, int32 *val)
static void
pushquery(WORKSTATE *state, int32 type, int32 val)
{
- NODE *tmp = (NODE *) palloc(sizeof(NODE));
+ NODE *tmp = palloc_object(NODE);
tmp->type = type;
tmp->val = val;
@@ -346,7 +346,7 @@ gin_bool_consistent(QUERYTYPE *query, bool *check)
* extraction code in ginint4_queryextract.
*/
gcv.first = items;
- gcv.mapped_check = (bool *) palloc(sizeof(bool) * query->size);
+ gcv.mapped_check = palloc_array(bool, query->size);
for (i = 0; i < query->size; i++)
{
if (items[i].type == VAL)
@@ -613,7 +613,7 @@ infix(INFIX *in, bool first)
nrm.curpol = in->curpol;
nrm.buflen = 16;
- nrm.cur = nrm.buf = (char *) palloc(sizeof(char) * nrm.buflen);
+ nrm.cur = nrm.buf = palloc_array(char, nrm.buflen);
/* get right operand */
infix(&nrm, false);
@@ -651,7 +651,7 @@ bqarr_out(PG_FUNCTION_ARGS)
nrm.curpol = GETQUERY(query) + query->size - 1;
nrm.buflen = 32;
- nrm.cur = nrm.buf = (char *) palloc(sizeof(char) * nrm.buflen);
+ nrm.cur = nrm.buf = palloc_array(char, nrm.buflen);
*(nrm.cur) = '\0';
infix(&nrm, true);
diff --git a/contrib/intarray/_int_gin.c b/contrib/intarray/_int_gin.c
index b7958d8eca5..c60616c3f77 100644
--- a/contrib/intarray/_int_gin.c
+++ b/contrib/intarray/_int_gin.c
@@ -42,7 +42,7 @@ ginint4_queryextract(PG_FUNCTION_ARGS)
/*
* Extract all the VAL items as things we want GIN to check for.
*/
- res = (Datum *) palloc(sizeof(Datum) * query->size);
+ res = palloc_array(Datum, query->size);
*nentries = 0;
for (i = 0; i < query->size; i++)
@@ -65,7 +65,7 @@ ginint4_queryextract(PG_FUNCTION_ARGS)
int32 *arr;
int32 i;
- res = (Datum *) palloc(sizeof(Datum) * (*nentries));
+ res = palloc_array(Datum, *nentries);
arr = ARRPTR(query);
for (i = 0; i < *nentries; i++)
diff --git a/contrib/intarray/_int_gist.c b/contrib/intarray/_int_gist.c
index a09b7fa812c..90cf11c01a5 100644
--- a/contrib/intarray/_int_gist.c
+++ b/contrib/intarray/_int_gist.c
@@ -186,7 +186,7 @@ g_int_compress(PG_FUNCTION_ARGS)
errmsg("input array is too big (%d maximum allowed, %d current), use gist__intbig_ops opclass instead",
2 * num_ranges - 1, ARRNELEMS(r))));
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(r),
entry->rel, entry->page, entry->offset, false);
@@ -276,7 +276,7 @@ g_int_compress(PG_FUNCTION_ARGS)
errmsg("data is too sparse, recreate index using gist__intbig_ops opclass instead")));
r = resize_intArrayType(r, len);
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(r),
entry->rel, entry->page, entry->offset, false);
PG_RETURN_POINTER(retval);
@@ -306,7 +306,7 @@ g_int_decompress(PG_FUNCTION_ARGS)
{
if (in != (ArrayType *) DatumGetPointer(entry->key))
{
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(in),
entry->rel, entry->page, entry->offset, false);
PG_RETURN_POINTER(retval);
@@ -321,7 +321,7 @@ g_int_decompress(PG_FUNCTION_ARGS)
{ /* not compressed value */
if (in != (ArrayType *) DatumGetPointer(entry->key))
{
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(in),
entry->rel, entry->page, entry->offset, false);
@@ -350,7 +350,7 @@ g_int_decompress(PG_FUNCTION_ARGS)
if (in != (ArrayType *) DatumGetPointer(entry->key))
pfree(in);
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(r),
entry->rel, entry->page, entry->offset, false);
@@ -535,7 +535,7 @@ g_int_picksplit(PG_FUNCTION_ARGS)
/*
* sort entries
*/
- costvector = (SPLITCOST *) palloc(sizeof(SPLITCOST) * maxoff);
+ costvector = palloc_array(SPLITCOST, maxoff);
for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i))
{
costvector[i - 1].pos = i;
diff --git a/contrib/intarray/_intbig_gist.c b/contrib/intarray/_intbig_gist.c
index 9699fbf3b4f..0afa8a73b68 100644
--- a/contrib/intarray/_intbig_gist.c
+++ b/contrib/intarray/_intbig_gist.c
@@ -174,7 +174,7 @@ g_intbig_compress(PG_FUNCTION_ARGS)
ptr++;
}
- retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(res),
entry->rel, entry->page,
entry->offset, false);
@@ -195,7 +195,7 @@ g_intbig_compress(PG_FUNCTION_ARGS)
}
res = _intbig_alloc(true, siglen, sign);
- retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(res),
entry->rel, entry->page,
entry->offset, false);
@@ -385,7 +385,7 @@ g_intbig_picksplit(PG_FUNCTION_ARGS)
maxoff = OffsetNumberNext(maxoff);
/* sort before ... */
- costvector = (SPLITCOST *) palloc(sizeof(SPLITCOST) * maxoff);
+ costvector = palloc_array(SPLITCOST, maxoff);
for (j = FirstOffsetNumber; j <= maxoff; j = OffsetNumberNext(j))
{
costvector[j - 1].pos = j;
diff --git a/contrib/jsonb_plperl/jsonb_plperl.c b/contrib/jsonb_plperl/jsonb_plperl.c
index c02e2d41af1..a708d9fd82e 100644
--- a/contrib/jsonb_plperl/jsonb_plperl.c
+++ b/contrib/jsonb_plperl/jsonb_plperl.c
@@ -266,7 +266,7 @@ SV_to_JsonbValue(SV *in, JsonbParseState **jsonb_state, bool is_elem)
/* Push result into 'jsonb_state' unless it is a raw scalar. */
return *jsonb_state
? pushJsonbValue(jsonb_state, is_elem ? WJB_ELEM : WJB_VALUE, &out)
- : memcpy(palloc(sizeof(JsonbValue)), &out, sizeof(JsonbValue));
+ : memcpy(palloc_object(JsonbValue), &out, sizeof(JsonbValue));
}
diff --git a/contrib/jsonb_plpython/jsonb_plpython.c b/contrib/jsonb_plpython/jsonb_plpython.c
index 9383615abbf..2892e88c58b 100644
--- a/contrib/jsonb_plpython/jsonb_plpython.c
+++ b/contrib/jsonb_plpython/jsonb_plpython.c
@@ -419,7 +419,7 @@ PLyObject_ToJsonbValue(PyObject *obj, JsonbParseState **jsonb_state, bool is_ele
return PLyMapping_ToJsonbValue(obj, jsonb_state);
}
- out = palloc(sizeof(JsonbValue));
+ out = palloc_object(JsonbValue);
if (obj == Py_None)
out->type = jbvNull;
diff --git a/contrib/ltree/_ltree_gist.c b/contrib/ltree/_ltree_gist.c
index 30d516e60bc..ceb92a6304d 100644
--- a/contrib/ltree/_ltree_gist.c
+++ b/contrib/ltree/_ltree_gist.c
@@ -79,7 +79,7 @@ _ltree_compress(PG_FUNCTION_ARGS)
item = NEXTVAL(item);
}
- retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(key),
entry->rel, entry->page,
entry->offset, false);
@@ -97,7 +97,7 @@ _ltree_compress(PG_FUNCTION_ARGS)
}
key = ltree_gist_alloc(true, sign, siglen, NULL, NULL);
- retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(key),
entry->rel, entry->page,
entry->offset, false);
@@ -310,7 +310,7 @@ _ltree_picksplit(PG_FUNCTION_ARGS)
maxoff = OffsetNumberNext(maxoff);
/* sort before ... */
- costvector = (SPLITCOST *) palloc(sizeof(SPLITCOST) * maxoff);
+ costvector = palloc_array(SPLITCOST, maxoff);
for (j = FirstOffsetNumber; j <= maxoff; j = OffsetNumberNext(j))
{
costvector[j - 1].pos = j;
diff --git a/contrib/ltree/_ltree_op.c b/contrib/ltree/_ltree_op.c
index b4a8097328d..4d54ad34bb6 100644
--- a/contrib/ltree/_ltree_op.c
+++ b/contrib/ltree/_ltree_op.c
@@ -307,7 +307,7 @@ _lca(PG_FUNCTION_ARGS)
(errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED),
errmsg("array must not contain nulls")));
- a = (ltree **) palloc(sizeof(ltree *) * num);
+ a = palloc_array(ltree *, num);
while (num > 0)
{
num--;
diff --git a/contrib/ltree/ltree_gist.c b/contrib/ltree/ltree_gist.c
index 932f69bff2d..bb7f4634722 100644
--- a/contrib/ltree/ltree_gist.c
+++ b/contrib/ltree/ltree_gist.c
@@ -101,7 +101,7 @@ ltree_compress(PG_FUNCTION_ARGS)
ltree *val = DatumGetLtreeP(entry->key);
ltree_gist *key = ltree_gist_alloc(false, NULL, 0, val, 0);
- retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(key),
entry->rel, entry->page,
entry->offset, false);
@@ -117,7 +117,7 @@ ltree_decompress(PG_FUNCTION_ARGS)
if (PointerGetDatum(key) != entry->key)
{
- GISTENTRY *retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ GISTENTRY *retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(key),
entry->rel, entry->page,
@@ -318,7 +318,7 @@ ltree_picksplit(PG_FUNCTION_ARGS)
v->spl_right = (OffsetNumber *) palloc(nbytes);
v->spl_nleft = 0;
v->spl_nright = 0;
- array = (RIX *) palloc(sizeof(RIX) * (maxoff + 1));
+ array = palloc_array(RIX, maxoff + 1);
/* copy the data into RIXes, and sort the RIXes */
for (j = FirstOffsetNumber; j <= maxoff; j = OffsetNumberNext(j))
diff --git a/contrib/ltree/ltree_io.c b/contrib/ltree/ltree_io.c
index b54a15d6c68..59c4462df80 100644
--- a/contrib/ltree/ltree_io.c
+++ b/contrib/ltree/ltree_io.c
@@ -65,7 +65,7 @@ parse_ltree(const char *buf, struct Node *escontext)
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
errmsg("number of ltree labels (%d) exceeds the maximum allowed (%d)",
num + 1, LTREE_MAX_LEVELS)));
- list = lptr = (nodeitem *) palloc(sizeof(nodeitem) * (num + 1));
+ list = lptr = palloc_array(nodeitem, num + 1);
ptr = buf;
while (*ptr)
{
@@ -318,14 +318,14 @@ parse_lquery(const char *buf, struct Node *escontext)
case LQPRS_WAITLEVEL:
if (ISLABEL(ptr))
{
- GETVAR(curqlevel) = lptr = (nodeitem *) palloc0(sizeof(nodeitem) * (numOR + 1));
+ GETVAR(curqlevel) = lptr = palloc0_array(nodeitem, numOR + 1);
lptr->start = ptr;
state = LQPRS_WAITDELIM;
curqlevel->numvar = 1;
}
else if (t_iseq(ptr, '!'))
{
- GETVAR(curqlevel) = lptr = (nodeitem *) palloc0(sizeof(nodeitem) * (numOR + 1));
+ GETVAR(curqlevel) = lptr = palloc0_array(nodeitem, numOR + 1);
lptr->start = ptr + 1;
lptr->wlen = -1; /* compensate for counting ! below */
state = LQPRS_WAITDELIM;
diff --git a/contrib/ltree/ltree_op.c b/contrib/ltree/ltree_op.c
index e3a84db37ff..c1fc77fc804 100644
--- a/contrib/ltree/ltree_op.c
+++ b/contrib/ltree/ltree_op.c
@@ -566,7 +566,7 @@ lca(PG_FUNCTION_ARGS)
ltree **a,
*res;
- a = (ltree **) palloc(sizeof(ltree *) * fcinfo->nargs);
+ a = palloc_array(ltree *, fcinfo->nargs);
for (i = 0; i < fcinfo->nargs; i++)
a[i] = PG_GETARG_LTREE_P(i);
res = lca_inner(a, (int) fcinfo->nargs);
diff --git a/contrib/ltree/ltxtquery_io.c b/contrib/ltree/ltxtquery_io.c
index ec331607793..3a2aa223c3e 100644
--- a/contrib/ltree/ltxtquery_io.c
+++ b/contrib/ltree/ltxtquery_io.c
@@ -154,7 +154,7 @@ gettoken_query(QPRS_STATE *state, int32 *val, int32 *lenval, char **strval, uint
static bool
pushquery(QPRS_STATE *state, int32 type, int32 val, int32 distance, int32 lenval, uint16 flag)
{
- NODE *tmp = (NODE *) palloc(sizeof(NODE));
+ NODE *tmp = palloc_object(NODE);
tmp->type = type;
tmp->val = val;
@@ -543,7 +543,7 @@ infix(INFIX *in, bool first)
nrm.curpol = in->curpol;
nrm.op = in->op;
nrm.buflen = 16;
- nrm.cur = nrm.buf = (char *) palloc(sizeof(char) * nrm.buflen);
+ nrm.cur = nrm.buf = palloc_array(char, nrm.buflen);
/* get right operand */
infix(&nrm, false);
@@ -582,7 +582,7 @@ ltxtq_out(PG_FUNCTION_ARGS)
nrm.curpol = GETQUERY(query);
nrm.buflen = 32;
- nrm.cur = nrm.buf = (char *) palloc(sizeof(char) * nrm.buflen);
+ nrm.cur = nrm.buf = palloc_array(char, nrm.buflen);
*(nrm.cur) = '\0';
nrm.op = GETOPERAND(query);
infix(&nrm, true);
@@ -615,7 +615,7 @@ ltxtq_send(PG_FUNCTION_ARGS)
nrm.curpol = GETQUERY(query);
nrm.buflen = 32;
- nrm.cur = nrm.buf = (char *) palloc(sizeof(char) * nrm.buflen);
+ nrm.cur = nrm.buf = palloc_array(char, nrm.buflen);
*(nrm.cur) = '\0';
nrm.op = GETOPERAND(query);
infix(&nrm, true);
diff --git a/contrib/pageinspect/brinfuncs.c b/contrib/pageinspect/brinfuncs.c
index 990c965aa92..b7dcc8ac8a9 100644
--- a/contrib/pageinspect/brinfuncs.c
+++ b/contrib/pageinspect/brinfuncs.c
@@ -186,7 +186,7 @@ brin_page_items(PG_FUNCTION_ARGS)
* Initialize output functions for all indexed datatypes; simplifies
* calling them later.
*/
- columns = palloc(sizeof(brin_column_state *) * RelationGetDescr(indexRel)->natts);
+ columns = palloc_array(brin_column_state *, RelationGetDescr(indexRel)->natts);
for (attno = 1; attno <= bdesc->bd_tupdesc->natts; attno++)
{
Oid output;
diff --git a/contrib/pageinspect/btreefuncs.c b/contrib/pageinspect/btreefuncs.c
index 2e67c9adf5a..7ff6dc08934 100644
--- a/contrib/pageinspect/btreefuncs.c
+++ b/contrib/pageinspect/btreefuncs.c
@@ -379,7 +379,7 @@ bt_multi_page_stats(PG_FUNCTION_ARGS)
/* Save arguments for reuse */
mctx = MemoryContextSwitchTo(fctx->multi_call_memory_ctx);
- uargs = palloc(sizeof(ua_page_stats));
+ uargs = palloc_object(ua_page_stats);
uargs->relid = RelationGetRelid(rel);
uargs->blkno = blkno;
@@ -660,7 +660,7 @@ bt_page_items_internal(PG_FUNCTION_ARGS, enum pageinspect_version ext_version)
*/
mctx = MemoryContextSwitchTo(fctx->multi_call_memory_ctx);
- uargs = palloc(sizeof(ua_page_items));
+ uargs = palloc_object(ua_page_items);
uargs->page = palloc(BLCKSZ);
memcpy(uargs->page, BufferGetPage(buffer), BLCKSZ);
@@ -752,7 +752,7 @@ bt_page_items_bytea(PG_FUNCTION_ARGS)
fctx = SRF_FIRSTCALL_INIT();
mctx = MemoryContextSwitchTo(fctx->multi_call_memory_ctx);
- uargs = palloc(sizeof(ua_page_items));
+ uargs = palloc_object(ua_page_items);
uargs->page = get_page_from_raw(raw_page);
diff --git a/contrib/pageinspect/ginfuncs.c b/contrib/pageinspect/ginfuncs.c
index 09a90957081..f6168d8e895 100644
--- a/contrib/pageinspect/ginfuncs.c
+++ b/contrib/pageinspect/ginfuncs.c
@@ -222,7 +222,7 @@ gin_leafpage_items(PG_FUNCTION_ARGS)
opaq->flags,
(GIN_DATA | GIN_LEAF | GIN_COMPRESSED))));
- inter_call_data = palloc(sizeof(gin_leafpage_items_state));
+ inter_call_data = palloc_object(gin_leafpage_items_state);
/* Build a tuple descriptor for our result type */
if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)
diff --git a/contrib/pageinspect/hashfuncs.c b/contrib/pageinspect/hashfuncs.c
index ca7f1f6e741..0e898889fa5 100644
--- a/contrib/pageinspect/hashfuncs.c
+++ b/contrib/pageinspect/hashfuncs.c
@@ -325,7 +325,7 @@ hash_page_items(PG_FUNCTION_ARGS)
page = verify_hash_page(raw_page, LH_BUCKET_PAGE | LH_OVERFLOW_PAGE);
- uargs = palloc(sizeof(struct user_args));
+ uargs = palloc_object(struct user_args);
uargs->page = page;
diff --git a/contrib/pageinspect/heapfuncs.c b/contrib/pageinspect/heapfuncs.c
index c13f07655c4..ca7bffdbea5 100644
--- a/contrib/pageinspect/heapfuncs.c
+++ b/contrib/pageinspect/heapfuncs.c
@@ -154,7 +154,7 @@ heap_page_items(PG_FUNCTION_ARGS)
fctx = SRF_FIRSTCALL_INIT();
mctx = MemoryContextSwitchTo(fctx->multi_call_memory_ctx);
- inter_call_data = palloc(sizeof(heap_page_items_state));
+ inter_call_data = palloc_object(heap_page_items_state);
/* Build a tuple descriptor for our result type */
if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)
@@ -553,7 +553,7 @@ heap_tuple_infomask_flags(PG_FUNCTION_ARGS)
}
/* build set of raw flags */
- flags = (Datum *) palloc0(sizeof(Datum) * bitcnt);
+ flags = palloc0_array(Datum, bitcnt);
/* decode t_infomask */
if ((t_infomask & HEAP_HASNULL) != 0)
diff --git a/contrib/pg_overexplain/pg_overexplain.c b/contrib/pg_overexplain/pg_overexplain.c
index bd70b6d9d5e..fcdc17012da 100644
--- a/contrib/pg_overexplain/pg_overexplain.c
+++ b/contrib/pg_overexplain/pg_overexplain.c
@@ -95,7 +95,7 @@ overexplain_ensure_options(ExplainState *es)
if (options == NULL)
{
- options = palloc0(sizeof(overexplain_options));
+ options = palloc0_object(overexplain_options);
SetExplainExtensionState(es, es_extension_id, options);
}
diff --git a/contrib/pg_trgm/trgm_gin.c b/contrib/pg_trgm/trgm_gin.c
index 2e49f31c9d6..66ff6adde99 100644
--- a/contrib/pg_trgm/trgm_gin.c
+++ b/contrib/pg_trgm/trgm_gin.c
@@ -51,7 +51,7 @@ gin_extract_value_trgm(PG_FUNCTION_ARGS)
int32 i;
*nentries = trglen;
- entries = (Datum *) palloc(sizeof(Datum) * trglen);
+ entries = palloc_array(Datum, trglen);
ptr = GETARR(trg);
for (i = 0; i < trglen; i++)
@@ -123,7 +123,7 @@ gin_extract_query_trgm(PG_FUNCTION_ARGS)
* Pointers, but we just put the same value in each element.
*/
trglen = ARRNELEM(trg);
- *extra_data = (Pointer *) palloc(sizeof(Pointer) * trglen);
+ *extra_data = palloc_array(Pointer, trglen);
for (i = 0; i < trglen; i++)
(*extra_data)[i] = (Pointer) graph;
}
@@ -146,7 +146,7 @@ gin_extract_query_trgm(PG_FUNCTION_ARGS)
if (trglen > 0)
{
- entries = (Datum *) palloc(sizeof(Datum) * trglen);
+ entries = palloc_array(Datum, trglen);
ptr = GETARR(trg);
for (i = 0; i < trglen; i++)
{
@@ -338,7 +338,7 @@ gin_trgm_triconsistent(PG_FUNCTION_ARGS)
* function, promoting all GIN_MAYBE keys to GIN_TRUE will
* give a conservative result.
*/
- boolcheck = (bool *) palloc(sizeof(bool) * nkeys);
+ boolcheck = palloc_array(bool, nkeys);
for (i = 0; i < nkeys; i++)
boolcheck[i] = (check[i] != GIN_FALSE);
if (!trigramsMatchGraph(extra_data[0], boolcheck))
diff --git a/contrib/pg_trgm/trgm_gist.c b/contrib/pg_trgm/trgm_gist.c
index 5ba895217b0..5c7deb103a6 100644
--- a/contrib/pg_trgm/trgm_gist.c
+++ b/contrib/pg_trgm/trgm_gist.c
@@ -124,7 +124,7 @@ gtrgm_compress(PG_FUNCTION_ARGS)
text *val = DatumGetTextPP(entry->key);
res = generate_trgm(VARDATA_ANY(val), VARSIZE_ANY_EXHDR(val));
- retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(res),
entry->rel, entry->page,
entry->offset, false);
@@ -143,7 +143,7 @@ gtrgm_compress(PG_FUNCTION_ARGS)
}
res = gtrgm_alloc(true, siglen, sign);
- retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(res),
entry->rel, entry->page,
entry->offset, false);
@@ -163,7 +163,7 @@ gtrgm_decompress(PG_FUNCTION_ARGS)
if (key != (text *) DatumGetPointer(entry->key))
{
/* need to pass back the decompressed item */
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(key),
entry->rel, entry->page, entry->offset, entry->leafkey);
PG_RETURN_POINTER(retval);
@@ -820,7 +820,7 @@ gtrgm_picksplit(PG_FUNCTION_ARGS)
SPLITCOST *costvector;
/* cache the sign data for each existing item */
- cache = (CACHESIGN *) palloc(sizeof(CACHESIGN) * (maxoff + 1));
+ cache = palloc_array(CACHESIGN, maxoff + 1);
cache_sign = palloc(siglen * (maxoff + 1));
for (k = FirstOffsetNumber; k <= maxoff; k = OffsetNumberNext(k))
@@ -864,7 +864,7 @@ gtrgm_picksplit(PG_FUNCTION_ARGS)
union_r = GETSIGN(datum_r);
/* sort before ... */
- costvector = (SPLITCOST *) palloc(sizeof(SPLITCOST) * maxoff);
+ costvector = palloc_array(SPLITCOST, maxoff);
for (j = FirstOffsetNumber; j <= maxoff; j = OffsetNumberNext(j))
{
costvector[j - 1].pos = j;
diff --git a/contrib/pg_trgm/trgm_regexp.c b/contrib/pg_trgm/trgm_regexp.c
index 149f9eb259c..1a76794c422 100644
--- a/contrib/pg_trgm/trgm_regexp.c
+++ b/contrib/pg_trgm/trgm_regexp.c
@@ -791,12 +791,11 @@ getColorInfo(regex_t *regex, TrgmNFA *trgmNFA)
colorInfo->expandable = true;
colorInfo->containsNonWord = false;
- colorInfo->wordChars = (trgm_mb_char *)
- palloc(sizeof(trgm_mb_char) * charsCount);
+ colorInfo->wordChars = palloc_array(trgm_mb_char, charsCount);
colorInfo->wordCharsCount = 0;
/* Extract all the chars in this color */
- chars = (pg_wchar *) palloc(sizeof(pg_wchar) * charsCount);
+ chars = palloc_array(pg_wchar, charsCount);
pg_reg_getcharacters(regex, i, chars, charsCount);
/*
@@ -1063,7 +1062,7 @@ addKey(TrgmNFA *trgmNFA, TrgmState *state, TrgmStateKey *key)
* original NFA.
*/
arcsCount = pg_reg_getnumoutarcs(trgmNFA->regex, key->nstate);
- arcs = (regex_arc_t *) palloc(sizeof(regex_arc_t) * arcsCount);
+ arcs = palloc_array(regex_arc_t, arcsCount);
pg_reg_getoutarcs(trgmNFA->regex, key->nstate, arcs, arcsCount);
for (i = 0; i < arcsCount; i++)
@@ -1177,7 +1176,7 @@ addKey(TrgmNFA *trgmNFA, TrgmState *state, TrgmStateKey *key)
static void
addKeyToQueue(TrgmNFA *trgmNFA, TrgmStateKey *key)
{
- TrgmStateKey *keyCopy = (TrgmStateKey *) palloc(sizeof(TrgmStateKey));
+ TrgmStateKey *keyCopy = palloc_object(TrgmStateKey);
memcpy(keyCopy, key, sizeof(TrgmStateKey));
trgmNFA->keysQueue = lappend(trgmNFA->keysQueue, keyCopy);
@@ -1215,7 +1214,7 @@ addArcs(TrgmNFA *trgmNFA, TrgmState *state)
TrgmStateKey *key = (TrgmStateKey *) lfirst(cell);
arcsCount = pg_reg_getnumoutarcs(trgmNFA->regex, key->nstate);
- arcs = (regex_arc_t *) palloc(sizeof(regex_arc_t) * arcsCount);
+ arcs = palloc_array(regex_arc_t, arcsCount);
pg_reg_getoutarcs(trgmNFA->regex, key->nstate, arcs, arcsCount);
for (i = 0; i < arcsCount; i++)
@@ -1311,7 +1310,7 @@ addArc(TrgmNFA *trgmNFA, TrgmState *state, TrgmStateKey *key,
}
/* Checks were successful, add new arc */
- arc = (TrgmArc *) palloc(sizeof(TrgmArc));
+ arc = palloc_object(TrgmArc);
arc->target = getState(trgmNFA, destKey);
arc->ctrgm.colors[0] = key->prefix.colors[0];
arc->ctrgm.colors[1] = key->prefix.colors[1];
@@ -1467,7 +1466,7 @@ selectColorTrigrams(TrgmNFA *trgmNFA)
int cnumber;
/* Collect color trigrams from all arcs */
- colorTrgms = (ColorTrgmInfo *) palloc0(sizeof(ColorTrgmInfo) * arcsCount);
+ colorTrgms = palloc0_array(ColorTrgmInfo, arcsCount);
trgmNFA->colorTrgms = colorTrgms;
i = 0;
@@ -1479,7 +1478,7 @@ selectColorTrigrams(TrgmNFA *trgmNFA)
foreach(cell, state->arcs)
{
TrgmArc *arc = (TrgmArc *) lfirst(cell);
- TrgmArcInfo *arcInfo = (TrgmArcInfo *) palloc(sizeof(TrgmArcInfo));
+ TrgmArcInfo *arcInfo = palloc_object(TrgmArcInfo);
ColorTrgmInfo *trgmInfo = &colorTrgms[i];
arcInfo->source = state;
@@ -1964,8 +1963,7 @@ packGraph(TrgmNFA *trgmNFA, MemoryContext rcontext)
}
/* Collect array of all arcs */
- arcs = (TrgmPackArcInfo *)
- palloc(sizeof(TrgmPackArcInfo) * trgmNFA->arcsCount);
+ arcs = palloc_array(TrgmPackArcInfo, trgmNFA->arcsCount);
arcIndex = 0;
hash_seq_init(&scan_status, trgmNFA->states);
while ((state = (TrgmState *) hash_seq_search(&scan_status)) != NULL)
@@ -2147,7 +2145,7 @@ printSourceNFA(regex_t *regex, TrgmColorInfo *colors, int ncolors)
appendStringInfoString(&buf, ";\n");
arcsCount = pg_reg_getnumoutarcs(regex, state);
- arcs = (regex_arc_t *) palloc(sizeof(regex_arc_t) * arcsCount);
+ arcs = palloc_array(regex_arc_t, arcsCount);
pg_reg_getoutarcs(regex, state, arcs, arcsCount);
for (i = 0; i < arcsCount; i++)
diff --git a/contrib/pg_visibility/pg_visibility.c b/contrib/pg_visibility/pg_visibility.c
index d79ef35006b..7046c1b5f8e 100644
--- a/contrib/pg_visibility/pg_visibility.c
+++ b/contrib/pg_visibility/pg_visibility.c
@@ -741,7 +741,7 @@ collect_corrupt_items(Oid relid, bool all_visible, bool all_frozen)
* number of entries allocated. We'll repurpose these fields before
* returning.
*/
- items = palloc0(sizeof(corrupt_items));
+ items = palloc0_object(corrupt_items);
items->next = 0;
items->count = 64;
items->tids = palloc(items->count * sizeof(ItemPointerData));
diff --git a/contrib/pg_walinspect/pg_walinspect.c b/contrib/pg_walinspect/pg_walinspect.c
index 3c5e4a856a7..6945bac1306 100644
--- a/contrib/pg_walinspect/pg_walinspect.c
+++ b/contrib/pg_walinspect/pg_walinspect.c
@@ -109,8 +109,7 @@ InitXLogReaderState(XLogRecPtr lsn)
errmsg("could not read WAL at LSN %X/%08X",
LSN_FORMAT_ARGS(lsn))));
- private_data = (ReadLocalXLogPageNoWaitPrivate *)
- palloc0(sizeof(ReadLocalXLogPageNoWaitPrivate));
+ private_data = palloc0_object(ReadLocalXLogPageNoWaitPrivate);
xlogreader = XLogReaderAllocate(wal_segment_size, NULL,
XL_ROUTINE(.page_read = &read_local_xlog_page_no_wait,
@@ -310,7 +309,7 @@ GetWALBlockInfo(FunctionCallInfo fcinfo, XLogReaderState *record,
/* Construct and save block_fpi_info */
bitcnt = pg_popcount((const char *) &blk->bimg_info,
sizeof(uint8));
- flags = (Datum *) palloc0(sizeof(Datum) * bitcnt);
+ flags = palloc0_array(Datum, bitcnt);
if ((blk->bimg_info & BKPIMAGE_HAS_HOLE) != 0)
flags[cnt++] = CStringGetTextDatum("HAS_HOLE");
if (blk->apply_image)
diff --git a/contrib/pgcrypto/mbuf.c b/contrib/pgcrypto/mbuf.c
index 8dfc1b39d48..6a23ad99706 100644
--- a/contrib/pgcrypto/mbuf.c
+++ b/contrib/pgcrypto/mbuf.c
@@ -115,7 +115,7 @@ mbuf_create(int len)
if (!len)
len = 8192;
- mbuf = palloc(sizeof *mbuf);
+ mbuf = palloc_object(MBuf);
mbuf->data = palloc(len);
mbuf->buf_end = mbuf->data + len;
mbuf->data_end = mbuf->data;
@@ -132,7 +132,7 @@ mbuf_create_from_data(uint8 *data, int len)
{
MBuf *mbuf;
- mbuf = palloc(sizeof *mbuf);
+ mbuf = palloc_object(MBuf);
mbuf->data = data;
mbuf->buf_end = mbuf->data + len;
mbuf->data_end = mbuf->data + len;
@@ -206,7 +206,7 @@ pullf_create(PullFilter **pf_p, const PullFilterOps *op, void *init_arg, PullFil
res = 0;
}
- pf = palloc0(sizeof(*pf));
+ pf = palloc0_object(PullFilter);
pf->buflen = res;
pf->op = op;
pf->priv = priv;
@@ -372,7 +372,7 @@ pushf_create(PushFilter **mp_p, const PushFilterOps *op, void *init_arg, PushFil
res = 0;
}
- mp = palloc0(sizeof(*mp));
+ mp = palloc0_object(PushFilter);
mp->block_size = res;
mp->op = op;
mp->priv = priv;
diff --git a/contrib/pgcrypto/openssl.c b/contrib/pgcrypto/openssl.c
index f179e80c842..d3c12e7fda3 100644
--- a/contrib/pgcrypto/openssl.c
+++ b/contrib/pgcrypto/openssl.c
@@ -197,7 +197,7 @@ px_find_digest(const char *name, PX_MD **res)
ResourceOwnerRememberOSSLDigest(digest->owner, digest);
/* The PX_MD object is allocated in the current memory context. */
- h = palloc(sizeof(*h));
+ h = palloc_object(PX_MD);
h->result_size = digest_result_size;
h->block_size = digest_block_size;
h->reset = digest_reset;
@@ -813,7 +813,7 @@ px_find_cipher(const char *name, PX_Cipher **res)
od->evp_ciph = i->ciph->cipher_func();
/* The PX_Cipher is allocated in current memory context */
- c = palloc(sizeof(*c));
+ c = palloc_object(PX_Cipher);
c->block_size = gen_ossl_block_size;
c->key_size = gen_ossl_key_size;
c->iv_size = gen_ossl_iv_size;
diff --git a/contrib/pgcrypto/pgp-cfb.c b/contrib/pgcrypto/pgp-cfb.c
index de41e825b0c..d8f1afc3aba 100644
--- a/contrib/pgcrypto/pgp-cfb.c
+++ b/contrib/pgcrypto/pgp-cfb.c
@@ -67,7 +67,7 @@ pgp_cfb_create(PGP_CFB **ctx_p, int algo, const uint8 *key, int key_len,
return res;
}
- ctx = palloc0(sizeof(*ctx));
+ ctx = palloc0_object(PGP_CFB);
ctx->ciph = ciph;
ctx->block_size = px_cipher_block_size(ciph);
ctx->resync = resync;
diff --git a/contrib/pgcrypto/pgp-compress.c b/contrib/pgcrypto/pgp-compress.c
index 961cf21e748..caa80ecdb45 100644
--- a/contrib/pgcrypto/pgp-compress.c
+++ b/contrib/pgcrypto/pgp-compress.c
@@ -80,7 +80,7 @@ compress_init(PushFilter *next, void *init_arg, void **priv_p)
/*
* init
*/
- st = palloc0(sizeof(*st));
+ st = palloc0_object(struct ZipStat);
st->buf_len = ZIP_OUT_BUF;
st->stream.zalloc = z_alloc;
st->stream.zfree = z_free;
@@ -211,7 +211,7 @@ decompress_init(void **priv_p, void *arg, PullFilter *src)
&& ctx->compress_algo != PGP_COMPR_ZIP)
return PXE_PGP_UNSUPPORTED_COMPR;
- dec = palloc0(sizeof(*dec));
+ dec = palloc0_object(struct DecomprData);
dec->buf_len = ZIP_OUT_BUF;
*priv_p = dec;
diff --git a/contrib/pgcrypto/pgp-decrypt.c b/contrib/pgcrypto/pgp-decrypt.c
index e1ea5b3e58d..52ca7840c6d 100644
--- a/contrib/pgcrypto/pgp-decrypt.c
+++ b/contrib/pgcrypto/pgp-decrypt.c
@@ -224,7 +224,7 @@ pgp_create_pkt_reader(PullFilter **pf_p, PullFilter *src, int len,
int pkttype, PGP_Context *ctx)
{
int res;
- struct PktData *pkt = palloc(sizeof(*pkt));
+ struct PktData *pkt = palloc_object(struct PktData);
pkt->type = pkttype;
pkt->len = len;
@@ -448,7 +448,7 @@ mdcbuf_init(void **priv_p, void *arg, PullFilter *src)
PGP_Context *ctx = arg;
struct MDCBufData *st;
- st = palloc0(sizeof(*st));
+ st = palloc0_object(struct MDCBufData);
st->buflen = sizeof(st->buf);
st->ctx = ctx;
*priv_p = st;
diff --git a/contrib/pgcrypto/pgp-encrypt.c b/contrib/pgcrypto/pgp-encrypt.c
index f7467c9b1cb..2c059804706 100644
--- a/contrib/pgcrypto/pgp-encrypt.c
+++ b/contrib/pgcrypto/pgp-encrypt.c
@@ -178,7 +178,7 @@ encrypt_init(PushFilter *next, void *init_arg, void **priv_p)
if (res < 0)
return res;
- st = palloc0(sizeof(*st));
+ st = palloc0_object(struct EncStat);
st->ciph = ciph;
*priv_p = st;
@@ -240,7 +240,7 @@ pkt_stream_init(PushFilter *next, void *init_arg, void **priv_p)
{
struct PktStreamStat *st;
- st = palloc(sizeof(*st));
+ st = palloc_object(struct PktStreamStat);
st->final_done = 0;
st->pkt_block = 1 << STREAM_BLOCK_SHIFT;
*priv_p = st;
diff --git a/contrib/pgcrypto/pgp-pgsql.c b/contrib/pgcrypto/pgp-pgsql.c
index 7c9f4c7b39b..3e47b9364ab 100644
--- a/contrib/pgcrypto/pgp-pgsql.c
+++ b/contrib/pgcrypto/pgp-pgsql.c
@@ -782,8 +782,8 @@ parse_key_value_arrays(ArrayType *key_array, ArrayType *val_array,
(errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR),
errmsg("mismatched array dimensions")));
- keys = (char **) palloc(sizeof(char *) * key_count);
- values = (char **) palloc(sizeof(char *) * val_count);
+ keys = palloc_array(char *, key_count);
+ values = palloc_array(char *, val_count);
for (i = 0; i < key_count; i++)
{
@@ -937,7 +937,7 @@ pgp_armor_headers(PG_FUNCTION_ARGS)
attinmeta = TupleDescGetAttInMetadata(tupdesc);
funcctx->attinmeta = attinmeta;
- state = (pgp_armor_headers_state *) palloc(sizeof(pgp_armor_headers_state));
+ state = palloc_object(pgp_armor_headers_state);
res = pgp_extract_armor_headers((uint8 *) VARDATA_ANY(data),
VARSIZE_ANY_EXHDR(data),
diff --git a/contrib/pgcrypto/pgp-pubkey.c b/contrib/pgcrypto/pgp-pubkey.c
index 9a6561caf9d..6f118865917 100644
--- a/contrib/pgcrypto/pgp-pubkey.c
+++ b/contrib/pgcrypto/pgp-pubkey.c
@@ -39,7 +39,7 @@ pgp_key_alloc(PGP_PubKey **pk_p)
{
PGP_PubKey *pk;
- pk = palloc0(sizeof(*pk));
+ pk = palloc0_object(PGP_PubKey);
*pk_p = pk;
return 0;
}
diff --git a/contrib/pgcrypto/px-hmac.c b/contrib/pgcrypto/px-hmac.c
index 99174d26551..68e5cff6d6a 100644
--- a/contrib/pgcrypto/px-hmac.c
+++ b/contrib/pgcrypto/px-hmac.c
@@ -157,7 +157,7 @@ px_find_hmac(const char *name, PX_HMAC **res)
return PXE_HASH_UNUSABLE_FOR_HMAC;
}
- h = palloc(sizeof(*h));
+ h = palloc_object(PX_HMAC);
h->p.ipad = palloc(bs);
h->p.opad = palloc(bs);
h->md = md;
diff --git a/contrib/pgcrypto/px.c b/contrib/pgcrypto/px.c
index d35ccca7774..4d668d4e496 100644
--- a/contrib/pgcrypto/px.c
+++ b/contrib/pgcrypto/px.c
@@ -291,7 +291,7 @@ px_find_combo(const char *name, PX_Combo **res)
PX_Combo *cx;
- cx = palloc0(sizeof(*cx));
+ cx = palloc0_object(PX_Combo);
buf = pstrdup(name);
err = parse_cipher_name(buf, &s_cipher, &s_pad);
diff --git a/contrib/seg/seg.c b/contrib/seg/seg.c
index b5de2a5e1be..2d3a048c73e 100644
--- a/contrib/seg/seg.c
+++ b/contrib/seg/seg.c
@@ -107,7 +107,7 @@ Datum
seg_in(PG_FUNCTION_ARGS)
{
char *str = PG_GETARG_CSTRING(0);
- SEG *result = palloc(sizeof(SEG));
+ SEG *result = palloc_object(SEG);
yyscan_t scanner;
seg_scanner_init(str, &scanner);
@@ -370,7 +370,7 @@ gseg_picksplit(PG_FUNCTION_ARGS)
/*
* Emit segments to the left output page, and compute its bounding box.
*/
- seg_l = (SEG *) palloc(sizeof(SEG));
+ seg_l = palloc_object(SEG);
memcpy(seg_l, sort_items[0].data, sizeof(SEG));
*left++ = sort_items[0].index;
v->spl_nleft++;
@@ -388,7 +388,7 @@ gseg_picksplit(PG_FUNCTION_ARGS)
/*
* Likewise for the right page.
*/
- seg_r = (SEG *) palloc(sizeof(SEG));
+ seg_r = palloc_object(SEG);
memcpy(seg_r, sort_items[firstright].data, sizeof(SEG));
*right++ = sort_items[firstright].index;
v->spl_nright++;
@@ -632,7 +632,7 @@ seg_union(PG_FUNCTION_ARGS)
SEG *b = PG_GETARG_SEG_P(1);
SEG *n;
- n = (SEG *) palloc(sizeof(*n));
+ n = palloc_object(SEG);
/* take max of upper endpoints */
if (a->upper > b->upper)
@@ -672,7 +672,7 @@ seg_inter(PG_FUNCTION_ARGS)
SEG *b = PG_GETARG_SEG_P(1);
SEG *n;
- n = (SEG *) palloc(sizeof(*n));
+ n = palloc_object(SEG);
/* take min of upper endpoints */
if (a->upper < b->upper)
diff --git a/contrib/sepgsql/label.c b/contrib/sepgsql/label.c
index a37d89a3f1c..978067e0391 100644
--- a/contrib/sepgsql/label.c
+++ b/contrib/sepgsql/label.c
@@ -145,7 +145,7 @@ sepgsql_set_client_label(const char *new_label)
*/
oldcxt = MemoryContextSwitchTo(CurTransactionContext);
- plabel = palloc0(sizeof(pending_label));
+ plabel = palloc0_object(pending_label);
plabel->subid = GetCurrentSubTransactionId();
if (new_label)
plabel->label = pstrdup(new_label);
diff --git a/contrib/sepgsql/uavc.c b/contrib/sepgsql/uavc.c
index d9ccbc38bc5..5e57971bb4d 100644
--- a/contrib/sepgsql/uavc.c
+++ b/contrib/sepgsql/uavc.c
@@ -257,7 +257,7 @@ sepgsql_avc_compute(const char *scontext, const char *tcontext, uint16 tclass)
*/
oldctx = MemoryContextSwitchTo(avc_mem_cxt);
- cache = palloc0(sizeof(avc_cache));
+ cache = palloc0_object(avc_cache);
cache->hash = hash;
cache->scontext = pstrdup(scontext);
diff --git a/contrib/spi/refint.c b/contrib/spi/refint.c
index 89898cad7b0..fbbd558ca1e 100644
--- a/contrib/spi/refint.c
+++ b/contrib/spi/refint.c
@@ -651,7 +651,7 @@ find_plan(char *ident, EPlan **eplan, int *nplans)
}
else
{
- newp = *eplan = (EPlan *) palloc(sizeof(EPlan));
+ newp = *eplan = palloc_object(EPlan);
(*nplans) = i = 0;
}
diff --git a/contrib/sslinfo/sslinfo.c b/contrib/sslinfo/sslinfo.c
index da702011193..2b9eb90b093 100644
--- a/contrib/sslinfo/sslinfo.c
+++ b/contrib/sslinfo/sslinfo.c
@@ -374,7 +374,7 @@ ssl_extension_info(PG_FUNCTION_ARGS)
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
/* Create a user function context for cross-call persistence */
- fctx = (SSLExtensionInfoContext *) palloc(sizeof(SSLExtensionInfoContext));
+ fctx = palloc_object(SSLExtensionInfoContext);
/* Construct tuple descriptor */
if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)
diff --git a/contrib/tablefunc/tablefunc.c b/contrib/tablefunc/tablefunc.c
index 74afdc0977f..c40fd36dc96 100644
--- a/contrib/tablefunc/tablefunc.c
+++ b/contrib/tablefunc/tablefunc.c
@@ -207,7 +207,7 @@ normal_rand(PG_FUNCTION_ARGS)
funcctx->max_calls = num_tuples;
/* allocate memory for user context */
- fctx = (normal_rand_fctx *) palloc(sizeof(normal_rand_fctx));
+ fctx = palloc_object(normal_rand_fctx);
/*
* Use fctx to keep track of upper and lower bounds from call to call.
@@ -766,7 +766,7 @@ load_categories_hash(char *cats_sql, MemoryContext per_query_ctx)
SPIcontext = MemoryContextSwitchTo(per_query_ctx);
- catdesc = (crosstab_cat_desc *) palloc(sizeof(crosstab_cat_desc));
+ catdesc = palloc_object(crosstab_cat_desc);
catdesc->catname = catname;
catdesc->attidx = i;
diff --git a/contrib/test_decoding/test_decoding.c b/contrib/test_decoding/test_decoding.c
index 36e77c69e1c..47094f86f5f 100644
--- a/contrib/test_decoding/test_decoding.c
+++ b/contrib/test_decoding/test_decoding.c
@@ -163,7 +163,7 @@ pg_decode_startup(LogicalDecodingContext *ctx, OutputPluginOptions *opt,
TestDecodingData *data;
bool enable_streaming = false;
- data = palloc0(sizeof(TestDecodingData));
+ data = palloc0_object(TestDecodingData);
data->context = AllocSetContextCreate(ctx->context,
"text conversion context",
ALLOCSET_DEFAULT_SIZES);
diff --git a/contrib/tsm_system_rows/tsm_system_rows.c b/contrib/tsm_system_rows/tsm_system_rows.c
index f401efa2131..ef145fa6747 100644
--- a/contrib/tsm_system_rows/tsm_system_rows.c
+++ b/contrib/tsm_system_rows/tsm_system_rows.c
@@ -163,7 +163,7 @@ system_rows_samplescangetsamplesize(PlannerInfo *root,
static void
system_rows_initsamplescan(SampleScanState *node, int eflags)
{
- node->tsm_state = palloc0(sizeof(SystemRowsSamplerData));
+ node->tsm_state = palloc0_object(SystemRowsSamplerData);
/* Note the above leaves tsm_state->step equal to zero */
}
diff --git a/contrib/tsm_system_time/tsm_system_time.c b/contrib/tsm_system_time/tsm_system_time.c
index c9c71d8c3af..1041258ea1a 100644
--- a/contrib/tsm_system_time/tsm_system_time.c
+++ b/contrib/tsm_system_time/tsm_system_time.c
@@ -179,7 +179,7 @@ system_time_samplescangetsamplesize(PlannerInfo *root,
static void
system_time_initsamplescan(SampleScanState *node, int eflags)
{
- node->tsm_state = palloc0(sizeof(SystemTimeSamplerData));
+ node->tsm_state = palloc0_object(SystemTimeSamplerData);
/* Note the above leaves tsm_state->step equal to zero */
}
diff --git a/contrib/unaccent/unaccent.c b/contrib/unaccent/unaccent.c
index 336ba31047a..68251660887 100644
--- a/contrib/unaccent/unaccent.c
+++ b/contrib/unaccent/unaccent.c
@@ -60,7 +60,7 @@ placeChar(TrieChar *node, const unsigned char *str, int lenstr,
TrieChar *curnode;
if (!node)
- node = (TrieChar *) palloc0(sizeof(TrieChar) * 256);
+ node = palloc0_array(TrieChar, 256);
Assert(lenstr > 0); /* else str[0] doesn't exist */
@@ -239,7 +239,7 @@ initTrie(const char *filename)
if (trgquoted && state > 0)
{
/* Ignore first and end quotes */
- trgstore = (char *) palloc(sizeof(char) * (trglen - 2));
+ trgstore = palloc_array(char, trglen - 2);
trgstorelen = 0;
for (int i = 1; i < trglen - 1; i++)
{
@@ -252,7 +252,7 @@ initTrie(const char *filename)
}
else
{
- trgstore = (char *) palloc(sizeof(char) * trglen);
+ trgstore = palloc_array(char, trglen);
trgstorelen = trglen;
memcpy(trgstore, trg, trgstorelen);
}
@@ -421,7 +421,7 @@ unaccent_lexize(PG_FUNCTION_ARGS)
/* return a result only if we made at least one substitution */
if (buf.data != NULL)
{
- res = (TSLexeme *) palloc0(sizeof(TSLexeme) * 2);
+ res = palloc0_array(TSLexeme, 2);
res->lexeme = buf.data;
res->flags = TSL_FILTER;
}
diff --git a/contrib/xml2/xpath.c b/contrib/xml2/xpath.c
index 4ac291c8251..662d7d02f27 100644
--- a/contrib/xml2/xpath.c
+++ b/contrib/xml2/xpath.c
@@ -485,8 +485,7 @@ pgxml_xpath(text *document, xmlChar *xpath, PgXmlErrorContext *xmlerrcxt)
{
int32 docsize = VARSIZE_ANY_EXHDR(document);
xmlXPathCompExprPtr comppath;
- xpath_workspace *workspace = (xpath_workspace *)
- palloc0(sizeof(xpath_workspace));
+ xpath_workspace *workspace = palloc0_object(xpath_workspace);
workspace->doctree = NULL;
workspace->ctxt = NULL;
diff --git a/contrib/xml2/xslt_proc.c b/contrib/xml2/xslt_proc.c
index 36578b82e4d..2be87bec0cd 100644
--- a/contrib/xml2/xslt_proc.c
+++ b/contrib/xml2/xslt_proc.c
@@ -69,7 +69,7 @@ xslt_process(PG_FUNCTION_ARGS)
else
{
/* No parameters */
- params = (const char **) palloc(sizeof(char *));
+ params = palloc_object(const char *);
params[0] = NULL;
}