summaryrefslogtreecommitdiff
path: root/src/backend/utils/adt
diff options
context:
space:
mode:
authorMichael Paquier2025-12-09 22:36:46 +0000
committerMichael Paquier2025-12-09 22:36:46 +0000
commit1b105f9472bdb9a68f709778afafb494997267bd (patch)
tree205727d30b0dd4f3060bc1f49a9efa724ee3ff80 /src/backend/utils/adt
parentc507ba55f5bfae900baa94f1c657e1d99da5c6dc (diff)
Use palloc_object() and palloc_array() in backend code
The idea is to encourage more the use of these new routines across the tree, as these offer stronger type safety guarantees than palloc(). This batch of changes includes most of the trivial changes suggested by the author for src/backend/. A total of 334 files are updated here. Among these files, 48 of them have their build change slightly; these are caused by line number changes as the new allocation formulas are simpler, shaving around 100 lines of code in total. Similar work has been done in 0c3c5c3b06a3 and 31d3847a37be. Author: David Geier <[email protected]> Discussion: https://postgr.es/m/[email protected]
Diffstat (limited to 'src/backend/utils/adt')
-rw-r--r--src/backend/utils/adt/acl.c6
-rw-r--r--src/backend/utils/adt/array_selfuncs.c8
-rw-r--r--src/backend/utils/adt/array_typanalyze.c7
-rw-r--r--src/backend/utils/adt/array_userfuncs.c12
-rw-r--r--src/backend/utils/adt/arrayfuncs.c14
-rw-r--r--src/backend/utils/adt/arraysubs.c2
-rw-r--r--src/backend/utils/adt/date.c24
-rw-r--r--src/backend/utils/adt/datetime.c10
-rw-r--r--src/backend/utils/adt/formatting.c2
-rw-r--r--src/backend/utils/adt/geo_ops.c94
-rw-r--r--src/backend/utils/adt/geo_spgist.c40
-rw-r--r--src/backend/utils/adt/int.c2
-rw-r--r--src/backend/utils/adt/int8.c2
-rw-r--r--src/backend/utils/adt/json.c6
-rw-r--r--src/backend/utils/adt/jsonb_gin.c19
-rw-r--r--src/backend/utils/adt/jsonb_util.c10
-rw-r--r--src/backend/utils/adt/jsonfuncs.c64
-rw-r--r--src/backend/utils/adt/jsonpath_exec.c27
-rw-r--r--src/backend/utils/adt/jsonpath_gram.y4
-rw-r--r--src/backend/utils/adt/lockfuncs.c2
-rw-r--r--src/backend/utils/adt/mac.c14
-rw-r--r--src/backend/utils/adt/mac8.c18
-rw-r--r--src/backend/utils/adt/mcxtfuncs.c2
-rw-r--r--src/backend/utils/adt/misc.c2
-rw-r--r--src/backend/utils/adt/multirangetypes.c8
-rw-r--r--src/backend/utils/adt/multirangetypes_selfuncs.c4
-rw-r--r--src/backend/utils/adt/multixactfuncs.c2
-rw-r--r--src/backend/utils/adt/network.c24
-rw-r--r--src/backend/utils/adt/network_gist.c10
-rw-r--r--src/backend/utils/adt/network_spgist.c6
-rw-r--r--src/backend/utils/adt/numeric.c13
-rw-r--r--src/backend/utils/adt/orderedsetaggs.c4
-rw-r--r--src/backend/utils/adt/pg_locale_libc.c6
-rw-r--r--src/backend/utils/adt/pg_ndistinct.c2
-rw-r--r--src/backend/utils/adt/rangetypes.c2
-rw-r--r--src/backend/utils/adt/rangetypes_gist.c15
-rw-r--r--src/backend/utils/adt/rangetypes_selfuncs.c4
-rw-r--r--src/backend/utils/adt/rangetypes_spgist.c18
-rw-r--r--src/backend/utils/adt/rangetypes_typanalyze.c8
-rw-r--r--src/backend/utils/adt/regexp.c20
-rw-r--r--src/backend/utils/adt/rowtypes.c24
-rw-r--r--src/backend/utils/adt/ruleutils.c4
-rw-r--r--src/backend/utils/adt/selfuncs.c4
-rw-r--r--src/backend/utils/adt/skipsupport.c2
-rw-r--r--src/backend/utils/adt/tid.c6
-rw-r--r--src/backend/utils/adt/timestamp.c46
-rw-r--r--src/backend/utils/adt/tsginidx.c10
-rw-r--r--src/backend/utils/adt/tsgistidx.c10
-rw-r--r--src/backend/utils/adt/tsquery.c12
-rw-r--r--src/backend/utils/adt/tsquery_cleanup.c2
-rw-r--r--src/backend/utils/adt/tsquery_gist.c4
-rw-r--r--src/backend/utils/adt/tsquery_op.c14
-rw-r--r--src/backend/utils/adt/tsquery_util.c18
-rw-r--r--src/backend/utils/adt/tsrank.c13
-rw-r--r--src/backend/utils/adt/tsvector.c4
-rw-r--r--src/backend/utils/adt/tsvector_op.c10
-rw-r--r--src/backend/utils/adt/tsvector_parser.c6
-rw-r--r--src/backend/utils/adt/uuid.c4
-rw-r--r--src/backend/utils/adt/varlena.c2
-rw-r--r--src/backend/utils/adt/xml.c6
60 files changed, 366 insertions, 372 deletions
diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c
index fbcd64a2609..05d48412f82 100644
--- a/src/backend/utils/adt/acl.c
+++ b/src/backend/utils/adt/acl.c
@@ -618,7 +618,7 @@ aclitemin(PG_FUNCTION_ARGS)
Node *escontext = fcinfo->context;
AclItem *aip;
- aip = (AclItem *) palloc(sizeof(AclItem));
+ aip = palloc_object(AclItem);
s = aclparse(s, aip, escontext);
if (s == NULL)
@@ -1661,7 +1661,7 @@ makeaclitem(PG_FUNCTION_ARGS)
priv = convert_any_priv_string(privtext, any_priv_map);
- result = (AclItem *) palloc(sizeof(AclItem));
+ result = palloc_object(AclItem);
result->ai_grantee = grantee;
result->ai_grantor = grantor;
@@ -1821,7 +1821,7 @@ aclexplode(PG_FUNCTION_ARGS)
funcctx->tuple_desc = BlessTupleDesc(tupdesc);
/* allocate memory for user context */
- idx = (int *) palloc(sizeof(int[2]));
+ idx = palloc_array(int, 2);
idx[0] = 0; /* ACL array item index */
idx[1] = -1; /* privilege type counter */
funcctx->user_fctx = idx;
diff --git a/src/backend/utils/adt/array_selfuncs.c b/src/backend/utils/adt/array_selfuncs.c
index 4dab35b0057..cd201461c17 100644
--- a/src/backend/utils/adt/array_selfuncs.c
+++ b/src/backend/utils/adt/array_selfuncs.c
@@ -759,7 +759,7 @@ mcelem_array_contained_selec(const Datum *mcelem, int nmcelem,
* elem_selec is array of estimated frequencies for elements in the
* constant.
*/
- elem_selec = (float *) palloc(sizeof(float) * nitems);
+ elem_selec = palloc_array(float, nitems);
/* Scan mcelem and array in parallel. */
mcelem_index = 0;
@@ -936,7 +936,7 @@ calc_hist(const float4 *hist, int nhist, int n)
next_interval;
float frac;
- hist_part = (float *) palloc((n + 1) * sizeof(float));
+ hist_part = palloc_array(float, n + 1);
/*
* frac is a probability contribution for each interval between histogram
@@ -1028,8 +1028,8 @@ calc_distr(const float *p, int n, int m, float rest)
* Since we return only the last row of the matrix and need only the
* current and previous row for calculations, allocate two rows.
*/
- row = (float *) palloc((m + 1) * sizeof(float));
- prev_row = (float *) palloc((m + 1) * sizeof(float));
+ row = palloc_array(float, m + 1);
+ prev_row = palloc_array(float, m + 1);
/* M[0,0] = 1 */
row[0] = 1.0f;
diff --git a/src/backend/utils/adt/array_typanalyze.c b/src/backend/utils/adt/array_typanalyze.c
index 560b27f3ca7..61aedd31ff1 100644
--- a/src/backend/utils/adt/array_typanalyze.c
+++ b/src/backend/utils/adt/array_typanalyze.c
@@ -132,7 +132,7 @@ array_typanalyze(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(true);
/* Store our findings for use by compute_array_stats() */
- extra_data = (ArrayAnalyzeExtraData *) palloc(sizeof(ArrayAnalyzeExtraData));
+ extra_data = palloc_object(ArrayAnalyzeExtraData);
extra_data->type_id = typentry->type_id;
extra_data->eq_opr = typentry->eq_opr;
extra_data->coll_id = stats->attrcollid; /* collation we should use */
@@ -469,7 +469,7 @@ compute_array_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc,
cutoff_freq = 9 * element_no / bucket_width;
i = hash_get_num_entries(elements_tab); /* surely enough space */
- sort_table = (TrackItem **) palloc(sizeof(TrackItem *) * i);
+ sort_table = palloc_array(TrackItem *, i);
hash_seq_init(&scan_status, elements_tab);
track_len = 0;
@@ -606,8 +606,7 @@ compute_array_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc,
* Create an array of DECountItem pointers, and sort them into
* increasing count order.
*/
- sorted_count_items = (DECountItem **)
- palloc(sizeof(DECountItem *) * count_items_count);
+ sorted_count_items = palloc_array(DECountItem *, count_items_count);
hash_seq_init(&scan_status, count_tab);
j = 0;
while ((count_item = (DECountItem *) hash_seq_search(&scan_status)) != NULL)
diff --git a/src/backend/utils/adt/array_userfuncs.c b/src/backend/utils/adt/array_userfuncs.c
index 8eb342e3382..c01bf466121 100644
--- a/src/backend/utils/adt/array_userfuncs.c
+++ b/src/backend/utils/adt/array_userfuncs.c
@@ -433,8 +433,8 @@ array_cat(PG_FUNCTION_ARGS)
* themselves) of the input argument arrays
*/
ndims = ndims1;
- dims = (int *) palloc(ndims * sizeof(int));
- lbs = (int *) palloc(ndims * sizeof(int));
+ dims = palloc_array(int, ndims);
+ lbs = palloc_array(int, ndims);
dims[0] = dims1[0] + dims2[0];
lbs[0] = lbs1[0];
@@ -459,8 +459,8 @@ array_cat(PG_FUNCTION_ARGS)
* the first argument inserted at the front of the outer dimension
*/
ndims = ndims2;
- dims = (int *) palloc(ndims * sizeof(int));
- lbs = (int *) palloc(ndims * sizeof(int));
+ dims = palloc_array(int, ndims);
+ lbs = palloc_array(int, ndims);
memcpy(dims, dims2, ndims * sizeof(int));
memcpy(lbs, lbs2, ndims * sizeof(int));
@@ -487,8 +487,8 @@ array_cat(PG_FUNCTION_ARGS)
* second argument appended to the end of the outer dimension
*/
ndims = ndims1;
- dims = (int *) palloc(ndims * sizeof(int));
- lbs = (int *) palloc(ndims * sizeof(int));
+ dims = palloc_array(int, ndims);
+ lbs = palloc_array(int, ndims);
memcpy(dims, dims1, ndims * sizeof(int));
memcpy(lbs, lbs1, ndims * sizeof(int));
diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c
index 24e5b2adea1..b67ce57656a 100644
--- a/src/backend/utils/adt/arrayfuncs.c
+++ b/src/backend/utils/adt/arrayfuncs.c
@@ -3582,7 +3582,7 @@ construct_empty_array(Oid elmtype)
{
ArrayType *result;
- result = (ArrayType *) palloc0(sizeof(ArrayType));
+ result = palloc0_object(ArrayType);
SET_VARSIZE(result, sizeof(ArrayType));
result->ndim = 0;
result->dataoffset = 0;
@@ -3645,9 +3645,9 @@ deconstruct_array(const ArrayType *array,
Assert(ARR_ELEMTYPE(array) == elmtype);
nelems = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array));
- *elemsp = elems = (Datum *) palloc(nelems * sizeof(Datum));
+ *elemsp = elems = palloc_array(Datum, nelems);
if (nullsp)
- *nullsp = nulls = (bool *) palloc0(nelems * sizeof(bool));
+ *nullsp = nulls = palloc0_array(bool, nelems);
else
nulls = NULL;
*nelemsp = nelems;
@@ -4209,7 +4209,7 @@ hash_array(PG_FUNCTION_ARGS)
* modify typentry, since that points directly into the type
* cache.
*/
- record_typentry = palloc0(sizeof(*record_typentry));
+ record_typentry = palloc0_object(TypeCacheEntry);
record_typentry->type_id = element_type;
/* fill in what we need below */
@@ -4597,7 +4597,7 @@ arraycontained(PG_FUNCTION_ARGS)
ArrayIterator
array_create_iterator(ArrayType *arr, int slice_ndim, ArrayMetaState *mstate)
{
- ArrayIterator iterator = palloc0(sizeof(ArrayIteratorData));
+ ArrayIterator iterator = palloc0_object(ArrayIteratorData);
/*
* Sanity-check inputs --- caller should have got this right already
@@ -5944,7 +5944,7 @@ generate_subscripts(PG_FUNCTION_ARGS)
* switch to memory context appropriate for multiple function calls
*/
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
- fctx = (generate_subscripts_fctx *) palloc(sizeof(generate_subscripts_fctx));
+ fctx = palloc_object(generate_subscripts_fctx);
lb = AARR_LBOUND(v);
dimv = AARR_DIMS(v);
@@ -6291,7 +6291,7 @@ array_unnest(PG_FUNCTION_ARGS)
arr = PG_GETARG_ANY_ARRAY_P(0);
/* allocate memory for user context */
- fctx = (array_unnest_fctx *) palloc(sizeof(array_unnest_fctx));
+ fctx = palloc_object(array_unnest_fctx);
/* initialize state */
array_iter_setup(&fctx->iter, arr);
diff --git a/src/backend/utils/adt/arraysubs.c b/src/backend/utils/adt/arraysubs.c
index b476fa586a9..f280212fd8f 100644
--- a/src/backend/utils/adt/arraysubs.c
+++ b/src/backend/utils/adt/arraysubs.c
@@ -497,7 +497,7 @@ array_exec_setup(const SubscriptingRef *sbsref,
/*
* Allocate type-specific workspace.
*/
- workspace = (ArraySubWorkspace *) palloc(sizeof(ArraySubWorkspace));
+ workspace = palloc_object(ArraySubWorkspace);
sbsrefstate->workspace = workspace;
/*
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c
index c4b8125dd66..421ccc306f6 100644
--- a/src/backend/utils/adt/date.c
+++ b/src/backend/utils/adt/date.c
@@ -358,7 +358,7 @@ GetSQLCurrentTime(int32 typmod)
GetCurrentTimeUsec(tm, &fsec, &tz);
- result = (TimeTzADT *) palloc(sizeof(TimeTzADT));
+ result = palloc_object(TimeTzADT);
tm2timetz(tm, fsec, tz, result);
AdjustTimeForTypmod(&(result->time), typmod);
return result;
@@ -2087,7 +2087,7 @@ time_interval(PG_FUNCTION_ARGS)
TimeADT time = PG_GETARG_TIMEADT(0);
Interval *result;
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
result->time = time;
result->day = 0;
@@ -2132,7 +2132,7 @@ time_mi_time(PG_FUNCTION_ARGS)
TimeADT time2 = PG_GETARG_TIMEADT(1);
Interval *result;
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
result->month = 0;
result->day = 0;
@@ -2399,7 +2399,7 @@ timetz_in(PG_FUNCTION_ARGS)
PG_RETURN_NULL();
}
- result = (TimeTzADT *) palloc(sizeof(TimeTzADT));
+ result = palloc_object(TimeTzADT);
tm2timetz(tm, fsec, tz, result);
AdjustTimeForTypmod(&(result->time), typmod);
@@ -2438,7 +2438,7 @@ timetz_recv(PG_FUNCTION_ARGS)
int32 typmod = PG_GETARG_INT32(2);
TimeTzADT *result;
- result = (TimeTzADT *) palloc(sizeof(TimeTzADT));
+ result = palloc_object(TimeTzADT);
result->time = pq_getmsgint64(buf);
@@ -2524,7 +2524,7 @@ timetz_scale(PG_FUNCTION_ARGS)
int32 typmod = PG_GETARG_INT32(1);
TimeTzADT *result;
- result = (TimeTzADT *) palloc(sizeof(TimeTzADT));
+ result = palloc_object(TimeTzADT);
result->time = time->time;
result->zone = time->zone;
@@ -2700,7 +2700,7 @@ timetz_pl_interval(PG_FUNCTION_ARGS)
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
errmsg("cannot add infinite interval to time")));
- result = (TimeTzADT *) palloc(sizeof(TimeTzADT));
+ result = palloc_object(TimeTzADT);
result->time = time->time + span->time;
result->time -= result->time / USECS_PER_DAY * USECS_PER_DAY;
@@ -2727,7 +2727,7 @@ timetz_mi_interval(PG_FUNCTION_ARGS)
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
errmsg("cannot subtract infinite interval from time")));
- result = (TimeTzADT *) palloc(sizeof(TimeTzADT));
+ result = palloc_object(TimeTzADT);
result->time = time->time - span->time;
result->time -= result->time / USECS_PER_DAY * USECS_PER_DAY;
@@ -2934,7 +2934,7 @@ time_timetz(PG_FUNCTION_ARGS)
time2tm(time, tm, &fsec);
tz = DetermineTimeZoneOffset(tm, session_timezone);
- result = (TimeTzADT *) palloc(sizeof(TimeTzADT));
+ result = palloc_object(TimeTzADT);
result->time = time;
result->zone = tz;
@@ -2964,7 +2964,7 @@ timestamptz_timetz(PG_FUNCTION_ARGS)
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
errmsg("timestamp out of range")));
- result = (TimeTzADT *) palloc(sizeof(TimeTzADT));
+ result = palloc_object(TimeTzADT);
tm2timetz(tm, fsec, tz, result);
@@ -3197,7 +3197,7 @@ timetz_zone(PG_FUNCTION_ARGS)
errmsg("timestamp out of range")));
}
- result = (TimeTzADT *) palloc(sizeof(TimeTzADT));
+ result = palloc_object(TimeTzADT);
result->time = t->time + (t->zone - tz) * USECS_PER_SEC;
/* C99 modulo has the wrong sign convention for negative input */
@@ -3238,7 +3238,7 @@ timetz_izone(PG_FUNCTION_ARGS)
tz = -(zone->time / USECS_PER_SEC);
- result = (TimeTzADT *) palloc(sizeof(TimeTzADT));
+ result = palloc_object(TimeTzADT);
result->time = time->time + (time->zone - tz) * USECS_PER_SEC;
/* C99 modulo has the wrong sign convention for negative input */
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index 680fee2a844..e3a099eaa67 100644
--- a/src/backend/utils/adt/datetime.c
+++ b/src/backend/utils/adt/datetime.c
@@ -5152,7 +5152,7 @@ pg_timezone_abbrevs_zone(PG_FUNCTION_ARGS)
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
/* allocate memory for user context */
- pindex = (int *) palloc(sizeof(int));
+ pindex = palloc_object(int);
*pindex = 0;
funcctx->user_fctx = pindex;
@@ -5187,7 +5187,7 @@ pg_timezone_abbrevs_zone(PG_FUNCTION_ARGS)
/* Convert offset (in seconds) to an interval; can't overflow */
MemSet(&itm_in, 0, sizeof(struct pg_itm_in));
itm_in.tm_usec = (int64) gmtoff * USECS_PER_SEC;
- resInterval = (Interval *) palloc(sizeof(Interval));
+ resInterval = palloc_object(Interval);
(void) itmin2interval(&itm_in, resInterval);
values[1] = IntervalPGetDatum(resInterval);
@@ -5239,7 +5239,7 @@ pg_timezone_abbrevs_abbrevs(PG_FUNCTION_ARGS)
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
/* allocate memory for user context */
- pindex = (int *) palloc(sizeof(int));
+ pindex = palloc_object(int);
*pindex = 0;
funcctx->user_fctx = pindex;
@@ -5310,7 +5310,7 @@ pg_timezone_abbrevs_abbrevs(PG_FUNCTION_ARGS)
/* Convert offset (in seconds) to an interval; can't overflow */
MemSet(&itm_in, 0, sizeof(struct pg_itm_in));
itm_in.tm_usec = (int64) gmtoffset * USECS_PER_SEC;
- resInterval = (Interval *) palloc(sizeof(Interval));
+ resInterval = palloc_object(Interval);
(void) itmin2interval(&itm_in, resInterval);
values[1] = IntervalPGetDatum(resInterval);
@@ -5378,7 +5378,7 @@ pg_timezone_names(PG_FUNCTION_ARGS)
/* Convert tzoff to an interval; can't overflow */
MemSet(&itm_in, 0, sizeof(struct pg_itm_in));
itm_in.tm_usec = (int64) -tzoff * USECS_PER_SEC;
- resInterval = (Interval *) palloc(sizeof(Interval));
+ resInterval = palloc_object(Interval);
(void) itmin2interval(&itm_in, resInterval);
values[2] = IntervalPGetDatum(resInterval);
diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c
index c3cb022a400..a4570471bba 100644
--- a/src/backend/utils/adt/formatting.c
+++ b/src/backend/utils/adt/formatting.c
@@ -4264,7 +4264,7 @@ parse_datetime(text *date_txt, text *fmt, Oid collid, bool strict,
{
if (flags & DCH_ZONED)
{
- TimeTzADT *result = palloc(sizeof(TimeTzADT));
+ TimeTzADT *result = palloc_object(TimeTzADT);
if (ftz.has_tz)
{
diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c
index 9101a720744..43b7eb43a79 100644
--- a/src/backend/utils/adt/geo_ops.c
+++ b/src/backend/utils/adt/geo_ops.c
@@ -423,7 +423,7 @@ box_in(PG_FUNCTION_ARGS)
{
char *str = PG_GETARG_CSTRING(0);
Node *escontext = fcinfo->context;
- BOX *box = (BOX *) palloc(sizeof(BOX));
+ BOX *box = palloc_object(BOX);
bool isopen;
float8 x,
y;
@@ -470,7 +470,7 @@ box_recv(PG_FUNCTION_ARGS)
float8 x,
y;
- box = (BOX *) palloc(sizeof(BOX));
+ box = palloc_object(BOX);
box->high.x = pq_getmsgfloat8(buf);
box->high.y = pq_getmsgfloat8(buf);
@@ -849,7 +849,7 @@ Datum
box_center(PG_FUNCTION_ARGS)
{
BOX *box = PG_GETARG_BOX_P(0);
- Point *result = (Point *) palloc(sizeof(Point));
+ Point *result = palloc_object(Point);
box_cn(result, box);
@@ -914,7 +914,7 @@ box_intersect(PG_FUNCTION_ARGS)
if (!box_ov(box1, box2))
PG_RETURN_NULL();
- result = (BOX *) palloc(sizeof(BOX));
+ result = palloc_object(BOX);
result->high.x = float8_min(box1->high.x, box2->high.x);
result->low.x = float8_max(box1->low.x, box2->low.x);
@@ -933,7 +933,7 @@ Datum
box_diagonal(PG_FUNCTION_ARGS)
{
BOX *box = PG_GETARG_BOX_P(0);
- LSEG *result = (LSEG *) palloc(sizeof(LSEG));
+ LSEG *result = palloc_object(LSEG);
statlseg_construct(result, &box->high, &box->low);
@@ -980,7 +980,7 @@ line_in(PG_FUNCTION_ARGS)
{
char *str = PG_GETARG_CSTRING(0);
Node *escontext = fcinfo->context;
- LINE *line = (LINE *) palloc(sizeof(LINE));
+ LINE *line = palloc_object(LINE);
LSEG lseg;
bool isopen;
char *s;
@@ -1040,7 +1040,7 @@ line_recv(PG_FUNCTION_ARGS)
StringInfo buf = (StringInfo) PG_GETARG_POINTER(0);
LINE *line;
- line = (LINE *) palloc(sizeof(LINE));
+ line = palloc_object(LINE);
line->A = pq_getmsgfloat8(buf);
line->B = pq_getmsgfloat8(buf);
@@ -1116,7 +1116,7 @@ line_construct_pp(PG_FUNCTION_ARGS)
{
Point *pt1 = PG_GETARG_POINT_P(0);
Point *pt2 = PG_GETARG_POINT_P(1);
- LINE *result = (LINE *) palloc(sizeof(LINE));
+ LINE *result = palloc_object(LINE);
if (point_eq_point(pt1, pt2))
ereport(ERROR,
@@ -1289,7 +1289,7 @@ line_interpt(PG_FUNCTION_ARGS)
LINE *l2 = PG_GETARG_LINE_P(1);
Point *result;
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
if (!line_interpt_line(result, l1, l2))
PG_RETURN_NULL();
@@ -1831,7 +1831,7 @@ Datum
point_in(PG_FUNCTION_ARGS)
{
char *str = PG_GETARG_CSTRING(0);
- Point *point = (Point *) palloc(sizeof(Point));
+ Point *point = palloc_object(Point);
/* Ignore failure from pair_decode, since our return value won't matter */
pair_decode(str, &point->x, &point->y, NULL, "point", str, fcinfo->context);
@@ -1855,7 +1855,7 @@ point_recv(PG_FUNCTION_ARGS)
StringInfo buf = (StringInfo) PG_GETARG_POINTER(0);
Point *point;
- point = (Point *) palloc(sizeof(Point));
+ point = palloc_object(Point);
point->x = pq_getmsgfloat8(buf);
point->y = pq_getmsgfloat8(buf);
PG_RETURN_POINT_P(point);
@@ -2066,7 +2066,7 @@ lseg_in(PG_FUNCTION_ARGS)
{
char *str = PG_GETARG_CSTRING(0);
Node *escontext = fcinfo->context;
- LSEG *lseg = (LSEG *) palloc(sizeof(LSEG));
+ LSEG *lseg = palloc_object(LSEG);
bool isopen;
if (!path_decode(str, true, 2, &lseg->p[0], &isopen, NULL, "lseg", str,
@@ -2094,7 +2094,7 @@ lseg_recv(PG_FUNCTION_ARGS)
StringInfo buf = (StringInfo) PG_GETARG_POINTER(0);
LSEG *lseg;
- lseg = (LSEG *) palloc(sizeof(LSEG));
+ lseg = palloc_object(LSEG);
lseg->p[0].x = pq_getmsgfloat8(buf);
lseg->p[0].y = pq_getmsgfloat8(buf);
@@ -2130,7 +2130,7 @@ lseg_construct(PG_FUNCTION_ARGS)
{
Point *pt1 = PG_GETARG_POINT_P(0);
Point *pt2 = PG_GETARG_POINT_P(1);
- LSEG *result = (LSEG *) palloc(sizeof(LSEG));
+ LSEG *result = palloc_object(LSEG);
statlseg_construct(result, pt1, pt2);
@@ -2318,7 +2318,7 @@ lseg_center(PG_FUNCTION_ARGS)
LSEG *lseg = PG_GETARG_LSEG_P(0);
Point *result;
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
result->x = float8_div(float8_pl(lseg->p[0].x, lseg->p[1].x), 2.0);
result->y = float8_div(float8_pl(lseg->p[0].y, lseg->p[1].y), 2.0);
@@ -2364,7 +2364,7 @@ lseg_interpt(PG_FUNCTION_ARGS)
LSEG *l2 = PG_GETARG_LSEG_P(1);
Point *result;
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
if (!lseg_interpt_lseg(result, l1, l2))
PG_RETURN_NULL();
@@ -2753,7 +2753,7 @@ close_pl(PG_FUNCTION_ARGS)
LINE *line = PG_GETARG_LINE_P(1);
Point *result;
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
if (isnan(line_closept_point(result, line, pt)))
PG_RETURN_NULL();
@@ -2794,7 +2794,7 @@ close_ps(PG_FUNCTION_ARGS)
LSEG *lseg = PG_GETARG_LSEG_P(1);
Point *result;
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
if (isnan(lseg_closept_point(result, lseg, pt)))
PG_RETURN_NULL();
@@ -2859,7 +2859,7 @@ close_lseg(PG_FUNCTION_ARGS)
if (lseg_sl(l1) == lseg_sl(l2))
PG_RETURN_NULL();
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
if (isnan(lseg_closept_lseg(result, l2, l1)))
PG_RETURN_NULL();
@@ -2936,7 +2936,7 @@ close_pb(PG_FUNCTION_ARGS)
BOX *box = PG_GETARG_BOX_P(1);
Point *result;
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
if (isnan(box_closept_point(result, box, pt)))
PG_RETURN_NULL();
@@ -2994,7 +2994,7 @@ close_ls(PG_FUNCTION_ARGS)
if (lseg_sl(lseg) == line_sl(line))
PG_RETURN_NULL();
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
if (isnan(lseg_closept_line(result, lseg, line)))
PG_RETURN_NULL();
@@ -3066,7 +3066,7 @@ close_sb(PG_FUNCTION_ARGS)
BOX *box = PG_GETARG_BOX_P(1);
Point *result;
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
if (isnan(box_closept_lseg(result, box, lseg)))
PG_RETURN_NULL();
@@ -4099,7 +4099,7 @@ construct_point(PG_FUNCTION_ARGS)
float8 y = PG_GETARG_FLOAT8(1);
Point *result;
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
point_construct(result, x, y);
@@ -4122,7 +4122,7 @@ point_add(PG_FUNCTION_ARGS)
Point *p2 = PG_GETARG_POINT_P(1);
Point *result;
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
point_add_point(result, p1, p2);
@@ -4145,7 +4145,7 @@ point_sub(PG_FUNCTION_ARGS)
Point *p2 = PG_GETARG_POINT_P(1);
Point *result;
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
point_sub_point(result, p1, p2);
@@ -4170,7 +4170,7 @@ point_mul(PG_FUNCTION_ARGS)
Point *p2 = PG_GETARG_POINT_P(1);
Point *result;
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
point_mul_point(result, p1, p2);
@@ -4199,7 +4199,7 @@ point_div(PG_FUNCTION_ARGS)
Point *p2 = PG_GETARG_POINT_P(1);
Point *result;
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
point_div_point(result, p1, p2);
@@ -4220,7 +4220,7 @@ points_box(PG_FUNCTION_ARGS)
Point *p2 = PG_GETARG_POINT_P(1);
BOX *result;
- result = (BOX *) palloc(sizeof(BOX));
+ result = palloc_object(BOX);
box_construct(result, p1, p2);
@@ -4234,7 +4234,7 @@ box_add(PG_FUNCTION_ARGS)
Point *p = PG_GETARG_POINT_P(1);
BOX *result;
- result = (BOX *) palloc(sizeof(BOX));
+ result = palloc_object(BOX);
point_add_point(&result->high, &box->high, p);
point_add_point(&result->low, &box->low, p);
@@ -4249,7 +4249,7 @@ box_sub(PG_FUNCTION_ARGS)
Point *p = PG_GETARG_POINT_P(1);
BOX *result;
- result = (BOX *) palloc(sizeof(BOX));
+ result = palloc_object(BOX);
point_sub_point(&result->high, &box->high, p);
point_sub_point(&result->low, &box->low, p);
@@ -4266,7 +4266,7 @@ box_mul(PG_FUNCTION_ARGS)
Point high,
low;
- result = (BOX *) palloc(sizeof(BOX));
+ result = palloc_object(BOX);
point_mul_point(&high, &box->high, p);
point_mul_point(&low, &box->low, p);
@@ -4285,7 +4285,7 @@ box_div(PG_FUNCTION_ARGS)
Point high,
low;
- result = (BOX *) palloc(sizeof(BOX));
+ result = palloc_object(BOX);
point_div_point(&high, &box->high, p);
point_div_point(&low, &box->low, p);
@@ -4304,7 +4304,7 @@ point_box(PG_FUNCTION_ARGS)
Point *pt = PG_GETARG_POINT_P(0);
BOX *box;
- box = (BOX *) palloc(sizeof(BOX));
+ box = palloc_object(BOX);
box->high.x = pt->x;
box->low.x = pt->x;
@@ -4324,7 +4324,7 @@ boxes_bound_box(PG_FUNCTION_ARGS)
*box2 = PG_GETARG_BOX_P(1),
*container;
- container = (BOX *) palloc(sizeof(BOX));
+ container = palloc_object(BOX);
container->high.x = float8_max(box1->high.x, box2->high.x);
container->low.x = float8_min(box1->low.x, box2->low.x);
@@ -4506,7 +4506,7 @@ poly_center(PG_FUNCTION_ARGS)
Point *result;
CIRCLE circle;
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
poly_to_circle(&circle, poly);
*result = circle.center;
@@ -4521,7 +4521,7 @@ poly_box(PG_FUNCTION_ARGS)
POLYGON *poly = PG_GETARG_POLYGON_P(0);
BOX *box;
- box = (BOX *) palloc(sizeof(BOX));
+ box = palloc_object(BOX);
*box = poly->boundbox;
PG_RETURN_BOX_P(box);
@@ -4612,7 +4612,7 @@ circle_in(PG_FUNCTION_ARGS)
{
char *str = PG_GETARG_CSTRING(0);
Node *escontext = fcinfo->context;
- CIRCLE *circle = (CIRCLE *) palloc(sizeof(CIRCLE));
+ CIRCLE *circle = palloc_object(CIRCLE);
char *s,
*cp;
int depth = 0;
@@ -4705,7 +4705,7 @@ circle_recv(PG_FUNCTION_ARGS)
StringInfo buf = (StringInfo) PG_GETARG_POINTER(0);
CIRCLE *circle;
- circle = (CIRCLE *) palloc(sizeof(CIRCLE));
+ circle = palloc_object(CIRCLE);
circle->center.x = pq_getmsgfloat8(buf);
circle->center.y = pq_getmsgfloat8(buf);
@@ -4968,7 +4968,7 @@ circle_add_pt(PG_FUNCTION_ARGS)
Point *point = PG_GETARG_POINT_P(1);
CIRCLE *result;
- result = (CIRCLE *) palloc(sizeof(CIRCLE));
+ result = palloc_object(CIRCLE);
point_add_point(&result->center, &circle->center, point);
result->radius = circle->radius;
@@ -4983,7 +4983,7 @@ circle_sub_pt(PG_FUNCTION_ARGS)
Point *point = PG_GETARG_POINT_P(1);
CIRCLE *result;
- result = (CIRCLE *) palloc(sizeof(CIRCLE));
+ result = palloc_object(CIRCLE);
point_sub_point(&result->center, &circle->center, point);
result->radius = circle->radius;
@@ -5002,7 +5002,7 @@ circle_mul_pt(PG_FUNCTION_ARGS)
Point *point = PG_GETARG_POINT_P(1);
CIRCLE *result;
- result = (CIRCLE *) palloc(sizeof(CIRCLE));
+ result = palloc_object(CIRCLE);
point_mul_point(&result->center, &circle->center, point);
result->radius = float8_mul(circle->radius, hypot(point->x, point->y));
@@ -5017,7 +5017,7 @@ circle_div_pt(PG_FUNCTION_ARGS)
Point *point = PG_GETARG_POINT_P(1);
CIRCLE *result;
- result = (CIRCLE *) palloc(sizeof(CIRCLE));
+ result = palloc_object(CIRCLE);
point_div_point(&result->center, &circle->center, point);
result->radius = float8_div(circle->radius, hypot(point->x, point->y));
@@ -5145,7 +5145,7 @@ circle_center(PG_FUNCTION_ARGS)
CIRCLE *circle = PG_GETARG_CIRCLE_P(0);
Point *result;
- result = (Point *) palloc(sizeof(Point));
+ result = palloc_object(Point);
result->x = circle->center.x;
result->y = circle->center.y;
@@ -5173,7 +5173,7 @@ cr_circle(PG_FUNCTION_ARGS)
float8 radius = PG_GETARG_FLOAT8(1);
CIRCLE *result;
- result = (CIRCLE *) palloc(sizeof(CIRCLE));
+ result = palloc_object(CIRCLE);
result->center.x = center->x;
result->center.y = center->y;
@@ -5189,7 +5189,7 @@ circle_box(PG_FUNCTION_ARGS)
BOX *box;
float8 delta;
- box = (BOX *) palloc(sizeof(BOX));
+ box = palloc_object(BOX);
delta = float8_div(circle->radius, sqrt(2.0));
@@ -5210,7 +5210,7 @@ box_circle(PG_FUNCTION_ARGS)
BOX *box = PG_GETARG_BOX_P(0);
CIRCLE *circle;
- circle = (CIRCLE *) palloc(sizeof(CIRCLE));
+ circle = palloc_object(CIRCLE);
circle->center.x = float8_div(float8_pl(box->high.x, box->low.x), 2.0);
circle->center.y = float8_div(float8_pl(box->high.y, box->low.y), 2.0);
@@ -5309,7 +5309,7 @@ poly_circle(PG_FUNCTION_ARGS)
POLYGON *poly = PG_GETARG_POLYGON_P(0);
CIRCLE *result;
- result = (CIRCLE *) palloc(sizeof(CIRCLE));
+ result = palloc_object(CIRCLE);
poly_to_circle(result, poly);
diff --git a/src/backend/utils/adt/geo_spgist.c b/src/backend/utils/adt/geo_spgist.c
index 4308a3065cd..94d351d4786 100644
--- a/src/backend/utils/adt/geo_spgist.c
+++ b/src/backend/utils/adt/geo_spgist.c
@@ -156,7 +156,7 @@ getQuadrant(BOX *centroid, BOX *inBox)
static RangeBox *
getRangeBox(BOX *box)
{
- RangeBox *range_box = (RangeBox *) palloc(sizeof(RangeBox));
+ RangeBox *range_box = palloc_object(RangeBox);
range_box->left.low = box->low.x;
range_box->left.high = box->high.x;
@@ -176,7 +176,7 @@ getRangeBox(BOX *box)
static RectBox *
initRectBox(void)
{
- RectBox *rect_box = (RectBox *) palloc(sizeof(RectBox));
+ RectBox *rect_box = palloc_object(RectBox);
float8 infinity = get_float8_infinity();
rect_box->range_box_x.left.low = -infinity;
@@ -204,7 +204,7 @@ initRectBox(void)
static RectBox *
nextRectBox(RectBox *rect_box, RangeBox *centroid, uint8 quadrant)
{
- RectBox *next_rect_box = (RectBox *) palloc(sizeof(RectBox));
+ RectBox *next_rect_box = palloc_object(RectBox);
memcpy(next_rect_box, rect_box, sizeof(RectBox));
@@ -445,10 +445,10 @@ spg_box_quad_picksplit(PG_FUNCTION_ARGS)
BOX *centroid;
int median,
i;
- float8 *lowXs = palloc(sizeof(float8) * in->nTuples);
- float8 *highXs = palloc(sizeof(float8) * in->nTuples);
- float8 *lowYs = palloc(sizeof(float8) * in->nTuples);
- float8 *highYs = palloc(sizeof(float8) * in->nTuples);
+ float8 *lowXs = palloc_array(float8, in->nTuples);
+ float8 *highXs = palloc_array(float8, in->nTuples);
+ float8 *lowYs = palloc_array(float8, in->nTuples);
+ float8 *highYs = palloc_array(float8, in->nTuples);
/* Calculate median of all 4D coordinates */
for (i = 0; i < in->nTuples; i++)
@@ -468,7 +468,7 @@ spg_box_quad_picksplit(PG_FUNCTION_ARGS)
median = in->nTuples / 2;
- centroid = palloc(sizeof(BOX));
+ centroid = palloc_object(BOX);
centroid->low.x = lowXs[median];
centroid->high.x = highXs[median];
@@ -482,8 +482,8 @@ spg_box_quad_picksplit(PG_FUNCTION_ARGS)
out->nNodes = 16;
out->nodeLabels = NULL; /* We don't need node labels. */
- out->mapTuplesToNodes = palloc(sizeof(int) * in->nTuples);
- out->leafTupleDatums = palloc(sizeof(Datum) * in->nTuples);
+ out->mapTuplesToNodes = palloc_array(int, in->nTuples);
+ out->leafTupleDatums = palloc_array(Datum, in->nTuples);
/*
* Assign ranges to corresponding nodes according to quadrants relative to
@@ -574,13 +574,13 @@ spg_box_quad_inner_consistent(PG_FUNCTION_ARGS)
{
/* Report that all nodes should be visited */
out->nNodes = in->nNodes;
- out->nodeNumbers = (int *) palloc(sizeof(int) * in->nNodes);
+ out->nodeNumbers = palloc_array(int, in->nNodes);
for (i = 0; i < in->nNodes; i++)
out->nodeNumbers[i] = i;
if (in->norderbys > 0 && in->nNodes > 0)
{
- double *distances = palloc(sizeof(double) * in->norderbys);
+ double *distances = palloc_array(double, in->norderbys);
int j;
for (j = 0; j < in->norderbys; j++)
@@ -590,12 +590,12 @@ spg_box_quad_inner_consistent(PG_FUNCTION_ARGS)
distances[j] = pointToRectBoxDistance(pt, rect_box);
}
- out->distances = (double **) palloc(sizeof(double *) * in->nNodes);
+ out->distances = palloc_array(double *, in->nNodes);
out->distances[0] = distances;
for (i = 1; i < in->nNodes; i++)
{
- out->distances[i] = palloc(sizeof(double) * in->norderbys);
+ out->distances[i] = palloc_array(double, in->norderbys);
memcpy(out->distances[i], distances,
sizeof(double) * in->norderbys);
}
@@ -609,7 +609,7 @@ spg_box_quad_inner_consistent(PG_FUNCTION_ARGS)
* following operations.
*/
centroid = getRangeBox(DatumGetBoxP(in->prefixDatum));
- queries = (RangeBox **) palloc(in->nkeys * sizeof(RangeBox *));
+ queries = palloc_array(RangeBox *, in->nkeys);
for (i = 0; i < in->nkeys; i++)
{
BOX *box = spg_box_quad_get_scankey_bbox(&in->scankeys[i], NULL);
@@ -619,10 +619,10 @@ spg_box_quad_inner_consistent(PG_FUNCTION_ARGS)
/* Allocate enough memory for nodes */
out->nNodes = 0;
- out->nodeNumbers = (int *) palloc(sizeof(int) * in->nNodes);
- out->traversalValues = (void **) palloc(sizeof(void *) * in->nNodes);
+ out->nodeNumbers = palloc_array(int, in->nNodes);
+ out->traversalValues = palloc_array(void *, in->nNodes);
if (in->norderbys > 0)
- out->distances = (double **) palloc(sizeof(double *) * in->nNodes);
+ out->distances = palloc_array(double *, in->nNodes);
/*
* We switch memory context, because we want to allocate memory for new
@@ -703,7 +703,7 @@ spg_box_quad_inner_consistent(PG_FUNCTION_ARGS)
if (in->norderbys > 0)
{
- double *distances = palloc(sizeof(double) * in->norderbys);
+ double *distances = palloc_array(double, in->norderbys);
int j;
out->distances[out->nNodes] = distances;
@@ -878,7 +878,7 @@ spg_poly_quad_compress(PG_FUNCTION_ARGS)
POLYGON *polygon = PG_GETARG_POLYGON_P(0);
BOX *box;
- box = (BOX *) palloc(sizeof(BOX));
+ box = palloc_object(BOX);
*box = polygon->boundbox;
PG_RETURN_BOX_P(box);
diff --git a/src/backend/utils/adt/int.c b/src/backend/utils/adt/int.c
index b5781989a64..60411ee024d 100644
--- a/src/backend/utils/adt/int.c
+++ b/src/backend/utils/adt/int.c
@@ -1537,7 +1537,7 @@ generate_series_step_int4(PG_FUNCTION_ARGS)
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
/* allocate memory for user context */
- fctx = (generate_series_fctx *) palloc(sizeof(generate_series_fctx));
+ fctx = palloc_object(generate_series_fctx);
/*
* Use fctx to keep state from call to call. Seed current with the
diff --git a/src/backend/utils/adt/int8.c b/src/backend/utils/adt/int8.c
index 9cd420b4b9d..678f971508b 100644
--- a/src/backend/utils/adt/int8.c
+++ b/src/backend/utils/adt/int8.c
@@ -1411,7 +1411,7 @@ generate_series_step_int8(PG_FUNCTION_ARGS)
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
/* allocate memory for user context */
- fctx = (generate_series_fctx *) palloc(sizeof(generate_series_fctx));
+ fctx = palloc_object(generate_series_fctx);
/*
* Use fctx to keep state from call to call. Seed current with the
diff --git a/src/backend/utils/adt/json.c b/src/backend/utils/adt/json.c
index 06dd62f0008..73cacf33e61 100644
--- a/src/backend/utils/adt/json.c
+++ b/src/backend/utils/adt/json.c
@@ -807,7 +807,7 @@ json_agg_transfn_worker(FunctionCallInfo fcinfo, bool absent_on_null)
* use the right context to enlarge the object if necessary.
*/
oldcontext = MemoryContextSwitchTo(aggcontext);
- state = (JsonAggState *) palloc(sizeof(JsonAggState));
+ state = palloc_object(JsonAggState);
state->str = makeStringInfo();
MemoryContextSwitchTo(oldcontext);
@@ -1029,7 +1029,7 @@ json_object_agg_transfn_worker(FunctionCallInfo fcinfo,
* sure they use the right context to enlarge the object if necessary.
*/
oldcontext = MemoryContextSwitchTo(aggcontext);
- state = (JsonAggState *) palloc(sizeof(JsonAggState));
+ state = palloc_object(JsonAggState);
state->str = makeStringInfo();
if (unique_keys)
json_unique_builder_init(&state->unique_check);
@@ -1762,7 +1762,7 @@ json_unique_object_start(void *_state)
return JSON_SUCCESS;
/* push object entry to stack */
- entry = palloc(sizeof(*entry));
+ entry = palloc_object(JsonUniqueStackEntry);
entry->object_id = state->id_counter++;
entry->parent = state->stack;
state->stack = entry;
diff --git a/src/backend/utils/adt/jsonb_gin.c b/src/backend/utils/adt/jsonb_gin.c
index a6d3332bb42..a1daa3f5034 100644
--- a/src/backend/utils/adt/jsonb_gin.c
+++ b/src/backend/utils/adt/jsonb_gin.c
@@ -163,7 +163,7 @@ static void
init_gin_entries(GinEntries *entries, int preallocated)
{
entries->allocated = preallocated;
- entries->buf = preallocated ? palloc(sizeof(Datum) * preallocated) : NULL;
+ entries->buf = preallocated ? palloc_array(Datum, preallocated) : NULL;
entries->count = 0;
}
@@ -178,13 +178,14 @@ add_gin_entry(GinEntries *entries, Datum entry)
if (entries->allocated)
{
entries->allocated *= 2;
- entries->buf = repalloc(entries->buf,
- sizeof(Datum) * entries->allocated);
+ entries->buf = repalloc_array(entries->buf,
+ Datum,
+ entries->allocated);
}
else
{
entries->allocated = 8;
- entries->buf = palloc(sizeof(Datum) * entries->allocated);
+ entries->buf = palloc_array(Datum, entries->allocated);
}
}
@@ -307,7 +308,7 @@ jsonb_ops__add_path_item(JsonPathGinPath *path, JsonPathItem *jsp)
return false;
}
- pentry = palloc(sizeof(*pentry));
+ pentry = palloc_object(JsonPathGinPathItem);
pentry->type = jsp->type;
pentry->keyName = keyName;
@@ -785,7 +786,7 @@ extract_jsp_query(JsonPath *jp, StrategyNumber strat, bool pathOps,
if (!*nentries)
return NULL;
- *extra_data = palloc0(sizeof(**extra_data) * entries.count);
+ *extra_data = palloc0_array(Pointer, entries.count);
**extra_data = (Pointer) node;
return entries.buf;
@@ -869,7 +870,7 @@ gin_extract_jsonb_query(PG_FUNCTION_ARGS)
text *query = PG_GETARG_TEXT_PP(0);
*nentries = 1;
- entries = (Datum *) palloc(sizeof(Datum));
+ entries = palloc_object(Datum);
entries[0] = make_text_key(JGINFLAG_KEY,
VARDATA_ANY(query),
VARSIZE_ANY_EXHDR(query));
@@ -887,7 +888,7 @@ gin_extract_jsonb_query(PG_FUNCTION_ARGS)
deconstruct_array_builtin(query, TEXTOID, &key_datums, &key_nulls, &key_count);
- entries = (Datum *) palloc(sizeof(Datum) * key_count);
+ entries = palloc_array(Datum, key_count);
for (i = 0, j = 0; i < key_count; i++)
{
@@ -1124,7 +1125,7 @@ gin_extract_jsonb_path(PG_FUNCTION_ARGS)
case WJB_BEGIN_OBJECT:
/* Push a stack level for this object */
parent = stack;
- stack = (PathHashStack *) palloc(sizeof(PathHashStack));
+ stack = palloc_object(PathHashStack);
/*
* We pass forward hashes from outer nesting levels so that
diff --git a/src/backend/utils/adt/jsonb_util.c b/src/backend/utils/adt/jsonb_util.c
index 1eb8dffa8bd..28e1ee18ce1 100644
--- a/src/backend/utils/adt/jsonb_util.c
+++ b/src/backend/utils/adt/jsonb_util.c
@@ -359,7 +359,7 @@ findJsonbValueFromContainer(JsonbContainer *container, uint32 flags,
if ((flags & JB_FARRAY) && JsonContainerIsArray(container))
{
- JsonbValue *result = palloc(sizeof(JsonbValue));
+ JsonbValue *result = palloc_object(JsonbValue);
char *base_addr = (char *) (children + count);
uint32 offset = 0;
int i;
@@ -442,7 +442,7 @@ getKeyJsonValueFromContainer(JsonbContainer *container,
int index = stopMiddle + count;
if (!res)
- res = palloc(sizeof(JsonbValue));
+ res = palloc_object(JsonbValue);
fillJsonbValue(container, index, baseAddr,
getJsonbOffset(container, index),
@@ -484,7 +484,7 @@ getIthJsonbValueFromContainer(JsonbContainer *container, uint32 i)
if (i >= nelements)
return NULL;
- result = palloc(sizeof(JsonbValue));
+ result = palloc_object(JsonbValue);
fillJsonbValue(container, i, base_addr,
getJsonbOffset(container, i),
@@ -1127,7 +1127,7 @@ iteratorFromContainer(JsonbContainer *container, JsonbIterator *parent)
{
JsonbIterator *it;
- it = palloc0(sizeof(JsonbIterator));
+ it = palloc0_object(JsonbIterator);
it->container = container;
it->parent = parent;
it->nElems = JsonContainerSize(container);
@@ -1373,7 +1373,7 @@ JsonbDeepContains(JsonbIterator **val, JsonbIterator **mContained)
uint32 j = 0;
/* Make room for all possible values */
- lhsConts = palloc(sizeof(JsonbValue) * nLhsElems);
+ lhsConts = palloc_array(JsonbValue, nLhsElems);
for (i = 0; i < nLhsElems; i++)
{
diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c
index 22de18bc5b9..980e2882957 100644
--- a/src/backend/utils/adt/jsonfuncs.c
+++ b/src/backend/utils/adt/jsonfuncs.c
@@ -593,12 +593,12 @@ jsonb_object_keys(PG_FUNCTION_ARGS)
funcctx = SRF_FIRSTCALL_INIT();
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
- state = palloc(sizeof(OkeysState));
+ state = palloc_object(OkeysState);
state->result_size = JB_ROOT_COUNT(jb);
state->result_count = 0;
state->sent_count = 0;
- state->result = palloc(state->result_size * sizeof(char *));
+ state->result = palloc_array(char *, state->result_size);
it = JsonbIteratorInit(&jb->root);
@@ -744,14 +744,14 @@ json_object_keys(PG_FUNCTION_ARGS)
funcctx = SRF_FIRSTCALL_INIT();
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
- state = palloc(sizeof(OkeysState));
- sem = palloc0(sizeof(JsonSemAction));
+ state = palloc_object(OkeysState);
+ sem = palloc0_object(JsonSemAction);
state->lex = makeJsonLexContext(&lex, json, true);
state->result_size = 256;
state->result_count = 0;
state->sent_count = 0;
- state->result = palloc(256 * sizeof(char *));
+ state->result = palloc_array(char *, 256);
sem->semstate = state;
sem->array_start = okeys_array_start;
@@ -1045,8 +1045,8 @@ get_path_all(FunctionCallInfo fcinfo, bool as_text)
deconstruct_array_builtin(path, TEXTOID, &pathtext, &pathnulls, &npath);
- tpath = palloc(npath * sizeof(char *));
- ipath = palloc(npath * sizeof(int));
+ tpath = palloc_array(char *, npath);
+ ipath = palloc_array(int, npath);
for (i = 0; i < npath; i++)
{
@@ -1106,8 +1106,8 @@ get_worker(text *json,
int npath,
bool normalize_results)
{
- JsonSemAction *sem = palloc0(sizeof(JsonSemAction));
- GetState *state = palloc0(sizeof(GetState));
+ JsonSemAction *sem = palloc0_object(JsonSemAction);
+ GetState *state = palloc0_object(GetState);
Assert(npath >= 0);
@@ -1118,8 +1118,8 @@ get_worker(text *json,
state->npath = npath;
state->path_names = tpath;
state->path_indexes = ipath;
- state->pathok = palloc0(sizeof(bool) * npath);
- state->array_cur_index = palloc(sizeof(int) * npath);
+ state->pathok = palloc0_array(bool, npath);
+ state->array_cur_index = palloc_array(int, npath);
if (npath > 0)
state->pathok[0] = true;
@@ -1681,7 +1681,7 @@ jsonb_set_element(Jsonb *jb, const Datum *path, int path_len,
{
JsonbInState state = {0};
JsonbIterator *it;
- bool *path_nulls = palloc0(path_len * sizeof(bool));
+ bool *path_nulls = palloc0_array(bool, path_len);
if (newval->type == jbvArray && newval->val.array.rawScalar)
*newval = newval->val.array.elems[0];
@@ -1726,7 +1726,7 @@ push_path(JsonbInState *st, int level, const Datum *path_elems,
* it contains only information about path slice from level to the end,
* the access index must be normalized by level.
*/
- enum jbvType *tpath = palloc0((path_len - level) * sizeof(enum jbvType));
+ enum jbvType *tpath = palloc0_array(enum jbvType, path_len - level);
JsonbValue newkey;
/*
@@ -1853,14 +1853,14 @@ json_array_length(PG_FUNCTION_ARGS)
JsonLexContext lex;
JsonSemAction *sem;
- state = palloc0(sizeof(AlenState));
+ state = palloc0_object(AlenState);
state->lex = makeJsonLexContext(&lex, json, false);
/* palloc0 does this for us */
#if 0
state->count = 0;
#endif
- sem = palloc0(sizeof(JsonSemAction));
+ sem = palloc0_object(JsonSemAction);
sem->semstate = state;
sem->object_start = alen_object_start;
sem->scalar = alen_scalar;
@@ -2060,8 +2060,8 @@ each_worker(FunctionCallInfo fcinfo, bool as_text)
ReturnSetInfo *rsi;
EachState *state;
- state = palloc0(sizeof(EachState));
- sem = palloc0(sizeof(JsonSemAction));
+ state = palloc0_object(EachState);
+ sem = palloc0_object(JsonSemAction);
rsi = (ReturnSetInfo *) fcinfo->resultinfo;
@@ -2313,8 +2313,8 @@ elements_worker(FunctionCallInfo fcinfo, const char *funcname, bool as_text)
/* elements only needs escaped strings when as_text */
makeJsonLexContext(&lex, json, as_text);
- state = palloc0(sizeof(ElementsState));
- sem = palloc0(sizeof(JsonSemAction));
+ state = palloc0_object(ElementsState);
+ sem = palloc0_object(JsonSemAction);
InitMaterializedSRF(fcinfo, MAT_SRF_USE_EXPECTED_DESC | MAT_SRF_BLESS);
rsi = (ReturnSetInfo *) fcinfo->resultinfo;
@@ -2569,8 +2569,8 @@ populate_array_assign_ndims(PopulateArrayContext *ctx, int ndims)
}
ctx->ndims = ndims;
- ctx->dims = palloc(sizeof(int) * ndims);
- ctx->sizes = palloc0(sizeof(int) * ndims);
+ ctx->dims = palloc_array(int, ndims);
+ ctx->sizes = palloc0_array(int, ndims);
for (i = 0; i < ndims; i++)
ctx->dims[i] = -1; /* dimensions are unknown yet */
@@ -2955,7 +2955,7 @@ populate_array(ArrayIOData *aio,
Assert(ctx.ndims > 0);
- lbs = palloc(sizeof(int) * ctx.ndims);
+ lbs = palloc_array(int, ctx.ndims);
for (i = 0; i < ctx.ndims; i++)
lbs[i] = 1;
@@ -3821,8 +3821,8 @@ get_json_object_as_hash(const char *json, int len, const char *funcname,
&ctl,
HASH_ELEM | HASH_STRINGS | HASH_CONTEXT);
- state = palloc0(sizeof(JHashState));
- sem = palloc0(sizeof(JsonSemAction));
+ state = palloc0_object(JHashState);
+ sem = palloc0_object(JsonSemAction);
state->function_name = funcname;
state->hash = tab;
@@ -4119,7 +4119,7 @@ populate_recordset_worker(FunctionCallInfo fcinfo, const char *funcname,
*/
update_cached_tupdesc(&cache->c.io.composite, cache->fn_mcxt);
- state = palloc0(sizeof(PopulateRecordsetState));
+ state = palloc0_object(PopulateRecordsetState);
/* make tuplestore in a sufficiently long-lived memory context */
old_cxt = MemoryContextSwitchTo(rsi->econtext->ecxt_per_query_memory);
@@ -4138,7 +4138,7 @@ populate_recordset_worker(FunctionCallInfo fcinfo, const char *funcname,
JsonLexContext lex;
JsonSemAction *sem;
- sem = palloc0(sizeof(JsonSemAction));
+ sem = palloc0_object(JsonSemAction);
makeJsonLexContext(&lex, json, true);
@@ -4508,8 +4508,8 @@ json_strip_nulls(PG_FUNCTION_ARGS)
JsonLexContext lex;
JsonSemAction *sem;
- state = palloc0(sizeof(StripnullState));
- sem = palloc0(sizeof(JsonSemAction));
+ state = palloc0_object(StripnullState);
+ sem = palloc0_object(JsonSemAction);
initStringInfo(&strbuf);
state->lex = makeJsonLexContext(&lex, json, true);
@@ -5700,8 +5700,8 @@ iterate_json_values(text *json, uint32 flags, void *action_state,
JsonIterateStringValuesAction action)
{
JsonLexContext lex;
- JsonSemAction *sem = palloc0(sizeof(JsonSemAction));
- IterateJsonStringValuesState *state = palloc0(sizeof(IterateJsonStringValuesState));
+ JsonSemAction *sem = palloc0_object(JsonSemAction);
+ IterateJsonStringValuesState *state = palloc0_object(IterateJsonStringValuesState);
state->lex = makeJsonLexContext(&lex, json, true);
state->action = action;
@@ -5820,8 +5820,8 @@ transform_json_string_values(text *json, void *action_state,
JsonTransformStringValuesAction transform_action)
{
JsonLexContext lex;
- JsonSemAction *sem = palloc0(sizeof(JsonSemAction));
- TransformJsonStringValuesState *state = palloc0(sizeof(TransformJsonStringValuesState));
+ JsonSemAction *sem = palloc0_object(JsonSemAction);
+ TransformJsonStringValuesState *state = palloc0_object(TransformJsonStringValuesState);
StringInfoData strbuf;
initStringInfo(&strbuf);
diff --git a/src/backend/utils/adt/jsonpath_exec.c b/src/backend/utils/adt/jsonpath_exec.c
index 3f92baf6e82..fc0e05e8789 100644
--- a/src/backend/utils/adt/jsonpath_exec.c
+++ b/src/backend/utils/adt/jsonpath_exec.c
@@ -775,7 +775,7 @@ executeItemOptUnwrapTarget(JsonPathExecContext *cxt, JsonPathItem *jsp,
break;
}
- v = hasNext ? &vbuf : palloc(sizeof(*v));
+ v = hasNext ? &vbuf : palloc_object(JsonbValue);
baseObject = cxt->baseObject;
getJsonPathItem(cxt, jsp, v);
@@ -1088,7 +1088,7 @@ executeItemOptUnwrapTarget(JsonPathExecContext *cxt, JsonPathItem *jsp,
case jpiType:
{
- JsonbValue *jbv = palloc(sizeof(*jbv));
+ JsonbValue *jbv = palloc_object(JsonbValue);
jbv->type = jbvString;
jbv->val.string.val = pstrdup(JsonbTypeName(jb));
@@ -1118,7 +1118,7 @@ executeItemOptUnwrapTarget(JsonPathExecContext *cxt, JsonPathItem *jsp,
size = 1;
}
- jb = palloc(sizeof(*jb));
+ jb = palloc_object(JsonbValue);
jb->type = jbvNumeric;
jb->val.numeric = int64_to_numeric(size);
@@ -1249,7 +1249,7 @@ executeItemOptUnwrapTarget(JsonPathExecContext *cxt, JsonPathItem *jsp,
last = cxt->innermostArraySize - 1;
- lastjbv = hasNext ? &tmpjbv : palloc(sizeof(*lastjbv));
+ lastjbv = hasNext ? &tmpjbv : palloc_object(JsonbValue);
lastjbv->type = jbvNumeric;
lastjbv->val.numeric = int64_to_numeric(last);
@@ -2162,7 +2162,7 @@ executeBinaryArithmExpr(JsonPathExecContext *cxt, JsonPathItem *jsp,
if (!jspGetNext(jsp, &elem) && !found)
return jperOk;
- lval = palloc(sizeof(*lval));
+ lval = palloc_object(JsonbValue);
lval->type = jbvNumeric;
lval->val.numeric = res;
@@ -2317,7 +2317,7 @@ executeNumericItemMethod(JsonPathExecContext *cxt, JsonPathItem *jsp,
if (!jspGetNext(jsp, &next) && !found)
return jperOk;
- jb = palloc(sizeof(*jb));
+ jb = palloc_object(JsonbValue);
jb->type = jbvNumeric;
jb->val.numeric = DatumGetNumeric(datum);
@@ -2783,7 +2783,7 @@ executeDateTimeMethod(JsonPathExecContext *cxt, JsonPathItem *jsp,
if (!hasNext && !found)
return res;
- jb = hasNext ? &jbvbuf : palloc(sizeof(*jb));
+ jb = hasNext ? &jbvbuf : palloc_object(JsonbValue);
jb->type = jbvDatetime;
jb->val.datetime.value = value;
@@ -3018,7 +3018,7 @@ GetJsonPathVar(void *cxt, char *varName, int varNameLen,
return NULL;
}
- result = palloc(sizeof(JsonbValue));
+ result = palloc_object(JsonbValue);
if (var->isnull)
{
*baseObjectId = 0;
@@ -3445,7 +3445,7 @@ compareNumeric(Numeric a, Numeric b)
static JsonbValue *
copyJsonbValue(JsonbValue *src)
{
- JsonbValue *dst = palloc(sizeof(*dst));
+ JsonbValue *dst = palloc_object(JsonbValue);
*dst = *src;
@@ -4121,7 +4121,7 @@ JsonTableInitOpaque(TableFuncScanState *state, int natts)
JsonExpr *je = castNode(JsonExpr, tf->docexpr);
List *args = NIL;
- cxt = palloc0(sizeof(JsonTableExecContext));
+ cxt = palloc0_object(JsonTableExecContext);
cxt->magic = JSON_TABLE_EXEC_CONTEXT_MAGIC;
/*
@@ -4140,7 +4140,7 @@ JsonTableInitOpaque(TableFuncScanState *state, int natts)
{
ExprState *state = lfirst_node(ExprState, exprlc);
String *name = lfirst_node(String, namelc);
- JsonPathVariable *var = palloc(sizeof(*var));
+ JsonPathVariable *var = palloc_object(JsonPathVariable);
var->name = pstrdup(name->sval);
var->namelen = strlen(var->name);
@@ -4158,8 +4158,7 @@ JsonTableInitOpaque(TableFuncScanState *state, int natts)
}
}
- cxt->colplanstates = palloc(sizeof(JsonTablePlanState *) *
- list_length(tf->colvalexprs));
+ cxt->colplanstates = palloc_array(JsonTablePlanState *, list_length(tf->colvalexprs));
/*
* Initialize plan for the root path and, recursively, also any child
@@ -4197,7 +4196,7 @@ JsonTableInitPlan(JsonTableExecContext *cxt, JsonTablePlan *plan,
JsonTablePlanState *parentstate,
List *args, MemoryContext mcxt)
{
- JsonTablePlanState *planstate = palloc0(sizeof(*planstate));
+ JsonTablePlanState *planstate = palloc0_object(JsonTablePlanState);
planstate->plan = plan;
planstate->parent = parentstate;
diff --git a/src/backend/utils/adt/jsonpath_gram.y b/src/backend/utils/adt/jsonpath_gram.y
index 499745a8fef..411a8baf380 100644
--- a/src/backend/utils/adt/jsonpath_gram.y
+++ b/src/backend/utils/adt/jsonpath_gram.y
@@ -120,7 +120,7 @@ static bool makeItemLikeRegex(JsonPathParseItem *expr,
result:
mode expr_or_predicate {
- *result = palloc(sizeof(JsonPathParseResult));
+ *result = palloc_object(JsonPathParseResult);
(*result)->expr = $2;
(*result)->lax = $1;
(void) yynerrs;
@@ -384,7 +384,7 @@ method:
static JsonPathParseItem *
makeItemType(JsonPathItemType type)
{
- JsonPathParseItem *v = palloc(sizeof(*v));
+ JsonPathParseItem *v = palloc_object(JsonPathParseItem);
CHECK_FOR_INTERRUPTS();
diff --git a/src/backend/utils/adt/lockfuncs.c b/src/backend/utils/adt/lockfuncs.c
index df938812dd3..bf38d68aa03 100644
--- a/src/backend/utils/adt/lockfuncs.c
+++ b/src/backend/utils/adt/lockfuncs.c
@@ -152,7 +152,7 @@ pg_lock_status(PG_FUNCTION_ARGS)
* Collect all the locking information that we will format and send
* out as a result set.
*/
- mystatus = (PG_Lock_Status *) palloc(sizeof(PG_Lock_Status));
+ mystatus = palloc_object(PG_Lock_Status);
funcctx->user_fctx = mystatus;
mystatus->lockData = GetLockStatusData();
diff --git a/src/backend/utils/adt/mac.c b/src/backend/utils/adt/mac.c
index bb38ef2f5e4..35234e700ff 100644
--- a/src/backend/utils/adt/mac.c
+++ b/src/backend/utils/adt/mac.c
@@ -101,7 +101,7 @@ macaddr_in(PG_FUNCTION_ARGS)
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
errmsg("invalid octet value in \"macaddr\" value: \"%s\"", str)));
- result = (macaddr *) palloc(sizeof(macaddr));
+ result = palloc_object(macaddr);
result->a = a;
result->b = b;
@@ -142,7 +142,7 @@ macaddr_recv(PG_FUNCTION_ARGS)
StringInfo buf = (StringInfo) PG_GETARG_POINTER(0);
macaddr *addr;
- addr = (macaddr *) palloc(sizeof(macaddr));
+ addr = palloc_object(macaddr);
addr->a = pq_getmsgbyte(buf);
addr->b = pq_getmsgbyte(buf);
@@ -289,7 +289,7 @@ macaddr_not(PG_FUNCTION_ARGS)
macaddr *addr = PG_GETARG_MACADDR_P(0);
macaddr *result;
- result = (macaddr *) palloc(sizeof(macaddr));
+ result = palloc_object(macaddr);
result->a = ~addr->a;
result->b = ~addr->b;
result->c = ~addr->c;
@@ -306,7 +306,7 @@ macaddr_and(PG_FUNCTION_ARGS)
macaddr *addr2 = PG_GETARG_MACADDR_P(1);
macaddr *result;
- result = (macaddr *) palloc(sizeof(macaddr));
+ result = palloc_object(macaddr);
result->a = addr1->a & addr2->a;
result->b = addr1->b & addr2->b;
result->c = addr1->c & addr2->c;
@@ -323,7 +323,7 @@ macaddr_or(PG_FUNCTION_ARGS)
macaddr *addr2 = PG_GETARG_MACADDR_P(1);
macaddr *result;
- result = (macaddr *) palloc(sizeof(macaddr));
+ result = palloc_object(macaddr);
result->a = addr1->a | addr2->a;
result->b = addr1->b | addr2->b;
result->c = addr1->c | addr2->c;
@@ -343,7 +343,7 @@ macaddr_trunc(PG_FUNCTION_ARGS)
macaddr *addr = PG_GETARG_MACADDR_P(0);
macaddr *result;
- result = (macaddr *) palloc(sizeof(macaddr));
+ result = palloc_object(macaddr);
result->a = addr->a;
result->b = addr->b;
@@ -374,7 +374,7 @@ macaddr_sortsupport(PG_FUNCTION_ARGS)
oldcontext = MemoryContextSwitchTo(ssup->ssup_cxt);
- uss = palloc(sizeof(macaddr_sortsupport_state));
+ uss = palloc_object(macaddr_sortsupport_state);
uss->input_count = 0;
uss->estimating = true;
initHyperLogLog(&uss->abbr_card, 10);
diff --git a/src/backend/utils/adt/mac8.c b/src/backend/utils/adt/mac8.c
index 08e41ba4eea..ea715a7a0d4 100644
--- a/src/backend/utils/adt/mac8.c
+++ b/src/backend/utils/adt/mac8.c
@@ -207,7 +207,7 @@ macaddr8_in(PG_FUNCTION_ARGS)
else if (count != 8)
goto fail;
- result = (macaddr8 *) palloc0(sizeof(macaddr8));
+ result = palloc0_object(macaddr8);
result->a = a;
result->b = b;
@@ -256,7 +256,7 @@ macaddr8_recv(PG_FUNCTION_ARGS)
StringInfo buf = (StringInfo) PG_GETARG_POINTER(0);
macaddr8 *addr;
- addr = (macaddr8 *) palloc0(sizeof(macaddr8));
+ addr = palloc0_object(macaddr8);
addr->a = pq_getmsgbyte(buf);
addr->b = pq_getmsgbyte(buf);
@@ -417,7 +417,7 @@ macaddr8_not(PG_FUNCTION_ARGS)
macaddr8 *addr = PG_GETARG_MACADDR8_P(0);
macaddr8 *result;
- result = (macaddr8 *) palloc0(sizeof(macaddr8));
+ result = palloc0_object(macaddr8);
result->a = ~addr->a;
result->b = ~addr->b;
result->c = ~addr->c;
@@ -437,7 +437,7 @@ macaddr8_and(PG_FUNCTION_ARGS)
macaddr8 *addr2 = PG_GETARG_MACADDR8_P(1);
macaddr8 *result;
- result = (macaddr8 *) palloc0(sizeof(macaddr8));
+ result = palloc0_object(macaddr8);
result->a = addr1->a & addr2->a;
result->b = addr1->b & addr2->b;
result->c = addr1->c & addr2->c;
@@ -457,7 +457,7 @@ macaddr8_or(PG_FUNCTION_ARGS)
macaddr8 *addr2 = PG_GETARG_MACADDR8_P(1);
macaddr8 *result;
- result = (macaddr8 *) palloc0(sizeof(macaddr8));
+ result = palloc0_object(macaddr8);
result->a = addr1->a | addr2->a;
result->b = addr1->b | addr2->b;
result->c = addr1->c | addr2->c;
@@ -479,7 +479,7 @@ macaddr8_trunc(PG_FUNCTION_ARGS)
macaddr8 *addr = PG_GETARG_MACADDR8_P(0);
macaddr8 *result;
- result = (macaddr8 *) palloc0(sizeof(macaddr8));
+ result = palloc0_object(macaddr8);
result->a = addr->a;
result->b = addr->b;
@@ -502,7 +502,7 @@ macaddr8_set7bit(PG_FUNCTION_ARGS)
macaddr8 *addr = PG_GETARG_MACADDR8_P(0);
macaddr8 *result;
- result = (macaddr8 *) palloc0(sizeof(macaddr8));
+ result = palloc0_object(macaddr8);
result->a = addr->a | 0x02;
result->b = addr->b;
@@ -526,7 +526,7 @@ macaddrtomacaddr8(PG_FUNCTION_ARGS)
macaddr *addr6 = PG_GETARG_MACADDR_P(0);
macaddr8 *result;
- result = (macaddr8 *) palloc0(sizeof(macaddr8));
+ result = palloc0_object(macaddr8);
result->a = addr6->a;
result->b = addr6->b;
@@ -547,7 +547,7 @@ macaddr8tomacaddr(PG_FUNCTION_ARGS)
macaddr8 *addr = PG_GETARG_MACADDR8_P(0);
macaddr *result;
- result = (macaddr *) palloc0(sizeof(macaddr));
+ result = palloc0_object(macaddr);
if ((addr->d != 0xFF) || (addr->e != 0xFE))
ereport(ERROR,
diff --git a/src/backend/utils/adt/mcxtfuncs.c b/src/backend/utils/adt/mcxtfuncs.c
index fe6dce9cba3..46dfb3dd133 100644
--- a/src/backend/utils/adt/mcxtfuncs.c
+++ b/src/backend/utils/adt/mcxtfuncs.c
@@ -52,7 +52,7 @@ int_list_to_array(const List *list)
ArrayType *result_array;
length = list_length(list);
- datum_array = (Datum *) palloc(length * sizeof(Datum));
+ datum_array = palloc_array(Datum, length);
foreach_int(i, list)
datum_array[foreach_current_index(i)] = Int32GetDatum(i);
diff --git a/src/backend/utils/adt/misc.c b/src/backend/utils/adt/misc.c
index a365c432d34..c32f24fbf97 100644
--- a/src/backend/utils/adt/misc.c
+++ b/src/backend/utils/adt/misc.c
@@ -487,7 +487,7 @@ pg_get_catalog_foreign_keys(PG_FUNCTION_ARGS)
* array_in, and it wouldn't be very efficient if we could. Fill an
* FmgrInfo to use for the call.
*/
- arrayinp = (FmgrInfo *) palloc(sizeof(FmgrInfo));
+ arrayinp = palloc_object(FmgrInfo);
fmgr_info(F_ARRAY_IN, arrayinp);
funcctx->user_fctx = arrayinp;
diff --git a/src/backend/utils/adt/multirangetypes.c b/src/backend/utils/adt/multirangetypes.c
index e259644c6ca..169acf0ef63 100644
--- a/src/backend/utils/adt/multirangetypes.c
+++ b/src/backend/utils/adt/multirangetypes.c
@@ -125,7 +125,7 @@ multirange_in(PG_FUNCTION_ARGS)
int32 range_count = 0;
int32 range_capacity = 8;
RangeType *range;
- RangeType **ranges = palloc(range_capacity * sizeof(RangeType *));
+ RangeType **ranges = palloc_array(RangeType *, range_capacity);
MultirangeIOData *cache;
MultirangeType *ret;
MultirangeParseState parse_state;
@@ -348,7 +348,7 @@ multirange_recv(PG_FUNCTION_ARGS)
cache = get_multirange_io_data(fcinfo, mltrngtypoid, IOFunc_receive);
range_count = pq_getmsgint(buf, 4);
- ranges = palloc(range_count * sizeof(RangeType *));
+ ranges = palloc_array(RangeType *, range_count);
initStringInfo(&tmpbuf);
for (int i = 0; i < range_count; i++)
@@ -836,7 +836,7 @@ multirange_deserialize(TypeCacheEntry *rangetyp,
{
int i;
- *ranges = palloc(*range_count * sizeof(RangeType *));
+ *ranges = palloc_array(RangeType *, *range_count);
for (i = 0; i < *range_count; i++)
(*ranges)[i] = multirange_get_range(rangetyp, multirange, i);
}
@@ -2818,7 +2818,7 @@ multirange_unnest(PG_FUNCTION_ARGS)
mr = PG_GETARG_MULTIRANGE_P(0);
/* allocate memory for user context */
- fctx = (multirange_unnest_fctx *) palloc(sizeof(multirange_unnest_fctx));
+ fctx = palloc_object(multirange_unnest_fctx);
/* initialize state */
fctx->mr = mr;
diff --git a/src/backend/utils/adt/multirangetypes_selfuncs.c b/src/backend/utils/adt/multirangetypes_selfuncs.c
index 21f0205d803..fc5a4354fce 100644
--- a/src/backend/utils/adt/multirangetypes_selfuncs.c
+++ b/src/backend/utils/adt/multirangetypes_selfuncs.c
@@ -496,8 +496,8 @@ calc_hist_selectivity(TypeCacheEntry *typcache, VariableStatData *vardata,
* bounds.
*/
nhist = hslot.nvalues;
- hist_lower = (RangeBound *) palloc(sizeof(RangeBound) * nhist);
- hist_upper = (RangeBound *) palloc(sizeof(RangeBound) * nhist);
+ hist_lower = palloc_array(RangeBound, nhist);
+ hist_upper = palloc_array(RangeBound, nhist);
for (i = 0; i < nhist; i++)
{
bool empty;
diff --git a/src/backend/utils/adt/multixactfuncs.c b/src/backend/utils/adt/multixactfuncs.c
index e74ea938348..a428e140bc4 100644
--- a/src/backend/utils/adt/multixactfuncs.c
+++ b/src/backend/utils/adt/multixactfuncs.c
@@ -50,7 +50,7 @@ pg_get_multixact_members(PG_FUNCTION_ARGS)
funccxt = SRF_FIRSTCALL_INIT();
oldcxt = MemoryContextSwitchTo(funccxt->multi_call_memory_ctx);
- multi = palloc(sizeof(mxact));
+ multi = palloc_object(mxact);
/* no need to allow for old values here */
multi->nmembers = GetMultiXactIdMembers(mxid, &multi->members, false,
false);
diff --git a/src/backend/utils/adt/network.c b/src/backend/utils/adt/network.c
index 3cb0ab6829a..3a2002097dd 100644
--- a/src/backend/utils/adt/network.c
+++ b/src/backend/utils/adt/network.c
@@ -75,7 +75,7 @@ network_in(char *src, bool is_cidr, Node *escontext)
int bits;
inet *dst;
- dst = (inet *) palloc0(sizeof(inet));
+ dst = (inet *) palloc0_object(inet);
/*
* First, check to see if this is an IPv6 or IPv4 address. IPv6 addresses
@@ -196,7 +196,7 @@ network_recv(StringInfo buf, bool is_cidr)
i;
/* make sure any unused bits in a CIDR value are zeroed */
- addr = (inet *) palloc0(sizeof(inet));
+ addr = palloc0_object(inet);
ip_family(addr) = pq_getmsgbyte(buf);
if (ip_family(addr) != PGSQL_AF_INET &&
@@ -363,7 +363,7 @@ cidr_set_masklen(PG_FUNCTION_ARGS)
inet *
cidr_set_masklen_internal(const inet *src, int bits)
{
- inet *dst = (inet *) palloc0(sizeof(inet));
+ inet *dst = palloc0_object(inet);
ip_family(dst) = ip_family(src);
ip_bits(dst) = bits;
@@ -444,7 +444,7 @@ network_sortsupport(PG_FUNCTION_ARGS)
oldcontext = MemoryContextSwitchTo(ssup->ssup_cxt);
- uss = palloc(sizeof(network_sortsupport_state));
+ uss = palloc_object(network_sortsupport_state);
uss->input_count = 0;
uss->estimating = true;
initHyperLogLog(&uss->abbr_card, 10);
@@ -1227,7 +1227,7 @@ network_broadcast(PG_FUNCTION_ARGS)
*b;
/* make sure any unused bits are zeroed */
- dst = (inet *) palloc0(sizeof(inet));
+ dst = palloc0_object(inet);
maxbytes = ip_addrsize(ip);
bits = ip_bits(ip);
@@ -1271,7 +1271,7 @@ network_network(PG_FUNCTION_ARGS)
*b;
/* make sure any unused bits are zeroed */
- dst = (inet *) palloc0(sizeof(inet));
+ dst = palloc0_object(inet);
bits = ip_bits(ip);
a = ip_addr(ip);
@@ -1314,7 +1314,7 @@ network_netmask(PG_FUNCTION_ARGS)
unsigned char *b;
/* make sure any unused bits are zeroed */
- dst = (inet *) palloc0(sizeof(inet));
+ dst = palloc0_object(inet);
bits = ip_bits(ip);
b = ip_addr(dst);
@@ -1357,7 +1357,7 @@ network_hostmask(PG_FUNCTION_ARGS)
unsigned char *b;
/* make sure any unused bits are zeroed */
- dst = (inet *) palloc0(sizeof(inet));
+ dst = palloc0_object(inet);
maxbytes = ip_addrsize(ip);
bits = ip_maxbits(ip) - ip_bits(ip);
@@ -1792,7 +1792,7 @@ inetnot(PG_FUNCTION_ARGS)
inet *ip = PG_GETARG_INET_PP(0);
inet *dst;
- dst = (inet *) palloc0(sizeof(inet));
+ dst = palloc0_object(inet);
{
int nb = ip_addrsize(ip);
@@ -1818,7 +1818,7 @@ inetand(PG_FUNCTION_ARGS)
inet *ip2 = PG_GETARG_INET_PP(1);
inet *dst;
- dst = (inet *) palloc0(sizeof(inet));
+ dst = palloc0_object(inet);
if (ip_family(ip) != ip_family(ip2))
ereport(ERROR,
@@ -1850,7 +1850,7 @@ inetor(PG_FUNCTION_ARGS)
inet *ip2 = PG_GETARG_INET_PP(1);
inet *dst;
- dst = (inet *) palloc0(sizeof(inet));
+ dst = palloc0_object(inet);
if (ip_family(ip) != ip_family(ip2))
ereport(ERROR,
@@ -1880,7 +1880,7 @@ internal_inetpl(inet *ip, int64 addend)
{
inet *dst;
- dst = (inet *) palloc0(sizeof(inet));
+ dst = palloc0_object(inet);
{
int nb = ip_addrsize(ip);
diff --git a/src/backend/utils/adt/network_gist.c b/src/backend/utils/adt/network_gist.c
index a08c4953789..30145f5985a 100644
--- a/src/backend/utils/adt/network_gist.c
+++ b/src/backend/utils/adt/network_gist.c
@@ -475,7 +475,7 @@ build_inet_union_key(int family, int minbits, int commonbits,
GistInetKey *result;
/* Make sure any unused bits are zeroed. */
- result = (GistInetKey *) palloc0(sizeof(GistInetKey));
+ result = palloc0_object(GistInetKey);
gk_ip_family(result) = family;
gk_ip_minbits(result) = minbits;
@@ -546,13 +546,13 @@ inet_gist_compress(PG_FUNCTION_ARGS)
if (entry->leafkey)
{
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
if (DatumGetPointer(entry->key) != NULL)
{
inet *in = DatumGetInetPP(entry->key);
GistInetKey *r;
- r = (GistInetKey *) palloc0(sizeof(GistInetKey));
+ r = palloc0_object(GistInetKey);
gk_ip_family(r) = ip_family(in);
gk_ip_minbits(r) = ip_bits(in);
@@ -594,14 +594,14 @@ inet_gist_fetch(PG_FUNCTION_ARGS)
GISTENTRY *retval;
inet *dst;
- dst = (inet *) palloc0(sizeof(inet));
+ dst = palloc0_object(inet);
ip_family(dst) = gk_ip_family(key);
ip_bits(dst) = gk_ip_minbits(key);
memcpy(ip_addr(dst), gk_ip_addr(key), ip_addrsize(dst));
SET_INET_VARSIZE(dst);
- retval = palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, InetPGetDatum(dst), entry->rel, entry->page,
entry->offset, false);
diff --git a/src/backend/utils/adt/network_spgist.c b/src/backend/utils/adt/network_spgist.c
index a84747d9275..9bdacca5abd 100644
--- a/src/backend/utils/adt/network_spgist.c
+++ b/src/backend/utils/adt/network_spgist.c
@@ -196,8 +196,8 @@ inet_spg_picksplit(PG_FUNCTION_ARGS)
/* Don't need labels; allocate output arrays */
out->nodeLabels = NULL;
- out->mapTuplesToNodes = (int *) palloc(sizeof(int) * in->nTuples);
- out->leafTupleDatums = (Datum *) palloc(sizeof(Datum) * in->nTuples);
+ out->mapTuplesToNodes = palloc_array(int, in->nTuples);
+ out->leafTupleDatums = palloc_array(Datum, in->nTuples);
if (differentFamilies)
{
@@ -301,7 +301,7 @@ inet_spg_inner_consistent(PG_FUNCTION_ARGS)
if (which)
{
- out->nodeNumbers = (int *) palloc(sizeof(int) * in->nNodes);
+ out->nodeNumbers = palloc_array(int, in->nNodes);
for (i = 0; i < in->nNodes; i++)
{
diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index 1d626aecbe7..2460698df01 100644
--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -1759,8 +1759,7 @@ generate_series_step_numeric(PG_FUNCTION_ARGS)
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
/* allocate memory for user context */
- fctx = (generate_series_numeric_fctx *)
- palloc(sizeof(generate_series_numeric_fctx));
+ fctx = palloc_object(generate_series_numeric_fctx);
/*
* Use fctx to keep state from call to call. Seed current with the
@@ -2117,7 +2116,7 @@ numeric_sortsupport(PG_FUNCTION_ARGS)
NumericSortSupport *nss;
MemoryContext oldcontext = MemoryContextSwitchTo(ssup->ssup_cxt);
- nss = palloc(sizeof(NumericSortSupport));
+ nss = palloc_object(NumericSortSupport);
/*
* palloc a buffer for handling unaligned packed values in addition to
@@ -4754,7 +4753,7 @@ makeNumericAggState(FunctionCallInfo fcinfo, bool calcSumX2)
old_context = MemoryContextSwitchTo(agg_context);
- state = (NumericAggState *) palloc0(sizeof(NumericAggState));
+ state = palloc0_object(NumericAggState);
state->calcSumX2 = calcSumX2;
state->agg_context = agg_context;
@@ -4772,7 +4771,7 @@ makeNumericAggStateCurrentContext(bool calcSumX2)
{
NumericAggState *state;
- state = (NumericAggState *) palloc0(sizeof(NumericAggState));
+ state = palloc0_object(NumericAggState);
state->calcSumX2 = calcSumX2;
state->agg_context = CurrentMemoryContext;
@@ -5418,7 +5417,7 @@ makeInt128AggState(FunctionCallInfo fcinfo, bool calcSumX2)
old_context = MemoryContextSwitchTo(agg_context);
- state = (Int128AggState *) palloc0(sizeof(Int128AggState));
+ state = palloc0_object(Int128AggState);
state->calcSumX2 = calcSumX2;
MemoryContextSwitchTo(old_context);
@@ -5435,7 +5434,7 @@ makeInt128AggStateCurrentContext(bool calcSumX2)
{
Int128AggState *state;
- state = (Int128AggState *) palloc0(sizeof(Int128AggState));
+ state = palloc0_object(Int128AggState);
state->calcSumX2 = calcSumX2;
return state;
diff --git a/src/backend/utils/adt/orderedsetaggs.c b/src/backend/utils/adt/orderedsetaggs.c
index 2121cc05f28..ac3963fc3e0 100644
--- a/src/backend/utils/adt/orderedsetaggs.c
+++ b/src/backend/utils/adt/orderedsetaggs.c
@@ -153,7 +153,7 @@ ordered_set_startup(FunctionCallInfo fcinfo, bool use_tuples)
qcontext = fcinfo->flinfo->fn_mcxt;
oldcontext = MemoryContextSwitchTo(qcontext);
- qstate = (OSAPerQueryState *) palloc0(sizeof(OSAPerQueryState));
+ qstate = palloc0_object(OSAPerQueryState);
qstate->aggref = aggref;
qstate->qcontext = qcontext;
@@ -278,7 +278,7 @@ ordered_set_startup(FunctionCallInfo fcinfo, bool use_tuples)
/* Now build the stuff we need in group-lifespan context */
oldcontext = MemoryContextSwitchTo(gcontext);
- osastate = (OSAPerGroupState *) palloc(sizeof(OSAPerGroupState));
+ osastate = palloc_object(OSAPerGroupState);
osastate->qstate = qstate;
osastate->gcontext = gcontext;
diff --git a/src/backend/utils/adt/pg_locale_libc.c b/src/backend/utils/adt/pg_locale_libc.c
index 6ad3f93b543..b125b5da3a6 100644
--- a/src/backend/utils/adt/pg_locale_libc.c
+++ b/src/backend/utils/adt/pg_locale_libc.c
@@ -486,7 +486,7 @@ strlower_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen,
errmsg("out of memory")));
/* Output workspace cannot have more codes than input bytes */
- workspace = (wchar_t *) palloc((srclen + 1) * sizeof(wchar_t));
+ workspace = palloc_array(wchar_t, srclen + 1);
char2wchar(workspace, srclen + 1, src, srclen, loc);
@@ -591,7 +591,7 @@ strtitle_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen,
errmsg("out of memory")));
/* Output workspace cannot have more codes than input bytes */
- workspace = (wchar_t *) palloc((srclen + 1) * sizeof(wchar_t));
+ workspace = palloc_array(wchar_t, srclen + 1);
char2wchar(workspace, srclen + 1, src, srclen, loc);
@@ -684,7 +684,7 @@ strupper_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen,
errmsg("out of memory")));
/* Output workspace cannot have more codes than input bytes */
- workspace = (wchar_t *) palloc((srclen + 1) * sizeof(wchar_t));
+ workspace = palloc_array(wchar_t, srclen + 1);
char2wchar(workspace, srclen + 1, src, srclen, loc);
diff --git a/src/backend/utils/adt/pg_ndistinct.c b/src/backend/utils/adt/pg_ndistinct.c
index 34e35aa7026..8ff4353c4e7 100644
--- a/src/backend/utils/adt/pg_ndistinct.c
+++ b/src/backend/utils/adt/pg_ndistinct.c
@@ -175,7 +175,7 @@ ndistinct_object_end(void *state)
}
/* Create the MVNDistinctItem */
- item = palloc(sizeof(MVNDistinctItem));
+ item = palloc_object(MVNDistinctItem);
item->nattributes = natts;
item->attributes = palloc0(natts * sizeof(AttrNumber));
item->ndistinct = (double) parse->ndistinct;
diff --git a/src/backend/utils/adt/rangetypes.c b/src/backend/utils/adt/rangetypes.c
index d8e5130d642..0c454b136e2 100644
--- a/src/backend/utils/adt/rangetypes.c
+++ b/src/backend/utils/adt/rangetypes.c
@@ -1258,7 +1258,7 @@ range_minus_multi(PG_FUNCTION_ARGS)
elog(ERROR, "range types do not match");
/* allocate memory for user context */
- fctx = (struct range_minus_multi_fctx *) palloc(sizeof(struct range_minus_multi_fctx));
+ fctx = palloc_object(struct range_minus_multi_fctx);
/*
* Initialize state. We can't store the range typcache in fn_extra
diff --git a/src/backend/utils/adt/rangetypes_gist.c b/src/backend/utils/adt/rangetypes_gist.c
index a60ee985e74..33c705e6a87 100644
--- a/src/backend/utils/adt/rangetypes_gist.c
+++ b/src/backend/utils/adt/rangetypes_gist.c
@@ -251,7 +251,7 @@ multirange_gist_compress(PG_FUNCTION_ARGS)
MultirangeType *mr = DatumGetMultirangeTypeP(entry->key);
RangeType *r;
TypeCacheEntry *typcache;
- GISTENTRY *retval = palloc(sizeof(GISTENTRY));
+ GISTENTRY *retval = palloc_object(GISTENTRY);
typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr));
r = multirange_get_union_range(typcache->rngtype, mr);
@@ -1240,8 +1240,7 @@ range_gist_single_sorting_split(TypeCacheEntry *typcache,
maxoff = entryvec->n - 1;
- sortItems = (SingleBoundSortItem *)
- palloc(maxoff * sizeof(SingleBoundSortItem));
+ sortItems = palloc_array(SingleBoundSortItem, maxoff);
/*
* Prepare auxiliary array and sort the values.
@@ -1343,8 +1342,8 @@ range_gist_double_sorting_split(TypeCacheEntry *typcache,
context.first = true;
/* Allocate arrays for sorted range bounds */
- by_lower = (NonEmptyRange *) palloc(nentries * sizeof(NonEmptyRange));
- by_upper = (NonEmptyRange *) palloc(nentries * sizeof(NonEmptyRange));
+ by_lower = palloc_array(NonEmptyRange, nentries);
+ by_upper = palloc_array(NonEmptyRange, nentries);
/* Fill arrays of bounds */
for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i))
@@ -1499,8 +1498,8 @@ range_gist_double_sorting_split(TypeCacheEntry *typcache,
*/
/* Allocate vectors for results */
- v->spl_left = (OffsetNumber *) palloc(nentries * sizeof(OffsetNumber));
- v->spl_right = (OffsetNumber *) palloc(nentries * sizeof(OffsetNumber));
+ v->spl_left = palloc_array(OffsetNumber, nentries);
+ v->spl_right = palloc_array(OffsetNumber, nentries);
v->spl_nleft = 0;
v->spl_nright = 0;
@@ -1509,7 +1508,7 @@ range_gist_double_sorting_split(TypeCacheEntry *typcache,
* either group without affecting overlap along selected axis.
*/
common_entries_count = 0;
- common_entries = (CommonEntry *) palloc(nentries * sizeof(CommonEntry));
+ common_entries = palloc_array(CommonEntry, nentries);
/*
* Distribute entries which can be distributed unambiguously, and collect
diff --git a/src/backend/utils/adt/rangetypes_selfuncs.c b/src/backend/utils/adt/rangetypes_selfuncs.c
index d85252cafb2..27d736a40e5 100644
--- a/src/backend/utils/adt/rangetypes_selfuncs.c
+++ b/src/backend/utils/adt/rangetypes_selfuncs.c
@@ -412,8 +412,8 @@ calc_hist_selectivity(TypeCacheEntry *typcache, VariableStatData *vardata,
* bounds.
*/
nhist = hslot.nvalues;
- hist_lower = (RangeBound *) palloc(sizeof(RangeBound) * nhist);
- hist_upper = (RangeBound *) palloc(sizeof(RangeBound) * nhist);
+ hist_lower = palloc_array(RangeBound, nhist);
+ hist_upper = palloc_array(RangeBound, nhist);
for (i = 0; i < nhist; i++)
{
range_deserialize(typcache, DatumGetRangeTypeP(hslot.values[i]),
diff --git a/src/backend/utils/adt/rangetypes_spgist.c b/src/backend/utils/adt/rangetypes_spgist.c
index be519654880..14e5d6065f8 100644
--- a/src/backend/utils/adt/rangetypes_spgist.c
+++ b/src/backend/utils/adt/rangetypes_spgist.c
@@ -216,8 +216,8 @@ spg_range_quad_picksplit(PG_FUNCTION_ARGS)
RangeTypeGetOid(DatumGetRangeTypeP(in->datums[0])));
/* Allocate memory for bounds */
- lowerBounds = palloc(sizeof(RangeBound) * in->nTuples);
- upperBounds = palloc(sizeof(RangeBound) * in->nTuples);
+ lowerBounds = palloc_array(RangeBound, in->nTuples);
+ upperBounds = palloc_array(RangeBound, in->nTuples);
j = 0;
/* Deserialize bounds of ranges, count non-empty ranges */
@@ -243,8 +243,8 @@ spg_range_quad_picksplit(PG_FUNCTION_ARGS)
out->prefixDatum = PointerGetDatum(NULL);
out->nodeLabels = NULL;
- out->mapTuplesToNodes = palloc(sizeof(int) * in->nTuples);
- out->leafTupleDatums = palloc(sizeof(Datum) * in->nTuples);
+ out->mapTuplesToNodes = palloc_array(int, in->nTuples);
+ out->leafTupleDatums = palloc_array(Datum, in->nTuples);
/* Place all ranges into node 0 */
for (i = 0; i < in->nTuples; i++)
@@ -273,8 +273,8 @@ spg_range_quad_picksplit(PG_FUNCTION_ARGS)
out->nNodes = (in->level == 0) ? 5 : 4;
out->nodeLabels = NULL; /* we don't need node labels */
- out->mapTuplesToNodes = palloc(sizeof(int) * in->nTuples);
- out->leafTupleDatums = palloc(sizeof(Datum) * in->nTuples);
+ out->mapTuplesToNodes = palloc_array(int, in->nTuples);
+ out->leafTupleDatums = palloc_array(Datum, in->nTuples);
/*
* Assign ranges to corresponding nodes according to quadrants relative to
@@ -316,7 +316,7 @@ spg_range_quad_inner_consistent(PG_FUNCTION_ARGS)
{
/* Report that all nodes should be visited */
out->nNodes = in->nNodes;
- out->nodeNumbers = (int *) palloc(sizeof(int) * in->nNodes);
+ out->nodeNumbers = palloc_array(int, in->nNodes);
for (i = 0; i < in->nNodes; i++)
out->nodeNumbers[i] = i;
PG_RETURN_VOID();
@@ -732,9 +732,9 @@ spg_range_quad_inner_consistent(PG_FUNCTION_ARGS)
}
/* We must descend into the quadrant(s) identified by 'which' */
- out->nodeNumbers = (int *) palloc(sizeof(int) * in->nNodes);
+ out->nodeNumbers = palloc_array(int, in->nNodes);
if (needPrevious)
- out->traversalValues = (void **) palloc(sizeof(void *) * in->nNodes);
+ out->traversalValues = palloc_array(void *, in->nNodes);
out->nNodes = 0;
/*
diff --git a/src/backend/utils/adt/rangetypes_typanalyze.c b/src/backend/utils/adt/rangetypes_typanalyze.c
index 36e885af2dd..45ea6cbc780 100644
--- a/src/backend/utils/adt/rangetypes_typanalyze.c
+++ b/src/backend/utils/adt/rangetypes_typanalyze.c
@@ -151,9 +151,9 @@ compute_range_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc,
has_subdiff = OidIsValid(typcache->rng_subdiff_finfo.fn_oid);
/* Allocate memory to hold range bounds and lengths of the sample ranges. */
- lowers = (RangeBound *) palloc(sizeof(RangeBound) * samplerows);
- uppers = (RangeBound *) palloc(sizeof(RangeBound) * samplerows);
- lengths = (float8 *) palloc(sizeof(float8) * samplerows);
+ lowers = palloc_array(RangeBound, samplerows);
+ uppers = palloc_array(RangeBound, samplerows);
+ lengths = palloc_array(float8, samplerows);
/* Loop over the sample ranges. */
for (range_no = 0; range_no < samplerows; range_no++)
@@ -401,7 +401,7 @@ compute_range_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc,
stats->statypalign[slot_idx] = 'd';
/* Store the fraction of empty ranges */
- emptyfrac = (float4 *) palloc(sizeof(float4));
+ emptyfrac = palloc_object(float4);
*emptyfrac = ((double) empty_cnt) / ((double) non_null_cnt);
stats->stanumbers[slot_idx] = emptyfrac;
stats->numnumbers[slot_idx] = 1;
diff --git a/src/backend/utils/adt/regexp.c b/src/backend/utils/adt/regexp.c
index b0cdef9b19f..6542e8c1df0 100644
--- a/src/backend/utils/adt/regexp.c
+++ b/src/backend/utils/adt/regexp.c
@@ -189,7 +189,7 @@ RE_compile_and_cache(text *text_re, int cflags, Oid collation)
*/
/* Convert pattern string to wide characters */
- pattern = (pg_wchar *) palloc((text_re_len + 1) * sizeof(pg_wchar));
+ pattern = palloc_array(pg_wchar, text_re_len + 1);
pattern_len = pg_mb2wchar_with_len(text_re_val,
pattern,
text_re_len);
@@ -329,7 +329,7 @@ RE_execute(regex_t *re, char *dat, int dat_len,
bool match;
/* Convert data string to wide characters */
- data = (pg_wchar *) palloc((dat_len + 1) * sizeof(pg_wchar));
+ data = palloc_array(pg_wchar, dat_len + 1);
data_len = pg_mb2wchar_with_len(dat, data, dat_len);
/* Perform RE match and return result */
@@ -1389,8 +1389,8 @@ regexp_match(PG_FUNCTION_ARGS)
Assert(matchctx->nmatches == 1);
/* Create workspace that build_regexp_match_result needs */
- matchctx->elems = (Datum *) palloc(sizeof(Datum) * matchctx->npatterns);
- matchctx->nulls = (bool *) palloc(sizeof(bool) * matchctx->npatterns);
+ matchctx->elems = palloc_array(Datum, matchctx->npatterns);
+ matchctx->nulls = palloc_array(bool, matchctx->npatterns);
PG_RETURN_DATUM(PointerGetDatum(build_regexp_match_result(matchctx)));
}
@@ -1432,8 +1432,8 @@ regexp_matches(PG_FUNCTION_ARGS)
true, false, false);
/* Pre-create workspace that build_regexp_match_result needs */
- matchctx->elems = (Datum *) palloc(sizeof(Datum) * matchctx->npatterns);
- matchctx->nulls = (bool *) palloc(sizeof(bool) * matchctx->npatterns);
+ matchctx->elems = palloc_array(Datum, matchctx->npatterns);
+ matchctx->nulls = palloc_array(bool, matchctx->npatterns);
MemoryContextSwitchTo(oldcontext);
funcctx->user_fctx = matchctx;
@@ -1489,7 +1489,7 @@ setup_regexp_matches(text *orig_str, text *pattern, pg_re_flags *re_flags,
bool ignore_degenerate,
bool fetching_unmatched)
{
- regexp_matches_ctx *matchctx = palloc0(sizeof(regexp_matches_ctx));
+ regexp_matches_ctx *matchctx = palloc0_object(regexp_matches_ctx);
int eml = pg_database_encoding_max_length();
int orig_len;
pg_wchar *wide_str;
@@ -1509,7 +1509,7 @@ setup_regexp_matches(text *orig_str, text *pattern, pg_re_flags *re_flags,
/* convert string to pg_wchar form for matching */
orig_len = VARSIZE_ANY_EXHDR(orig_str);
- wide_str = (pg_wchar *) palloc(sizeof(pg_wchar) * (orig_len + 1));
+ wide_str = palloc_array(pg_wchar, orig_len + 1);
wide_len = pg_mb2wchar_with_len(VARDATA_ANY(orig_str), wide_str, orig_len);
/* set up the compiled pattern */
@@ -1532,7 +1532,7 @@ setup_regexp_matches(text *orig_str, text *pattern, pg_re_flags *re_flags,
}
/* temporary output space for RE package */
- pmatch = palloc(sizeof(regmatch_t) * pmatch_len);
+ pmatch = palloc_array(regmatch_t, pmatch_len);
/*
* the real output space (grown dynamically if needed)
@@ -1541,7 +1541,7 @@ setup_regexp_matches(text *orig_str, text *pattern, pg_re_flags *re_flags,
* than at 2^27
*/
array_len = re_flags->glob ? 255 : 31;
- matchctx->match_locs = (int *) palloc(sizeof(int) * array_len);
+ matchctx->match_locs = palloc_array(int, array_len);
array_idx = 0;
/* search for the pattern, perhaps repeatedly */
diff --git a/src/backend/utils/adt/rowtypes.c b/src/backend/utils/adt/rowtypes.c
index 38e6fe1c43a..7220995ce21 100644
--- a/src/backend/utils/adt/rowtypes.c
+++ b/src/backend/utils/adt/rowtypes.c
@@ -140,8 +140,8 @@ record_in(PG_FUNCTION_ARGS)
my_extra->ncolumns = ncolumns;
}
- values = (Datum *) palloc(ncolumns * sizeof(Datum));
- nulls = (bool *) palloc(ncolumns * sizeof(bool));
+ values = palloc_array(Datum, ncolumns);
+ nulls = palloc_array(bool, ncolumns);
/*
* Scan the string. We use "buf" to accumulate the de-quoted data for
@@ -383,8 +383,8 @@ record_out(PG_FUNCTION_ARGS)
my_extra->ncolumns = ncolumns;
}
- values = (Datum *) palloc(ncolumns * sizeof(Datum));
- nulls = (bool *) palloc(ncolumns * sizeof(bool));
+ values = palloc_array(Datum, ncolumns);
+ nulls = palloc_array(bool, ncolumns);
/* Break down the tuple into fields */
heap_deform_tuple(&tuple, tupdesc, values, nulls);
@@ -539,8 +539,8 @@ record_recv(PG_FUNCTION_ARGS)
my_extra->ncolumns = ncolumns;
}
- values = (Datum *) palloc(ncolumns * sizeof(Datum));
- nulls = (bool *) palloc(ncolumns * sizeof(bool));
+ values = palloc_array(Datum, ncolumns);
+ nulls = palloc_array(bool, ncolumns);
/* Fetch number of columns user thinks it has */
usercols = pq_getmsgint(buf, 4);
@@ -741,8 +741,8 @@ record_send(PG_FUNCTION_ARGS)
my_extra->ncolumns = ncolumns;
}
- values = (Datum *) palloc(ncolumns * sizeof(Datum));
- nulls = (bool *) palloc(ncolumns * sizeof(bool));
+ values = palloc_array(Datum, ncolumns);
+ nulls = palloc_array(bool, ncolumns);
/* Break down the tuple into fields */
heap_deform_tuple(&tuple, tupdesc, values, nulls);
@@ -1863,8 +1863,8 @@ hash_record(PG_FUNCTION_ARGS)
}
/* Break down the tuple into fields */
- values = (Datum *) palloc(ncolumns * sizeof(Datum));
- nulls = (bool *) palloc(ncolumns * sizeof(bool));
+ values = palloc_array(Datum, ncolumns);
+ nulls = palloc_array(bool, ncolumns);
heap_deform_tuple(&tuple, tupdesc, values, nulls);
for (int i = 0; i < ncolumns; i++)
@@ -1984,8 +1984,8 @@ hash_record_extended(PG_FUNCTION_ARGS)
}
/* Break down the tuple into fields */
- values = (Datum *) palloc(ncolumns * sizeof(Datum));
- nulls = (bool *) palloc(ncolumns * sizeof(bool));
+ values = palloc_array(Datum, ncolumns);
+ nulls = palloc_array(bool, ncolumns);
heap_deform_tuple(&tuple, tupdesc, values, nulls);
for (int i = 0; i < ncolumns; i++)
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 6cf90be40bb..9f85eb86da1 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -3713,7 +3713,7 @@ deparse_context_for(const char *aliasname, Oid relid)
deparse_namespace *dpns;
RangeTblEntry *rte;
- dpns = (deparse_namespace *) palloc0(sizeof(deparse_namespace));
+ dpns = palloc0_object(deparse_namespace);
/* Build a minimal RTE for the rel */
rte = makeNode(RangeTblEntry);
@@ -3757,7 +3757,7 @@ deparse_context_for_plan_tree(PlannedStmt *pstmt, List *rtable_names)
{
deparse_namespace *dpns;
- dpns = (deparse_namespace *) palloc0(sizeof(deparse_namespace));
+ dpns = palloc0_object(deparse_namespace);
/* Initialize fields that stay the same across the whole plan tree */
dpns->rtable = pstmt->rtable;
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 540aa9628d7..c760b19db55 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -3683,7 +3683,7 @@ add_unique_group_var(PlannerInfo *root, List *varinfos,
}
}
- varinfo = (GroupVarInfo *) palloc(sizeof(GroupVarInfo));
+ varinfo = palloc_object(GroupVarInfo);
varinfo->var = var;
varinfo->rel = vardata->rel;
@@ -4264,7 +4264,7 @@ estimate_multivariate_bucketsize(PlannerInfo *root, RelOptInfo *inner,
* estimate_multivariate_ndistinct(), which doesn't care about
* ndistinct and isdefault fields. Thus, skip these fields.
*/
- varinfo = (GroupVarInfo *) palloc0(sizeof(GroupVarInfo));
+ varinfo = palloc0_object(GroupVarInfo);
varinfo->var = expr;
varinfo->rel = root->simple_rel_array[relid];
varinfos = lappend(varinfos, varinfo);
diff --git a/src/backend/utils/adt/skipsupport.c b/src/backend/utils/adt/skipsupport.c
index 2bd35d2d272..2fcf5782ec8 100644
--- a/src/backend/utils/adt/skipsupport.c
+++ b/src/backend/utils/adt/skipsupport.c
@@ -38,7 +38,7 @@ PrepareSkipSupportFromOpclass(Oid opfamily, Oid opcintype, bool reverse)
if (!OidIsValid(skipSupportFunction))
return NULL;
- sksup = palloc(sizeof(SkipSupportData));
+ sksup = palloc_object(SkipSupportData);
OidFunctionCall1(skipSupportFunction, PointerGetDatum(sksup));
if (reverse)
diff --git a/src/backend/utils/adt/tid.c b/src/backend/utils/adt/tid.c
index 0cfb0bd3735..435d40fee3e 100644
--- a/src/backend/utils/adt/tid.c
+++ b/src/backend/utils/adt/tid.c
@@ -104,7 +104,7 @@ tidin(PG_FUNCTION_ARGS)
"tid", str)));
offsetNumber = (OffsetNumber) cvt;
- result = (ItemPointer) palloc(sizeof(ItemPointerData));
+ result = (ItemPointer) palloc_object(ItemPointerData);
ItemPointerSet(result, blockNumber, offsetNumber);
@@ -146,7 +146,7 @@ tidrecv(PG_FUNCTION_ARGS)
blockNumber = pq_getmsgint(buf, sizeof(blockNumber));
offsetNumber = pq_getmsgint(buf, sizeof(offsetNumber));
- result = (ItemPointer) palloc(sizeof(ItemPointerData));
+ result = (ItemPointer) palloc_object(ItemPointerData);
ItemPointerSet(result, blockNumber, offsetNumber);
@@ -300,7 +300,7 @@ currtid_internal(Relation rel, const ItemPointerData *tid)
Snapshot snapshot;
TableScanDesc scan;
- result = (ItemPointer) palloc(sizeof(ItemPointerData));
+ result = (ItemPointer) palloc_object(ItemPointerData);
aclresult = pg_class_aclcheck(RelationGetRelid(rel), GetUserId(),
ACL_SELECT);
diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
index 2dc90a2b8a9..3569d201ee1 100644
--- a/src/backend/utils/adt/timestamp.c
+++ b/src/backend/utils/adt/timestamp.c
@@ -937,7 +937,7 @@ interval_in(PG_FUNCTION_ARGS)
PG_RETURN_NULL();
}
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
switch (dtype)
{
@@ -1004,7 +1004,7 @@ interval_recv(PG_FUNCTION_ARGS)
int32 typmod = PG_GETARG_INT32(2);
Interval *interval;
- interval = (Interval *) palloc(sizeof(Interval));
+ interval = palloc_object(Interval);
interval->time = pq_getmsgint64(buf);
interval->day = pq_getmsgint(buf, sizeof(interval->day));
@@ -1331,7 +1331,7 @@ interval_scale(PG_FUNCTION_ARGS)
int32 typmod = PG_GETARG_INT32(1);
Interval *result;
- result = palloc(sizeof(Interval));
+ result = palloc_object(Interval);
*result = *interval;
AdjustIntervalForTypmod(result, typmod, NULL);
@@ -1545,7 +1545,7 @@ make_interval(PG_FUNCTION_ARGS)
if (isinf(secs) || isnan(secs))
goto out_of_range;
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
/* years and months -> months */
if (pg_mul_s32_overflow(years, MONTHS_PER_YEAR, &result->month) ||
@@ -2830,7 +2830,7 @@ timestamp_mi(PG_FUNCTION_ARGS)
Timestamp dt2 = PG_GETARG_TIMESTAMP(1);
Interval *result;
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
/*
* Handle infinities.
@@ -2925,7 +2925,7 @@ interval_justify_interval(PG_FUNCTION_ARGS)
TimeOffset wholeday;
int32 wholemonth;
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
result->month = span->month;
result->day = span->day;
result->time = span->time;
@@ -3004,7 +3004,7 @@ interval_justify_hours(PG_FUNCTION_ARGS)
Interval *result;
TimeOffset wholeday;
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
result->month = span->month;
result->day = span->day;
result->time = span->time;
@@ -3046,7 +3046,7 @@ interval_justify_days(PG_FUNCTION_ARGS)
Interval *result;
int32 wholemonth;
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
result->month = span->month;
result->day = span->day;
result->time = span->time;
@@ -3448,7 +3448,7 @@ interval_um(PG_FUNCTION_ARGS)
Interval *interval = PG_GETARG_INTERVAL_P(0);
Interval *result;
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
interval_um_internal(interval, result);
PG_RETURN_INTERVAL_P(result);
@@ -3506,7 +3506,7 @@ interval_pl(PG_FUNCTION_ARGS)
Interval *span2 = PG_GETARG_INTERVAL_P(1);
Interval *result;
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
/*
* Handle infinities.
@@ -3562,7 +3562,7 @@ interval_mi(PG_FUNCTION_ARGS)
Interval *span2 = PG_GETARG_INTERVAL_P(1);
Interval *result;
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
/*
* Handle infinities.
@@ -3616,7 +3616,7 @@ interval_mul(PG_FUNCTION_ARGS)
orig_day = span->day;
Interval *result;
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
/*
* Handle NaN and infinities.
@@ -3746,7 +3746,7 @@ interval_div(PG_FUNCTION_ARGS)
orig_day = span->day;
Interval *result;
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
if (factor == 0.0)
ereport(ERROR,
@@ -3975,7 +3975,7 @@ makeIntervalAggState(FunctionCallInfo fcinfo)
old_context = MemoryContextSwitchTo(agg_context);
- state = (IntervalAggState *) palloc0(sizeof(IntervalAggState));
+ state = palloc0_object(IntervalAggState);
MemoryContextSwitchTo(old_context);
@@ -4162,7 +4162,7 @@ interval_avg_deserialize(PG_FUNCTION_ARGS)
initReadOnlyStringInfo(&buf, VARDATA_ANY(sstate),
VARSIZE_ANY_EXHDR(sstate));
- result = (IntervalAggState *) palloc0(sizeof(IntervalAggState));
+ result = palloc0_object(IntervalAggState);
/* N */
result->N = pq_getmsgint64(&buf);
@@ -4229,7 +4229,7 @@ interval_avg(PG_FUNCTION_ARGS)
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
errmsg("interval out of range")));
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
if (state->pInfcount > 0)
INTERVAL_NOEND(result);
else
@@ -4266,7 +4266,7 @@ interval_sum(PG_FUNCTION_ARGS)
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
errmsg("interval out of range")));
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
if (state->pInfcount > 0)
INTERVAL_NOEND(result);
@@ -4299,7 +4299,7 @@ timestamp_age(PG_FUNCTION_ARGS)
struct pg_tm tt2,
*tm2 = &tt2;
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
/*
* Handle infinities.
@@ -4447,7 +4447,7 @@ timestamptz_age(PG_FUNCTION_ARGS)
int tz1;
int tz2;
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
/*
* Handle infinities.
@@ -5120,7 +5120,7 @@ interval_trunc(PG_FUNCTION_ARGS)
struct pg_itm tt,
*tm = &tt;
- result = (Interval *) palloc(sizeof(Interval));
+ result = palloc_object(Interval);
lowunits = downcase_truncate_identifier(VARDATA_ANY(units),
VARSIZE_ANY_EXHDR(units),
@@ -6687,8 +6687,7 @@ generate_series_timestamp(PG_FUNCTION_ARGS)
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
/* allocate memory for user context */
- fctx = (generate_series_timestamp_fctx *)
- palloc(sizeof(generate_series_timestamp_fctx));
+ fctx = palloc_object(generate_series_timestamp_fctx);
/*
* Use fctx to keep state from call to call. Seed current with the
@@ -6772,8 +6771,7 @@ generate_series_timestamptz_internal(FunctionCallInfo fcinfo)
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
/* allocate memory for user context */
- fctx = (generate_series_timestamptz_fctx *)
- palloc(sizeof(generate_series_timestamptz_fctx));
+ fctx = palloc_object(generate_series_timestamptz_fctx);
/*
* Use fctx to keep state from call to call. Seed current with the
diff --git a/src/backend/utils/adt/tsginidx.c b/src/backend/utils/adt/tsginidx.c
index 2712fd89df0..24a1cbe89ed 100644
--- a/src/backend/utils/adt/tsginidx.c
+++ b/src/backend/utils/adt/tsginidx.c
@@ -73,7 +73,7 @@ gin_extract_tsvector(PG_FUNCTION_ARGS)
int i;
WordEntry *we = ARRPTR(vector);
- entries = (Datum *) palloc(sizeof(Datum) * vector->size);
+ entries = palloc_array(Datum, vector->size);
for (i = 0; i < vector->size; i++)
{
@@ -133,16 +133,16 @@ gin_extract_tsquery(PG_FUNCTION_ARGS)
}
*nentries = j;
- entries = (Datum *) palloc(sizeof(Datum) * j);
- partialmatch = *ptr_partialmatch = (bool *) palloc(sizeof(bool) * j);
+ entries = palloc_array(Datum, j);
+ partialmatch = *ptr_partialmatch = palloc_array(bool, j);
/*
* Make map to convert item's number to corresponding operand's (the
* same, entry's) number. Entry's number is used in check array in
* consistent method. We use the same map for each entry.
*/
- *extra_data = (Pointer *) palloc(sizeof(Pointer) * j);
- map_item_operand = (int *) palloc0(sizeof(int) * query->size);
+ *extra_data = palloc_array(Pointer, j);
+ map_item_operand = palloc0_array(int, query->size);
/* Now rescan the VAL items and fill in the arrays */
j = 0;
diff --git a/src/backend/utils/adt/tsgistidx.c b/src/backend/utils/adt/tsgistidx.c
index 935187b37c7..01e43f86214 100644
--- a/src/backend/utils/adt/tsgistidx.c
+++ b/src/backend/utils/adt/tsgistidx.c
@@ -212,7 +212,7 @@ gtsvector_compress(PG_FUNCTION_ARGS)
res = ressign;
}
- retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(res),
entry->rel, entry->page,
entry->offset, false);
@@ -231,7 +231,7 @@ gtsvector_compress(PG_FUNCTION_ARGS)
}
res = gtsvector_alloc(SIGNKEY | ALLISTRUE, siglen, sign);
- retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(res),
entry->rel, entry->page,
entry->offset, false);
@@ -251,7 +251,7 @@ gtsvector_decompress(PG_FUNCTION_ARGS)
if (key != (SignTSVector *) DatumGetPointer(entry->key))
{
- GISTENTRY *retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ GISTENTRY *retval = palloc_object(GISTENTRY);
gistentryinit(*retval, PointerGetDatum(key),
entry->rel, entry->page,
@@ -641,7 +641,7 @@ gtsvector_picksplit(PG_FUNCTION_ARGS)
v->spl_left = (OffsetNumber *) palloc(nbytes);
v->spl_right = (OffsetNumber *) palloc(nbytes);
- cache = (CACHESIGN *) palloc(sizeof(CACHESIGN) * (maxoff + 2));
+ cache = palloc_array(CACHESIGN, maxoff + 2);
cache_sign = palloc(siglen * (maxoff + 2));
for (j = 0; j < maxoff + 2; j++)
@@ -688,7 +688,7 @@ gtsvector_picksplit(PG_FUNCTION_ARGS)
maxoff = OffsetNumberNext(maxoff);
fillcache(&cache[maxoff], GETENTRY(entryvec, maxoff), siglen);
/* 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/src/backend/utils/adt/tsquery.c b/src/backend/utils/adt/tsquery.c
index 717de8073d5..a0c990fdfa0 100644
--- a/src/backend/utils/adt/tsquery.c
+++ b/src/backend/utils/adt/tsquery.c
@@ -534,7 +534,7 @@ pushOperator(TSQueryParserState state, int8 oper, int16 distance)
Assert(oper == OP_NOT || oper == OP_AND || oper == OP_OR || oper == OP_PHRASE);
- tmp = (QueryOperator *) palloc0(sizeof(QueryOperator));
+ tmp = palloc0_object(QueryOperator);
tmp->type = QI_OPR;
tmp->oper = oper;
tmp->distance = (oper == OP_PHRASE) ? distance : 0;
@@ -559,7 +559,7 @@ pushValue_internal(TSQueryParserState state, pg_crc32 valcrc, int distance, int
errmsg("operand is too long in tsquery: \"%s\"",
state->buffer)));
- tmp = (QueryOperand *) palloc0(sizeof(QueryOperand));
+ tmp = palloc0_object(QueryOperand);
tmp->type = QI_VAL;
tmp->weight = weight;
tmp->prefix = prefix;
@@ -617,7 +617,7 @@ pushStop(TSQueryParserState state)
{
QueryOperand *tmp;
- tmp = (QueryOperand *) palloc0(sizeof(QueryOperand));
+ tmp = palloc0_object(QueryOperand);
tmp->type = QI_VALSTOP;
state->polstr = lcons(tmp, state->polstr);
@@ -1101,7 +1101,7 @@ infix(INFIX *in, int parentPriority, bool rightPhraseOp)
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, priority, (op == OP_PHRASE));
@@ -1157,7 +1157,7 @@ tsqueryout(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, -1 /* lowest priority */ , false);
@@ -1385,7 +1385,7 @@ tsquerytree(PG_FUNCTION_ARGS)
{
nrm.curpol = q;
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, -1, false);
diff --git a/src/backend/utils/adt/tsquery_cleanup.c b/src/backend/utils/adt/tsquery_cleanup.c
index 590d7c7989c..45de2da900c 100644
--- a/src/backend/utils/adt/tsquery_cleanup.c
+++ b/src/backend/utils/adt/tsquery_cleanup.c
@@ -32,7 +32,7 @@ typedef struct NODE
static NODE *
maketree(QueryItem *in)
{
- NODE *node = (NODE *) palloc(sizeof(NODE));
+ NODE *node = palloc_object(NODE);
/* since this function recurses, it could be driven to stack overflow. */
check_stack_depth();
diff --git a/src/backend/utils/adt/tsquery_gist.c b/src/backend/utils/adt/tsquery_gist.c
index f7f94c1c760..55fc93ebef5 100644
--- a/src/backend/utils/adt/tsquery_gist.c
+++ b/src/backend/utils/adt/tsquery_gist.c
@@ -33,7 +33,7 @@ gtsquery_compress(PG_FUNCTION_ARGS)
{
TSQuerySign sign;
- retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ retval = palloc_object(GISTENTRY);
sign = makeTSQuerySign(DatumGetTSQuery(entry->key));
gistentryinit(*retval, TSQuerySignGetDatum(sign),
@@ -213,7 +213,7 @@ gtsquery_picksplit(PG_FUNCTION_ARGS)
datum_r = GETENTRY(entryvec, seed_2);
maxoff = OffsetNumberNext(maxoff);
- 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/src/backend/utils/adt/tsquery_op.c b/src/backend/utils/adt/tsquery_op.c
index bb77e923062..84bf070dff2 100644
--- a/src/backend/utils/adt/tsquery_op.c
+++ b/src/backend/utils/adt/tsquery_op.c
@@ -32,17 +32,17 @@ tsquery_numnode(PG_FUNCTION_ARGS)
static QTNode *
join_tsqueries(TSQuery a, TSQuery b, int8 operator, uint16 distance)
{
- QTNode *res = (QTNode *) palloc0(sizeof(QTNode));
+ QTNode *res = palloc0_object(QTNode);
res->flags |= QTN_NEEDFREE;
- res->valnode = (QueryItem *) palloc0(sizeof(QueryItem));
+ res->valnode = palloc0_object(QueryItem);
res->valnode->type = QI_OPR;
res->valnode->qoperator.oper = operator;
if (operator == OP_PHRASE)
res->valnode->qoperator.distance = distance;
- res->child = (QTNode **) palloc0(sizeof(QTNode *) * 2);
+ res->child = palloc0_array(QTNode *, 2);
res->child[0] = QT2QTN(GETQUERY(b), GETOPERAND(b));
res->child[1] = QT2QTN(GETQUERY(a), GETOPERAND(a));
res->nchild = 2;
@@ -165,15 +165,15 @@ tsquery_not(PG_FUNCTION_ARGS)
if (a->size == 0)
PG_RETURN_POINTER(a);
- res = (QTNode *) palloc0(sizeof(QTNode));
+ res = palloc0_object(QTNode);
res->flags |= QTN_NEEDFREE;
- res->valnode = (QueryItem *) palloc0(sizeof(QueryItem));
+ res->valnode = palloc0_object(QueryItem);
res->valnode->type = QI_OPR;
res->valnode->qoperator.oper = OP_NOT;
- res->child = (QTNode **) palloc0(sizeof(QTNode *));
+ res->child = palloc0_object(QTNode *);
res->child[0] = QT2QTN(GETQUERY(a), GETOPERAND(a));
res->nchild = 1;
@@ -272,7 +272,7 @@ collectTSQueryValues(TSQuery a, int *nvalues_p)
int nvalues = 0;
int i;
- values = (char **) palloc(sizeof(char *) * a->size);
+ values = palloc_array(char *, a->size);
for (i = 0; i < a->size; i++)
{
diff --git a/src/backend/utils/adt/tsquery_util.c b/src/backend/utils/adt/tsquery_util.c
index 1c24b041aa2..2ccfc9d3303 100644
--- a/src/backend/utils/adt/tsquery_util.c
+++ b/src/backend/utils/adt/tsquery_util.c
@@ -24,7 +24,7 @@
QTNode *
QT2QTN(QueryItem *in, char *operand)
{
- QTNode *node = (QTNode *) palloc0(sizeof(QTNode));
+ QTNode *node = palloc0_object(QTNode);
/* since this function recurses, it could be driven to stack overflow. */
check_stack_depth();
@@ -33,7 +33,7 @@ QT2QTN(QueryItem *in, char *operand)
if (in->type == QI_OPR)
{
- node->child = (QTNode **) palloc0(sizeof(QTNode *) * 2);
+ node->child = palloc0_array(QTNode *, 2);
node->child[0] = QT2QTN(in + 1, operand);
node->sign = node->child[0]->sign;
if (in->qoperator.oper == OP_NOT)
@@ -226,7 +226,7 @@ QTNTernary(QTNode *in)
int oldnchild = in->nchild;
in->nchild += cc->nchild - 1;
- in->child = (QTNode **) repalloc(in->child, in->nchild * sizeof(QTNode *));
+ in->child = repalloc_array(in->child, QTNode *, in->nchild);
if (i + 1 != oldnchild)
memmove(in->child + i + cc->nchild, in->child + i + 1,
@@ -262,10 +262,10 @@ QTNBinary(QTNode *in)
while (in->nchild > 2)
{
- QTNode *nn = (QTNode *) palloc0(sizeof(QTNode));
+ QTNode *nn = palloc0_object(QTNode);
- nn->valnode = (QueryItem *) palloc0(sizeof(QueryItem));
- nn->child = (QTNode **) palloc0(sizeof(QTNode *) * 2);
+ nn->valnode = palloc0_object(QueryItem);
+ nn->child = palloc0_array(QTNode *, 2);
nn->nchild = 2;
nn->flags = QTN_NEEDFREE;
@@ -400,10 +400,10 @@ QTNCopy(QTNode *in)
/* since this function recurses, it could be driven to stack overflow. */
check_stack_depth();
- out = (QTNode *) palloc(sizeof(QTNode));
+ out = palloc_object(QTNode);
*out = *in;
- out->valnode = (QueryItem *) palloc(sizeof(QueryItem));
+ out->valnode = palloc_object(QueryItem);
*(out->valnode) = *(in->valnode);
out->flags |= QTN_NEEDFREE;
@@ -418,7 +418,7 @@ QTNCopy(QTNode *in)
{
int i;
- out->child = (QTNode **) palloc(sizeof(QTNode *) * in->nchild);
+ out->child = palloc_array(QTNode *, in->nchild);
for (i = 0; i < in->nchild; i++)
out->child[i] = QTNCopy(in->child[i]);
diff --git a/src/backend/utils/adt/tsrank.c b/src/backend/utils/adt/tsrank.c
index e863aa58653..4a341848647 100644
--- a/src/backend/utils/adt/tsrank.c
+++ b/src/backend/utils/adt/tsrank.c
@@ -160,7 +160,7 @@ SortAndUniqItems(TSQuery q, int *size)
**ptr,
**prevptr;
- ptr = res = (QueryOperand **) palloc(sizeof(QueryOperand *) * *size);
+ ptr = res = palloc_array(QueryOperand *, *size);
/* Collect all operands from the tree to res */
while ((*size)--)
@@ -225,7 +225,7 @@ calc_rank_and(const float *w, TSVector t, TSQuery q)
pfree(item);
return calc_rank_or(w, t, q);
}
- pos = (WordEntryPosVector **) palloc0(sizeof(WordEntryPosVector *) * q->size);
+ pos = palloc0_array(WordEntryPosVector *, q->size);
/* A dummy WordEntryPos array to use when haspos is false */
posnull.npos = 1;
@@ -743,7 +743,7 @@ get_docrep(TSVector txt, QueryRepresentation *qr, int *doclen)
cur = 0;
DocRepresentation *doc;
- doc = (DocRepresentation *) palloc(sizeof(DocRepresentation) * len);
+ doc = palloc_array(DocRepresentation, len);
/*
* Iterate through query to make DocRepresentation for words and it's
@@ -815,7 +815,7 @@ get_docrep(TSVector txt, QueryRepresentation *qr, int *doclen)
* Join QueryItem per WordEntry and its position
*/
storage.pos = doc->pos;
- storage.data.query.items = palloc(sizeof(QueryItem *) * qr->query->size);
+ storage.data.query.items = palloc_array(QueryItem *, qr->query->size);
storage.data.query.items[0] = doc->data.map.item;
storage.data.query.nitem = 1;
@@ -832,7 +832,7 @@ get_docrep(TSVector txt, QueryRepresentation *qr, int *doclen)
*wptr = storage;
wptr++;
storage.pos = rptr->pos;
- storage.data.query.items = palloc(sizeof(QueryItem *) * qr->query->size);
+ storage.data.query.items = palloc_array(QueryItem *, qr->query->size);
storage.data.query.items[0] = rptr->data.map.item;
storage.data.query.nitem = 1;
}
@@ -878,8 +878,7 @@ calc_rank_cd(const float4 *arrdata, TSVector txt, TSQuery query, int method)
}
qr.query = query;
- qr.operandData = (QueryRepresentationOperand *)
- palloc0(sizeof(QueryRepresentationOperand) * query->size);
+ qr.operandData = palloc0_array(QueryRepresentationOperand, query->size);
doc = get_docrep(txt, &qr, &doclen);
if (!doc)
diff --git a/src/backend/utils/adt/tsvector.c b/src/backend/utils/adt/tsvector.c
index f568f1fce99..d00c6032087 100644
--- a/src/backend/utils/adt/tsvector.c
+++ b/src/backend/utils/adt/tsvector.c
@@ -202,8 +202,8 @@ tsvectorin(PG_FUNCTION_ARGS)
state = init_tsvector_parser(buf, 0, escontext);
arrlen = 64;
- arr = (WordEntryIN *) palloc(sizeof(WordEntryIN) * arrlen);
- cur = tmpbuf = (char *) palloc(buflen);
+ arr = palloc_array(WordEntryIN, arrlen);
+ cur = tmpbuf = palloc_array(char, buflen);
while (gettoken_tsvector(state, &token, &toklen, &pos, &poslen, NULL))
{
diff --git a/src/backend/utils/adt/tsvector_op.c b/src/backend/utils/adt/tsvector_op.c
index c752cbe5463..b809089ac5d 100644
--- a/src/backend/utils/adt/tsvector_op.c
+++ b/src/backend/utils/adt/tsvector_op.c
@@ -1212,7 +1212,7 @@ checkclass_str(CHKVAL *chkval, WordEntry *entry, QueryOperand *val,
/*
* Filter position information by weights
*/
- dptr = data->pos = palloc(sizeof(WordEntryPos) * posvec->npos);
+ dptr = data->pos = palloc_array(WordEntryPos, posvec->npos);
data->allocated = true;
/* Is there a position with a matching weight? */
@@ -1391,12 +1391,12 @@ checkcondition_str(void *checkval, QueryOperand *val, ExecPhraseData *data)
if (totalpos == 0)
{
totalpos = 256;
- allpos = palloc(sizeof(WordEntryPos) * totalpos);
+ allpos = palloc_array(WordEntryPos, totalpos);
}
else
{
totalpos *= 2;
- allpos = repalloc(allpos, sizeof(WordEntryPos) * totalpos);
+ allpos = repalloc_array(allpos, WordEntryPos, totalpos);
}
}
@@ -2456,7 +2456,7 @@ ts_setup_firstcall(FunctionCallInfo fcinfo, FuncCallContext *funcctx,
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
- stat->stack = palloc0(sizeof(StatEntry *) * (stat->maxdepth + 1));
+ stat->stack = palloc0_array(StatEntry *, stat->maxdepth + 1);
stat->stackpos = 0;
node = stat->root;
@@ -2839,7 +2839,7 @@ tsvector_update_trigger(PG_FUNCTION_ARGS, bool config_column)
prs.lenwords = 32;
prs.curwords = 0;
prs.pos = 0;
- prs.words = (ParsedWord *) palloc(sizeof(ParsedWord) * prs.lenwords);
+ prs.words = palloc_array(ParsedWord, prs.lenwords);
/* find all words in indexable column(s) */
for (i = 2; i < trigger->tgnargs; i++)
diff --git a/src/backend/utils/adt/tsvector_parser.c b/src/backend/utils/adt/tsvector_parser.c
index e1620d3ed1f..a1c374a04a4 100644
--- a/src/backend/utils/adt/tsvector_parser.c
+++ b/src/backend/utils/adt/tsvector_parser.c
@@ -58,7 +58,7 @@ init_tsvector_parser(char *input, int flags, Node *escontext)
{
TSVectorParseState state;
- state = (TSVectorParseState) palloc(sizeof(struct TSVectorParseStateData));
+ state = palloc_object(struct TSVectorParseStateData);
state->prsbuf = input;
state->bufstart = input;
state->len = 32;
@@ -322,13 +322,13 @@ gettoken_tsvector(TSVectorParseState state,
if (posalen == 0)
{
posalen = 4;
- pos = (WordEntryPos *) palloc(sizeof(WordEntryPos) * posalen);
+ pos = palloc_array(WordEntryPos, posalen);
npos = 0;
}
else if (npos + 1 >= posalen)
{
posalen *= 2;
- pos = (WordEntryPos *) repalloc(pos, sizeof(WordEntryPos) * posalen);
+ pos = repalloc_array(pos, WordEntryPos, posalen);
}
npos++;
WEP_SETPOS(pos[npos - 1], LIMITPOS(atoi(state->prsbuf)));
diff --git a/src/backend/utils/adt/uuid.c b/src/backend/utils/adt/uuid.c
index 5df35d7cacb..2bc915edc2e 100644
--- a/src/backend/utils/adt/uuid.c
+++ b/src/backend/utils/adt/uuid.c
@@ -80,7 +80,7 @@ uuid_in(PG_FUNCTION_ARGS)
char *uuid_str = PG_GETARG_CSTRING(0);
pg_uuid_t *uuid;
- uuid = (pg_uuid_t *) palloc(sizeof(*uuid));
+ uuid = palloc_object(pg_uuid_t);
string_to_uuid(uuid_str, uuid, fcinfo->context);
PG_RETURN_UUID_P(uuid);
}
@@ -288,7 +288,7 @@ uuid_sortsupport(PG_FUNCTION_ARGS)
oldcontext = MemoryContextSwitchTo(ssup->ssup_cxt);
- uss = palloc(sizeof(uuid_sortsupport_state));
+ uss = palloc_object(uuid_sortsupport_state);
uss->input_count = 0;
uss->estimating = true;
initHyperLogLog(&uss->abbr_card, 10);
diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c
index f202b8df4e2..baa5b44ea8d 100644
--- a/src/backend/utils/adt/varlena.c
+++ b/src/backend/utils/adt/varlena.c
@@ -1703,7 +1703,7 @@ varstr_sortsupport(SortSupport ssup, Oid typid, Oid collid)
*/
if (abbreviate || !collate_c)
{
- sss = palloc(sizeof(VarStringSortSupport));
+ sss = palloc_object(VarStringSortSupport);
sss->buf1 = palloc(TEXTBUFLEN);
sss->buflen1 = TEXTBUFLEN;
sss->buf2 = palloc(TEXTBUFLEN);
diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c
index 41e775570ec..c8ab9d61c68 100644
--- a/src/backend/utils/adt/xml.c
+++ b/src/backend/utils/adt/xml.c
@@ -1255,7 +1255,7 @@ pg_xml_init(PgXmlStrictness strictness)
pg_xml_init_library();
/* Create error handling context structure */
- errcxt = (PgXmlErrorContext *) palloc(sizeof(PgXmlErrorContext));
+ errcxt = palloc_object(PgXmlErrorContext);
errcxt->magic = ERRCXT_MAGIC;
errcxt->strictness = strictness;
errcxt->err_occurred = false;
@@ -4733,10 +4733,10 @@ XmlTableInitOpaque(TableFuncScanState *state, int natts)
XmlTableBuilderData *xtCxt;
PgXmlErrorContext *xmlerrcxt;
- xtCxt = palloc0(sizeof(XmlTableBuilderData));
+ xtCxt = palloc0_object(XmlTableBuilderData);
xtCxt->magic = XMLTABLE_CONTEXT_MAGIC;
xtCxt->natts = natts;
- xtCxt->xpathscomp = palloc0(sizeof(xmlXPathCompExprPtr) * natts);
+ xtCxt->xpathscomp = palloc0_array(xmlXPathCompExprPtr, natts);
xmlerrcxt = pg_xml_init(PG_XML_STRICTNESS_ALL);