1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-12 16:21:30 +03:00

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
This commit is contained in:
Peter Eisentraut 2024-11-25 08:03:16 +01:00
parent 13242b64e1
commit f230e27a2a

View File

@ -56,6 +56,10 @@ PG_MODULE_MAGIC;
#define CONST86 #define CONST86
#endif #endif
#if !HAVE_TCL_VERSION(8,7)
typedef int Tcl_Size;
#endif
/* define our text domain for translations */ /* define our text domain for translations */
#undef TEXTDOMAIN #undef TEXTDOMAIN
#define TEXTDOMAIN PG_TEXTDOMAIN("pltcl") #define TEXTDOMAIN PG_TEXTDOMAIN("pltcl")
@ -983,7 +987,7 @@ pltcl_func_handler(PG_FUNCTION_ARGS, pltcl_call_state *call_state,
HeapTuple tup; HeapTuple tup;
Tcl_Obj *resultObj; Tcl_Obj *resultObj;
Tcl_Obj **resultObjv; Tcl_Obj **resultObjv;
int resultObjc; Tcl_Size resultObjc;
/* /*
* Set up data about result type. XXX it's tempting to consider * 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 tcl_rc;
int i; int i;
const char *result; const char *result;
int result_Objc; Tcl_Size result_Objc;
Tcl_Obj **result_Objv; Tcl_Obj **result_Objv;
int rc PG_USED_FOR_ASSERTS_ONLY; int rc PG_USED_FOR_ASSERTS_ONLY;
@ -2008,7 +2012,7 @@ pltcl_quote(ClientData cdata, Tcl_Interp *interp,
char *tmp; char *tmp;
const char *cp1; const char *cp1;
char *cp2; char *cp2;
int length; Tcl_Size length;
/************************************************************ /************************************************************
* Check call syntax * Check call syntax
@ -2202,7 +2206,7 @@ pltcl_returnnext(ClientData cdata, Tcl_Interp *interp,
if (prodesc->fn_retistuple) if (prodesc->fn_retistuple)
{ {
Tcl_Obj **rowObjv; Tcl_Obj **rowObjv;
int rowObjc; Tcl_Size rowObjc;
/* result should be a list, so break it down */ /* result should be a list, so break it down */
if (Tcl_ListObjGetElements(interp, objv[1], &rowObjc, &rowObjv) == TCL_ERROR) 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[]) int objc, Tcl_Obj *const objv[])
{ {
volatile MemoryContext plan_cxt = NULL; volatile MemoryContext plan_cxt = NULL;
int nargs; Tcl_Size nargs;
Tcl_Obj **argsObj; Tcl_Obj **argsObj;
pltcl_query_desc *qdesc; pltcl_query_desc *qdesc;
int i; int i;
@ -2679,7 +2683,7 @@ pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp *interp,
const char *arrayname = NULL; const char *arrayname = NULL;
Tcl_Obj *loop_body = NULL; Tcl_Obj *loop_body = NULL;
int count = 0; int count = 0;
int callObjc; Tcl_Size callObjc;
Tcl_Obj **callObjv = NULL; Tcl_Obj **callObjv = NULL;
Datum *argvalues; Datum *argvalues;
MemoryContext oldcontext = CurrentMemoryContext; MemoryContext oldcontext = CurrentMemoryContext;