aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut <peter@eisentraut.org>2024-11-25 08:03:16 +0100
committerPeter Eisentraut <peter@eisentraut.org>2024-11-25 11:44:29 +0100
commit32a2aa77ef7eec5ca46cfdbe6b175435cac1af61 (patch)
tree5dc614628bef0623b0a7141fbbc8ab32751df5f7
parentbc5a4dfcf7390145dc3ba3c1c18c5ce561b778cd (diff)
downloadpostgresql-32a2aa77ef7eec5ca46cfdbe6b175435cac1af61.tar.gz
postgresql-32a2aa77ef7eec5ca46cfdbe6b175435cac1af61.zip
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 <tristan@partin.io> Discussion: https://www.postgresql.org/message-id/flat/bce0fe54-75b4-438e-b42b-8e84bc7c0e9c%40eisentraut.org
-rw-r--r--src/pl/tcl/pltcl.c16
1 files 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;