From f230e27a2a790de1e1837e25807cb6df2e99b2ed Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 25 Nov 2024 08:03:16 +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 typedef 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. Reviewed-by: Tristan Partin Discussion: https://www.postgresql.org/message-id/flat/bce0fe54-75b4-438e-b42b-8e84bc7c0e9c%40eisentraut.org --- 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 82526552c52..76131d6c1f5 100644 --- a/src/pl/tcl/pltcl.c +++ b/src/pl/tcl/pltcl.c @@ -56,6 +56,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") @@ -983,7 +987,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 @@ -1059,7 +1063,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; @@ -2008,7 +2012,7 @@ pltcl_quote(ClientData cdata, Tcl_Interp *interp, char *tmp; const char *cp1; char *cp2; - int length; + Tcl_Size length; /************************************************************ * Check call syntax @@ -2202,7 +2206,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) @@ -2542,7 +2546,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; @@ -2679,7 +2683,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;