From 7b60019bde5c49c02d763da8da3f109e97124a68 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 3 Nov 2026 15:39:36 +0100 Subject: [PATCH 05/10] Fix -Wcast-qual warnings in regex module - Replace some casts with unconstify() where appropriate. - Make pg_regex_t.re_fns pointer to const, because the "functions" it points to is also const. - Define VS() to a no-op. The default definition of casting to (void *) might cast away a qualifier. This construct is only needed for supporting ancient C, so we don't need it. --- src/backend/regex/regexec.c | 6 +++--- src/backend/regex/regfree.c | 2 +- src/include/regex/regcustom.h | 1 + src/include/regex/regex.h | 2 +- src/include/regex/regguts.h | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/backend/regex/regexec.c b/src/backend/regex/regexec.c index 665aa31bd03..d8bb5c0e617 100644 --- a/src/backend/regex/regexec.c +++ b/src/backend/regex/regexec.c @@ -249,9 +249,9 @@ pg_regexec(regex_t *re, v->nmatch = nmatch; } v->details = details; - v->start = (chr *) string; - v->search_start = (chr *) string + search_start; - v->stop = (chr *) string + len; + v->start = unconstify(chr *, string); + v->search_start = unconstify(chr *, string) + search_start; + v->stop = unconstify(chr *, string) + len; v->err = 0; v->subdfas = NULL; v->ladfas = NULL; diff --git a/src/backend/regex/regfree.c b/src/backend/regex/regfree.c index ae17ae70eb6..2aac3db19c6 100644 --- a/src/backend/regex/regfree.c +++ b/src/backend/regex/regfree.c @@ -50,5 +50,5 @@ pg_regfree(regex_t *re) { if (re == NULL) return; - (*((struct fns *) re->re_fns)->free) (re); + (*((const struct fns *) re->re_fns)->free) (re); } diff --git a/src/include/regex/regcustom.h b/src/include/regex/regcustom.h index 8c4d5d8cc7c..6b78e6a91fb 100644 --- a/src/include/regex/regcustom.h +++ b/src/include/regex/regcustom.h @@ -57,6 +57,7 @@ #define INTERRUPT(re) CHECK_FOR_INTERRUPTS() #undef assert #define assert(x) Assert(x) +#define VS(x) (x) /* internal character type and related */ typedef pg_wchar chr; /* the type itself */ diff --git a/src/include/regex/regex.h b/src/include/regex/regex.h index f34ee3a85bd..30c2de11664 100644 --- a/src/include/regex/regex.h +++ b/src/include/regex/regex.h @@ -156,7 +156,7 @@ typedef struct Oid re_collation; /* Collation that defines LC_CTYPE behavior */ /* the rest is opaque pointers to hidden innards */ char *re_guts; /* `char *' is more portable than `void *' */ - char *re_fns; + const void *re_fns; } pg_regex_t; /* result reporting (may acquire more fields later) */ diff --git a/src/include/regex/regguts.h b/src/include/regex/regguts.h index 6d618ec69fb..bcd8676660d 100644 --- a/src/include/regex/regguts.h +++ b/src/include/regex/regguts.h @@ -534,7 +534,7 @@ struct fns }; #define STACK_TOO_DEEP(re) \ - ((*((struct fns *) (re)->re_fns)->stack_too_deep) ()) + ((*((const struct fns *) (re)->re_fns)->stack_too_deep) ()) /* -- 2.56.0