Tcl 9 changed several API functions to take Tcl_Size, which is ptrdiff_t, instead of int, for 64-bit enablement. We have to change a few local variables to be compatible with that. We also provide a fallback typedef of Tcl_Size for older Tcl versions. Here is a patch for that.

The affected variables are used for quantities that will not approach
values beyond the range of int (usually number of columns), so this doesn't change any functionality, AFAICT.
From 42ccfddb24536a863e8df92d9f6348bf319d55b3 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Fri, 15 Nov 2024 10:45:32 +0100
Subject: [PATCH] Add support for Tcl 9

Tcl 9 changed several API functions to take Tcl_Size, which is
ptrdiff_t, instead of int, for 64-bit enablement.  We have to change a
few local variables to be compatible with that.  We also provide a
fallback typdef of Tcl_Size for older Tcl versions.

The affected variables are used for quantities that will not approach
values beyond the range of int, so this doesn't change any
functionality.
---
 src/pl/tcl/pltcl.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c
index 80de0db40de..e2d9246a678 100644
--- a/src/pl/tcl/pltcl.c
+++ b/src/pl/tcl/pltcl.c
@@ -55,6 +55,10 @@ PG_MODULE_MAGIC;
 #define CONST86
 #endif
 
+#if !HAVE_TCL_VERSION(8,7)
+typedef int Tcl_Size;
+#endif
+
 /* define our text domain for translations */
 #undef TEXTDOMAIN
 #define TEXTDOMAIN PG_TEXTDOMAIN("pltcl")
@@ -987,7 +991,7 @@ pltcl_func_handler(PG_FUNCTION_ARGS, pltcl_call_state 
*call_state,
                HeapTuple       tup;
                Tcl_Obj    *resultObj;
                Tcl_Obj   **resultObjv;
-               int                     resultObjc;
+               Tcl_Size        resultObjc;
 
                /*
                 * Set up data about result type.  XXX it's tempting to consider
@@ -1063,7 +1067,7 @@ pltcl_trigger_handler(PG_FUNCTION_ARGS, pltcl_call_state 
*call_state,
        int                     tcl_rc;
        int                     i;
        const char *result;
-       int                     result_Objc;
+       Tcl_Size        result_Objc;
        Tcl_Obj   **result_Objv;
        int                     rc PG_USED_FOR_ASSERTS_ONLY;
 
@@ -2089,7 +2093,7 @@ pltcl_quote(ClientData cdata, Tcl_Interp *interp,
        char       *tmp;
        const char *cp1;
        char       *cp2;
-       int                     length;
+       Tcl_Size        length;
 
        /************************************************************
         * Check call syntax
@@ -2283,7 +2287,7 @@ pltcl_returnnext(ClientData cdata, Tcl_Interp *interp,
                if (prodesc->fn_retistuple)
                {
                        Tcl_Obj   **rowObjv;
-                       int                     rowObjc;
+                       Tcl_Size        rowObjc;
 
                        /* result should be a list, so break it down */
                        if (Tcl_ListObjGetElements(interp, objv[1], &rowObjc, 
&rowObjv) == TCL_ERROR)
@@ -2625,7 +2629,7 @@ pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp,
                                  int objc, Tcl_Obj *const objv[])
 {
        volatile MemoryContext plan_cxt = NULL;
-       int                     nargs;
+       Tcl_Size        nargs;
        Tcl_Obj   **argsObj;
        pltcl_query_desc *qdesc;
        int                     i;
@@ -2763,7 +2767,7 @@ pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp 
*interp,
        const char *arrayname = NULL;
        Tcl_Obj    *loop_body = NULL;
        int                     count = 0;
-       int                     callObjc;
+       Tcl_Size        callObjc;
        Tcl_Obj   **callObjv = NULL;
        Datum      *argvalues;
        MemoryContext oldcontext = CurrentMemoryContext;
-- 
2.47.0

Reply via email to