I have another patch that removes some -Wcast-qual warnings, by
adjusting some function APIs.
This is as far as I get without resorting to advanced tricks like
unconstify() or _Generic.
From de207dfe45c9944de5006bf347011794ec94a90c Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <[email protected]>
Date: Tue, 20 Jan 2026 08:45:50 +0100
Subject: [PATCH] Fix -Wcast-qual warnings, easy without compiler tricks
---
src/backend/access/gin/ginbulk.c | 2 +-
src/backend/postmaster/launch_backend.c | 12 ++++++------
src/backend/utils/error/elog.c | 7 +++++--
src/common/jsonapi.c | 6 +++---
src/fe_utils/astreamer_lz4.c | 12 ++++++------
src/include/access/gin_private.h | 2 +-
src/include/port/pg_lfind.h | 4 ++--
src/include/postmaster/postmaster.h | 2 +-
src/interfaces/ecpg/preproc/parser.c | 17 +++++++++++------
9 files changed, 36 insertions(+), 28 deletions(-)
diff --git a/src/backend/access/gin/ginbulk.c b/src/backend/access/gin/ginbulk.c
index 839d7d31166..85865b39105 100644
--- a/src/backend/access/gin/ginbulk.c
+++ b/src/backend/access/gin/ginbulk.c
@@ -244,7 +244,7 @@ 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/postmaster/launch_backend.c
b/src/backend/postmaster/launch_backend.c
index e9134b9751b..30357845729 100644
--- a/src/backend/postmaster/launch_backend.c
+++ b/src/backend/postmaster/launch_backend.c
@@ -154,7 +154,7 @@ static void read_backend_variables(char *id, void
**startup_data, size_t *startu
static void restore_backend_variables(BackendParameters *param);
static bool save_backend_variables(BackendParameters *param, int child_slot,
- ClientSocket
*client_sock,
+ const
ClientSocket *client_sock,
#ifdef WIN32
HANDLE
childProcess, pid_t childPid,
#endif
@@ -162,7 +162,7 @@ static bool save_backend_variables(BackendParameters
*param, int child_slot,
static pid_t internal_forkexec(BackendType child_kind, int child_slot,
const void
*startup_data, size_t startup_data_len,
- ClientSocket
*client_sock);
+ const ClientSocket
*client_sock);
#endif /* EXEC_BACKEND */
@@ -204,7 +204,7 @@ PostmasterChildName(BackendType child_type)
pid_t
postmaster_child_launch(BackendType child_type, int child_slot,
void *startup_data, size_t
startup_data_len,
- ClientSocket *client_sock)
+ const ClientSocket *client_sock)
{
pid_t pid;
@@ -283,7 +283,7 @@ postmaster_child_launch(BackendType child_type, int
child_slot,
*/
static pid_t
internal_forkexec(BackendType child_kind, int child_slot,
- const void *startup_data, size_t
startup_data_len, ClientSocket *client_sock)
+ const void *startup_data, size_t
startup_data_len, const ClientSocket *client_sock)
{
static unsigned long tmpBackendFileNum = 0;
pid_t pid;
@@ -393,7 +393,7 @@ internal_forkexec(BackendType child_kind, int child_slot,
*/
static pid_t
internal_forkexec(BackendType child_kind, int child_slot,
- const void *startup_data, size_t
startup_data_len, ClientSocket *client_sock)
+ const void *startup_data, size_t
startup_data_len, const ClientSocket *client_sock)
{
int retry_count = 0;
STARTUPINFO si;
@@ -700,7 +700,7 @@ static void read_inheritable_socket(SOCKET *dest,
InheritableSocket *src);
/* Save critical backend variables into the BackendParameters struct */
static bool
save_backend_variables(BackendParameters *param,
- int child_slot, ClientSocket
*client_sock,
+ int child_slot, const ClientSocket
*client_sock,
#ifdef WIN32
HANDLE childProcess, pid_t childPid,
#endif
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index cb1c9d85ffe..6198d736e50 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -2755,7 +2755,6 @@ GetACPEncoding(void)
static void
write_eventlog(int level, const char *line, int len)
{
- WCHAR *utf16;
int eventlevel = EVENTLOG_ERROR_TYPE;
static HANDLE evtHandle = INVALID_HANDLE_VALUE;
@@ -2812,9 +2811,13 @@ write_eventlog(int level, const char *line, int len)
CurrentMemoryContext != NULL &&
GetMessageEncoding() != GetACPEncoding())
{
+ WCHAR *utf16;
+
utf16 = pgwin32_message_to_UTF16(line, len, NULL);
if (utf16)
{
+ const WCHAR *utf16_const = utf16;
+
ReportEventW(evtHandle,
eventlevel,
0,
@@ -2822,7 +2825,7 @@ write_eventlog(int level, const char *line, int len)
NULL,
1,
0,
- (LPCWSTR *) &utf16,
+ &utf16_const,
NULL);
/* XXX Try ReportEventA() when ReportEventW() fails? */
diff --git a/src/common/jsonapi.c b/src/common/jsonapi.c
index 265698e55bf..1145d93945f 100644
--- a/src/common/jsonapi.c
+++ b/src/common/jsonapi.c
@@ -2167,9 +2167,9 @@ json_lex_string(JsonLexContext *lex)
* can batch calls to jsonapi_appendBinaryStringInfo.
*/
while (p < end - sizeof(Vector8) &&
- !pg_lfind8('\\', (uint8 *) p,
sizeof(Vector8)) &&
- !pg_lfind8('"', (uint8 *) p,
sizeof(Vector8)) &&
- !pg_lfind8_le(31, (uint8 *) p,
sizeof(Vector8)))
+ !pg_lfind8('\\', (const uint8 *) p,
sizeof(Vector8)) &&
+ !pg_lfind8('"', (const uint8 *) p,
sizeof(Vector8)) &&
+ !pg_lfind8_le(31, (const uint8 *) p,
sizeof(Vector8)))
p += sizeof(Vector8);
for (; p < end; p++)
diff --git a/src/fe_utils/astreamer_lz4.c b/src/fe_utils/astreamer_lz4.c
index bcee7e088de..a5865c93598 100644
--- a/src/fe_utils/astreamer_lz4.c
+++ b/src/fe_utils/astreamer_lz4.c
@@ -121,14 +121,14 @@ astreamer_lz4_compressor_content(astreamer *streamer,
astreamer_archive_context context)
{
astreamer_lz4_frame *mystreamer;
- uint8 *next_in,
- *next_out;
+ const uint8 *next_in;
+ uint8 *next_out;
size_t out_bound,
compressed_size,
avail_out;
mystreamer = (astreamer_lz4_frame *) streamer;
- next_in = (uint8 *) data;
+ next_in = (const uint8 *) data;
/* Write header before processing the first input chunk. */
if (!mystreamer->header_written)
@@ -315,13 +315,13 @@ astreamer_lz4_decompressor_content(astreamer *streamer,
astreamer_archive_context context)
{
astreamer_lz4_frame *mystreamer;
- uint8 *next_in,
- *next_out;
+ const uint8 *next_in;
+ uint8 *next_out;
size_t avail_in,
avail_out;
mystreamer = (astreamer_lz4_frame *) streamer;
- next_in = (uint8 *) data;
+ next_in = (const uint8 *) data;
next_out = (uint8 *) mystreamer->base.bbs_buffer.data +
mystreamer->bytes_written;
avail_in = len;
avail_out = mystreamer->base.bbs_buffer.maxlen -
mystreamer->bytes_written;
diff --git a/src/include/access/gin_private.h b/src/include/access/gin_private.h
index e155045ce8a..7c3b4db94cd 100644
--- a/src/include/access/gin_private.h
+++ b/src/include/access/gin_private.h
@@ -488,7 +488,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) GinItemPointerGetBlockNumber(a) << 32 |
GinItemPointerGetOffsetNumber(a);
uint64 ib = (uint64) GinItemPointerGetBlockNumber(b) << 32 |
GinItemPointerGetOffsetNumber(b);
diff --git a/src/include/port/pg_lfind.h b/src/include/port/pg_lfind.h
index 05ac3f61247..18856c7a8c9 100644
--- a/src/include/port/pg_lfind.h
+++ b/src/include/port/pg_lfind.h
@@ -23,7 +23,7 @@
* return false.
*/
static inline bool
-pg_lfind8(uint8 key, uint8 *base, uint32 nelem)
+pg_lfind8(uint8 key, const uint8 *base, uint32 nelem)
{
uint32 i;
@@ -55,7 +55,7 @@ pg_lfind8(uint8 key, uint8 *base, uint32 nelem)
* 'key', otherwise return false.
*/
static inline bool
-pg_lfind8_le(uint8 key, uint8 *base, uint32 nelem)
+pg_lfind8_le(uint8 key, const uint8 *base, uint32 nelem)
{
uint32 i;
diff --git a/src/include/postmaster/postmaster.h
b/src/include/postmaster/postmaster.h
index d6ab9ee2d96..716b4c912b3 100644
--- a/src/include/postmaster/postmaster.h
+++ b/src/include/postmaster/postmaster.h
@@ -110,7 +110,7 @@ extern pid_t postmaster_child_launch(BackendType child_type,
int
child_slot,
void
*startup_data,
size_t
startup_data_len,
- struct
ClientSocket *client_sock);
+ const
struct ClientSocket *client_sock);
const char *PostmasterChildName(BackendType child_type);
#ifdef EXEC_BACKEND
pg_noreturn extern void SubPostmasterMain(int argc, char *argv[]);
diff --git a/src/interfaces/ecpg/preproc/parser.c
b/src/interfaces/ecpg/preproc/parser.c
index ea256dd3ac7..498f599aeed 100644
--- a/src/interfaces/ecpg/preproc/parser.c
+++ b/src/interfaces/ecpg/preproc/parser.c
@@ -260,14 +260,19 @@ base_yylex_location(void)
break;
default:
/* Else just use the input, i.e., yytext */
- base_yylloc = loc_strdup(base_yytext);
- /* Apply an ASCII-only downcasing */
- for (unsigned char *ptr = (unsigned char *)
base_yylloc; *ptr; ptr++)
{
- if (*ptr >= 'A' && *ptr <= 'Z')
- *ptr += 'a' - 'A';
+ char *tmp;
+
+ tmp = loc_strdup(base_yytext);
+ /* Apply an ASCII-only downcasing */
+ for (unsigned char *ptr = (unsigned char *)
tmp; *ptr; ptr++)
+ {
+ if (*ptr >= 'A' && *ptr <= 'Z')
+ *ptr += 'a' - 'A';
+ }
+ base_yylloc = tmp;
+ break;
}
- break;
}
return token;
}
--
2.53.0