mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +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:
		@@ -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")
 | 
				
			||||||
@@ -987,7 +991,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
 | 
				
			||||||
@@ -1063,7 +1067,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)
 | 
				
			||||||
@@ -2543,7 +2547,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;
 | 
				
			||||||
@@ -2681,7 +2685,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;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user