casting away const in comparators
Started by Mark Dilgerover 9 years ago1 messages
Friends,
comparators usually take arguments like
(const void *a, const void *b)
and do something read-only to a and b. In our
sources, we typically cast these to something else,
like (char *), and do something read-only. This
generates a lot of warnings if using -Wcast-qual.
To fix that, I have converted the casts to not cast
away const. Please find my changes, attached.
Mark Dilger
Attachments:
comparators.patch.1application/octet-stream; name=comparators.patch.1Download
diff --git a/contrib/intarray/_int_selfuncs.c b/contrib/intarray/_int_selfuncs.c
index 3dad7ee..ce498d3 100644
--- a/contrib/intarray/_int_selfuncs.c
+++ b/contrib/intarray/_int_selfuncs.c
@@ -334,7 +334,7 @@ int_query_opr_selec(ITEM *item, Datum *mcelems, float4 *mcefreqs,
static int
compare_val_int4(const void *a, const void *b)
{
- int32 key = *(int32 *) a;
+ int32 key = *(const int32 *) a;
const Datum *t = (const Datum *) b;
return key - DatumGetInt32(*t);
diff --git a/src/backend/access/gin/ginbulk.c b/src/backend/access/gin/ginbulk.c
index 71c64e4..c2921e2 100644
--- a/src/backend/access/gin/ginbulk.c
+++ b/src/backend/access/gin/ginbulk.c
@@ -244,7 +244,9 @@ ginInsertBAEntries(BuildAccumulator *accum,
static int
qsortCompareItemPointers(const void *a, const void *b)
{
- int res = ginCompareItemPointers((ItemPointer) a, (ItemPointer) b);
+ int res = ginCompareItemPointers(
+ (const ItemPointerData *) a,
+ (const ItemPointerData *) b);
/* Assert that there are no equal item pointers being sorted */
Assert(res != 0);
diff --git a/src/backend/access/spgist/spgkdtreeproc.c b/src/backend/access/spgist/spgkdtreeproc.c
index 1ab9335..b4f7443 100644
--- a/src/backend/access/spgist/spgkdtreeproc.c
+++ b/src/backend/access/spgist/spgkdtreeproc.c
@@ -82,8 +82,8 @@ typedef struct SortedPoint
static int
x_cmp(const void *a, const void *b)
{
- SortedPoint *pa = (SortedPoint *) a;
- SortedPoint *pb = (SortedPoint *) b;
+ const SortedPoint *pa = (const SortedPoint *) a;
+ const SortedPoint *pb = (const SortedPoint *) b;
if (pa->p->x == pb->p->x)
return 0;
@@ -93,8 +93,8 @@ x_cmp(const void *a, const void *b)
static int
y_cmp(const void *a, const void *b)
{
- SortedPoint *pa = (SortedPoint *) a;
- SortedPoint *pb = (SortedPoint *) b;
+ const SortedPoint *pa = (const SortedPoint *) a;
+ const SortedPoint *pb = (const SortedPoint *) b;
if (pa->p->y == pb->p->y)
return 0;
diff --git a/src/backend/commands/vacuumlazy.c b/src/backend/commands/vacuumlazy.c
index b5fb325..b075ef8 100644
--- a/src/backend/commands/vacuumlazy.c
+++ b/src/backend/commands/vacuumlazy.c
@@ -2026,16 +2026,16 @@ vac_cmp_itemptr(const void *left, const void *right)
OffsetNumber loff,
roff;
- lblk = ItemPointerGetBlockNumber((ItemPointer) left);
- rblk = ItemPointerGetBlockNumber((ItemPointer) right);
+ lblk = ItemPointerGetBlockNumber((const ItemPointerData *) left);
+ rblk = ItemPointerGetBlockNumber((const ItemPointerData *) right);
if (lblk < rblk)
return -1;
if (lblk > rblk)
return 1;
- loff = ItemPointerGetOffsetNumber((ItemPointer) left);
- roff = ItemPointerGetOffsetNumber((ItemPointer) right);
+ loff = ItemPointerGetOffsetNumber((const ItemPointerData *) left);
+ roff = ItemPointerGetOffsetNumber((const ItemPointerData *) right);
if (loff < roff)
return -1;
diff --git a/src/backend/executor/nodeIndexscan.c b/src/backend/executor/nodeIndexscan.c
index 3143bd9..fe2cfc2 100644
--- a/src/backend/executor/nodeIndexscan.c
+++ b/src/backend/executor/nodeIndexscan.c
@@ -409,8 +409,8 @@ static int
reorderqueue_cmp(const pairingheap_node *a, const pairingheap_node *b,
void *arg)
{
- ReorderTuple *rta = (ReorderTuple *) a;
- ReorderTuple *rtb = (ReorderTuple *) b;
+ const ReorderTuple *rta = (const ReorderTuple *) a;
+ const ReorderTuple *rtb = (const ReorderTuple *) b;
IndexScanState *node = (IndexScanState *) arg;
return -cmp_orderbyvals(rta->orderbyvals, rta->orderbynulls,
diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c
index da9b7a6..44c8d95 100644
--- a/src/backend/replication/basebackup.c
+++ b/src/backend/replication/basebackup.c
@@ -494,8 +494,8 @@ perform_base_backup(basebackup_options *opt, DIR *tblspcdir)
static int
compareWalFileNames(const void *a, const void *b)
{
- char *fna = *((char **) a);
- char *fnb = *((char **) b);
+ const char *fna = *((const char * const*) a);
+ const char *fnb = *((const char * const*) b);
return strcmp(fna + 8, fnb + 8);
}
diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c
index 9b430b9..b5ce6cc 100644
--- a/src/backend/replication/logical/reorderbuffer.c
+++ b/src/backend/replication/logical/reorderbuffer.c
@@ -3161,8 +3161,8 @@ TransactionIdInArray(TransactionId xid, TransactionId *xip, Size num)
static int
file_sort_by_lsn(const void *a_p, const void *b_p)
{
- RewriteMappingFile *a = *(RewriteMappingFile **) a_p;
- RewriteMappingFile *b = *(RewriteMappingFile **) b_p;
+ const RewriteMappingFile *a = *(const RewriteMappingFile * const*) a_p;
+ const RewriteMappingFile *b = *(const RewriteMappingFile * const*) b_p;
if (a->lsn < b->lsn)
return -1;
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index 90804a3..616d7ae 100644
--- a/src/backend/storage/buffer/bufmgr.c
+++ b/src/backend/storage/buffer/bufmgr.c
@@ -4003,8 +4003,8 @@ local_buffer_write_error_callback(void *arg)
static int
rnode_comparator(const void *p1, const void *p2)
{
- RelFileNode n1 = *(RelFileNode *) p1;
- RelFileNode n2 = *(RelFileNode *) p2;
+ const RelFileNode n1 = *(const RelFileNode *) p1;
+ const RelFileNode n2 = *(const RelFileNode *) p2;
if (n1.relNode < n2.relNode)
return -1;
@@ -4113,8 +4113,8 @@ buffertag_comparator(const void *a, const void *b)
static int
ckpt_buforder_comparator(const void *pa, const void *pb)
{
- const CkptSortItem *a = (CkptSortItem *) pa;
- const CkptSortItem *b = (CkptSortItem *) pb;
+ const CkptSortItem *a = (const CkptSortItem *) pa;
+ const CkptSortItem *b = (const CkptSortItem *) pb;
/* compare tablespace */
if (a->tsId < b->tsId)
diff --git a/src/backend/storage/page/bufpage.c b/src/backend/storage/page/bufpage.c
index 73aa0c0..51a5de6 100644
--- a/src/backend/storage/page/bufpage.c
+++ b/src/backend/storage/page/bufpage.c
@@ -429,8 +429,8 @@ static int
itemoffcompare(const void *itemidp1, const void *itemidp2)
{
/* Sort in decreasing itemoff order */
- return ((itemIdSort) itemidp2)->itemoff -
- ((itemIdSort) itemidp1)->itemoff;
+ return ((const itemIdSortData *) itemidp2)->itemoff -
+ ((const itemIdSortData *) itemidp1)->itemoff;
}
/*
diff --git a/src/backend/tsearch/spell.c b/src/backend/tsearch/spell.c
index 9c7ba85..29f0b68 100644
--- a/src/backend/tsearch/spell.c
+++ b/src/backend/tsearch/spell.c
@@ -208,8 +208,8 @@ cmpspellaffix(const void *s1, const void *s2)
static int
cmpcmdflag(const void *f1, const void *f2)
{
- CompoundAffixFlag *fv1 = (CompoundAffixFlag *) f1,
- *fv2 = (CompoundAffixFlag *) f2;
+ const CompoundAffixFlag *fv1 = (const CompoundAffixFlag *) f1;
+ const CompoundAffixFlag *fv2 = (const CompoundAffixFlag *) f2;
Assert(fv1->flagMode == fv2->flagMode);
diff --git a/src/backend/utils/adt/geo_spgist.c b/src/backend/utils/adt/geo_spgist.c
index 0190156..7bf5283 100644
--- a/src/backend/utils/adt/geo_spgist.c
+++ b/src/backend/utils/adt/geo_spgist.c
@@ -89,8 +89,8 @@
static int
compareDoubles(const void *a, const void *b)
{
- double x = *(double *) a;
- double y = *(double *) b;
+ double x = *(const double *) a;
+ double y = *(const double *) b;
if (x == y)
return 0;
diff --git a/src/backend/utils/adt/rangetypes.c b/src/backend/utils/adt/rangetypes.c
index 900bcb5..24a0e2c 100644
--- a/src/backend/utils/adt/rangetypes.c
+++ b/src/backend/utils/adt/rangetypes.c
@@ -1775,7 +1775,7 @@ make_range(TypeCacheEntry *typcache, RangeBound *lower, RangeBound *upper,
* but one is an upper bound and the other a lower bound.
*/
int
-range_cmp_bounds(TypeCacheEntry *typcache, RangeBound *b1, RangeBound *b2)
+range_cmp_bounds(TypeCacheEntry *typcache, const RangeBound *b1, const RangeBound *b2)
{
int32 result;
@@ -1849,8 +1849,8 @@ range_cmp_bounds(TypeCacheEntry *typcache, RangeBound *b1, RangeBound *b2)
* infinity is plus or minus.
*/
int
-range_cmp_bound_values(TypeCacheEntry *typcache, RangeBound *b1,
- RangeBound *b2)
+range_cmp_bound_values(TypeCacheEntry *typcache, const RangeBound *b1,
+ const RangeBound *b2)
{
/*
* First, handle cases involving infinity, which don't require invoking
diff --git a/src/backend/utils/adt/rangetypes_gist.c b/src/backend/utils/adt/rangetypes_gist.c
index 01cd234..863ccca 100644
--- a/src/backend/utils/adt/rangetypes_gist.c
+++ b/src/backend/utils/adt/rangetypes_gist.c
@@ -1481,8 +1481,8 @@ get_gist_range_class(RangeType *range)
static int
single_bound_cmp(const void *a, const void *b, void *arg)
{
- SingleBoundSortItem *i1 = (SingleBoundSortItem *) a;
- SingleBoundSortItem *i2 = (SingleBoundSortItem *) b;
+ const SingleBoundSortItem *i1 = (const SingleBoundSortItem *) a;
+ const SingleBoundSortItem *i2 = (const SingleBoundSortItem *) b;
TypeCacheEntry *typcache = (TypeCacheEntry *) arg;
return range_cmp_bounds(typcache, &i1->bound, &i2->bound);
@@ -1494,8 +1494,8 @@ single_bound_cmp(const void *a, const void *b, void *arg)
static int
interval_cmp_lower(const void *a, const void *b, void *arg)
{
- NonEmptyRange *i1 = (NonEmptyRange *) a;
- NonEmptyRange *i2 = (NonEmptyRange *) b;
+ const NonEmptyRange *i1 = (const NonEmptyRange *) a;
+ const NonEmptyRange *i2 = (const NonEmptyRange *) b;
TypeCacheEntry *typcache = (TypeCacheEntry *) arg;
return range_cmp_bounds(typcache, &i1->lower, &i2->lower);
@@ -1507,8 +1507,8 @@ interval_cmp_lower(const void *a, const void *b, void *arg)
static int
interval_cmp_upper(const void *a, const void *b, void *arg)
{
- NonEmptyRange *i1 = (NonEmptyRange *) a;
- NonEmptyRange *i2 = (NonEmptyRange *) b;
+ const NonEmptyRange *i1 = (const NonEmptyRange *) a;
+ const NonEmptyRange *i2 = (const NonEmptyRange *) b;
TypeCacheEntry *typcache = (TypeCacheEntry *) arg;
return range_cmp_bounds(typcache, &i1->upper, &i2->upper);
@@ -1520,8 +1520,8 @@ interval_cmp_upper(const void *a, const void *b, void *arg)
static int
common_entry_cmp(const void *i1, const void *i2)
{
- double delta1 = ((CommonEntry *) i1)->delta;
- double delta2 = ((CommonEntry *) i2)->delta;
+ double delta1 = ((const CommonEntry *) i1)->delta;
+ double delta2 = ((const CommonEntry *) i2)->delta;
if (delta1 < delta2)
return -1;
diff --git a/src/backend/utils/adt/rangetypes_spgist.c b/src/backend/utils/adt/rangetypes_spgist.c
index b89e90f..774a2d5 100644
--- a/src/backend/utils/adt/rangetypes_spgist.c
+++ b/src/backend/utils/adt/rangetypes_spgist.c
@@ -192,8 +192,8 @@ spg_range_quad_choose(PG_FUNCTION_ARGS)
static int
bound_cmp(const void *a, const void *b, void *arg)
{
- RangeBound *ba = (RangeBound *) a;
- RangeBound *bb = (RangeBound *) b;
+ const RangeBound *ba = (const RangeBound *) a;
+ const RangeBound *bb = (const RangeBound *) b;
TypeCacheEntry *typcache = (TypeCacheEntry *) arg;
return range_cmp_bounds(typcache, ba, bb);
diff --git a/src/backend/utils/adt/rangetypes_typanalyze.c b/src/backend/utils/adt/rangetypes_typanalyze.c
index 56504fc..13b289f 100644
--- a/src/backend/utils/adt/rangetypes_typanalyze.c
+++ b/src/backend/utils/adt/rangetypes_typanalyze.c
@@ -82,8 +82,8 @@ float8_qsort_cmp(const void *a1, const void *a2)
static int
range_bound_qsort_cmp(const void *a1, const void *a2, void *arg)
{
- RangeBound *b1 = (RangeBound *) a1;
- RangeBound *b2 = (RangeBound *) a2;
+ const RangeBound *b1 = (const RangeBound *) a1;
+ const RangeBound *b2 = (const RangeBound *) a2;
TypeCacheEntry *typcache = (TypeCacheEntry *) arg;
return range_cmp_bounds(typcache, b1, b2);
diff --git a/src/backend/utils/adt/tsquery_op.c b/src/backend/utils/adt/tsquery_op.c
index a574b4b..91604ee 100644
--- a/src/backend/utils/adt/tsquery_op.c
+++ b/src/backend/utils/adt/tsquery_op.c
@@ -295,8 +295,8 @@ collectTSQueryValues(TSQuery a, int *nvalues_p)
static int
cmp_string(const void *a, const void *b)
{
- const char *sa = *((const char **) a);
- const char *sb = *((const char **) b);
+ const char *sa = *((const char * const*) a);
+ const char *sb = *((const char * const*) b);
return strcmp(sa, sb);
}
diff --git a/src/bin/pg_dump/pg_dump_sort.c b/src/bin/pg_dump/pg_dump_sort.c
index d87f08d..679b9b0 100644
--- a/src/bin/pg_dump/pg_dump_sort.c
+++ b/src/bin/pg_dump/pg_dump_sort.c
@@ -220,20 +220,20 @@ sortDataAndIndexObjectsBySize(DumpableObject **objs, int numObjs)
static int
DOSizeCompare(const void *p1, const void *p2)
{
- DumpableObject *obj1 = *(DumpableObject **) p1;
- DumpableObject *obj2 = *(DumpableObject **) p2;
+ const DumpableObject *obj1 = *(const DumpableObject * const*) p1;
+ const DumpableObject *obj2 = *(const DumpableObject * const*) p2;
int obj1_size = 0;
int obj2_size = 0;
if (obj1->objType == DO_TABLE_DATA)
- obj1_size = ((TableDataInfo *) obj1)->tdtable->relpages;
+ obj1_size = ((const TableDataInfo *) obj1)->tdtable->relpages;
if (obj1->objType == DO_INDEX)
- obj1_size = ((IndxInfo *) obj1)->relpages;
+ obj1_size = ((const IndxInfo *) obj1)->relpages;
if (obj2->objType == DO_TABLE_DATA)
- obj2_size = ((TableDataInfo *) obj2)->tdtable->relpages;
+ obj2_size = ((const TableDataInfo *) obj2)->tdtable->relpages;
if (obj2->objType == DO_INDEX)
- obj2_size = ((IndxInfo *) obj2)->relpages;
+ obj2_size = ((const IndxInfo *) obj2)->relpages;
/* we want to see the biggest item go first */
if (obj1_size > obj2_size)
diff --git a/src/bin/psql/crosstabview.c b/src/bin/psql/crosstabview.c
index b283c24..8a0fc02 100644
--- a/src/bin/psql/crosstabview.c
+++ b/src/bin/psql/crosstabview.c
@@ -694,8 +694,8 @@ indexOfColumn(char *arg, const PGresult *res)
static int
pivotFieldCompare(const void *a, const void *b)
{
- pivot_field *pa = (pivot_field *) a;
- pivot_field *pb = (pivot_field *) b;
+ const pivot_field *pa = (const pivot_field *) a;
+ const pivot_field *pb = (const pivot_field *) b;
/* test null values */
if (!pb->name)
@@ -711,5 +711,5 @@ pivotFieldCompare(const void *a, const void *b)
static int
rankCompare(const void *a, const void *b)
{
- return *((int *) a) - *((int *) b);
+ return *((const int *) a) - *((const int *) b);
}
diff --git a/src/include/access/gin_private.h b/src/include/access/gin_private.h
index bf589ab..2e5a7dff 100644
--- a/src/include/access/gin_private.h
+++ b/src/include/access/gin_private.h
@@ -968,7 +968,7 @@ extern ItemPointer ginMergeItemPointers(ItemPointerData *a, uint32 na,
* so we want this to be inlined.
*/
static inline int
-ginCompareItemPointers(ItemPointer a, ItemPointer b)
+ginCompareItemPointers(const ItemPointerData *a, const ItemPointerData *b)
{
uint64 ia = (uint64) a->ip_blkid.bi_hi << 32 | (uint64) a->ip_blkid.bi_lo << 16 | a->ip_posid;
uint64 ib = (uint64) b->ip_blkid.bi_hi << 32 | (uint64) b->ip_blkid.bi_lo << 16 | b->ip_posid;
diff --git a/src/include/utils/rangetypes.h b/src/include/utils/rangetypes.h
index a774ca0..946c970 100644
--- a/src/include/utils/rangetypes.h
+++ b/src/include/utils/rangetypes.h
@@ -197,10 +197,10 @@ extern char range_get_flags(RangeType *range);
extern void range_set_contain_empty(RangeType *range);
extern RangeType *make_range(TypeCacheEntry *typcache, RangeBound *lower,
RangeBound *upper, bool empty);
-extern int range_cmp_bounds(TypeCacheEntry *typcache, RangeBound *b1,
- RangeBound *b2);
-extern int range_cmp_bound_values(TypeCacheEntry *typcache, RangeBound *b1,
- RangeBound *b2);
+extern int range_cmp_bounds(TypeCacheEntry *typcache, const RangeBound *b1,
+ const RangeBound *b2);
+extern int range_cmp_bound_values(TypeCacheEntry *typcache, const RangeBound *b1,
+ const RangeBound *b2);
extern bool bounds_adjacent(TypeCacheEntry *typcache, RangeBound bound1,
RangeBound bound2);
extern RangeType *make_empty_range(TypeCacheEntry *typcache);
diff --git a/src/test/isolation/isolationtester.c b/src/test/isolation/isolationtester.c
index db2b559..fc0e5c6 100644
--- a/src/test/isolation/isolationtester.c
+++ b/src/test/isolation/isolationtester.c
@@ -375,8 +375,8 @@ run_named_permutations(TestSpec *testspec)
static int
step_qsort_cmp(const void *a, const void *b)
{
- Step *stepa = *((Step **) a);
- Step *stepb = *((Step **) b);
+ const Step *stepa = *((const Step * const*) a);
+ const Step *stepb = *((const Step * const*) b);
return strcmp(stepa->name, stepb->name);
}
@@ -384,8 +384,8 @@ step_qsort_cmp(const void *a, const void *b)
static int
step_bsearch_cmp(const void *a, const void *b)
{
- char *stepname = (char *) a;
- Step *step = *((Step **) b);
+ const char *stepname = (const char *) a;
+ const Step *step = *((const Step * const*) b);
return strcmp(stepname, step->name);
}