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

Reply via email to