Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-112672: use Tcl_Size to avoid incompatible pointer type warnings #112681

Merged
merged 8 commits into from
Jun 4, 2024
34 changes: 20 additions & 14 deletions Modules/_tkinter.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,12 @@ Copyright (C) 1994 Steen Lumholt.
#define USE_DEPRECATED_TOMMATH_API 1
#endif

// As suggested by https://core.tcl-lang.org/tcl/wiki?name=Migrating+C+extensions+to+Tcl+9
#ifndef TCL_SIZE_MAX
typedef int Tcl_Size;
#define TCL_SIZE_MAX INT_MAX
#endif

#if !(defined(MS_WINDOWS) || defined(__CYGWIN__))
#define HAVE_CREATEFILEHANDLER
#endif
Expand Down Expand Up @@ -488,7 +494,7 @@ unicodeFromTclString(const char *s)
static PyObject *
unicodeFromTclObj(Tcl_Obj *value)
{
int len;
Tcl_Size len;
#if USE_TCL_UNICODE
int byteorder = NATIVE_BYTEORDER;
const Tcl_UniChar *u = Tcl_GetUnicodeFromObj(value, &len);
Expand Down Expand Up @@ -1115,7 +1121,7 @@ FromObj(TkappObject *tkapp, Tcl_Obj *value)
}

if (value->typePtr == tkapp->ByteArrayType) {
int size;
Tcl_Size size;
char *data = (char*)Tcl_GetByteArrayFromObj(value, &size);
return PyBytes_FromStringAndSize(data, size);
}
Expand Down Expand Up @@ -1149,8 +1155,8 @@ FromObj(TkappObject *tkapp, Tcl_Obj *value)
}

if (value->typePtr == tkapp->ListType) {
int size;
int i, status;
Tcl_Size i, size;
int status;
PyObject *elem;
Tcl_Obj *tcl_elem;

Expand Down Expand Up @@ -1211,9 +1217,9 @@ typedef struct Tkapp_CallEvent {
} Tkapp_CallEvent;

static void
Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, int objc)
Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, Tcl_Size objc)
{
int i;
Tcl_Size i;
for (i = 0; i < objc; i++)
Tcl_DecrRefCount(objv[i]);
if (objv != objStore)
Expand All @@ -1224,7 +1230,7 @@ Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, int objc)
interpreter thread, which may or may not be the calling thread. */

static Tcl_Obj**
Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, int *pobjc)
Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, Tcl_Size *pobjc)
{
Tcl_Obj **objv = objStore;
Py_ssize_t objc = 0, i;
Expand Down Expand Up @@ -1272,10 +1278,10 @@ Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, int *pobjc)
Tcl_IncrRefCount(objv[i]);
}
}
*pobjc = (int)objc;
*pobjc = (Tcl_Size)objc;
return objv;
finally:
Tkapp_CallDeallocArgs(objv, objStore, (int)objc);
Tkapp_CallDeallocArgs(objv, objStore, (Tcl_Size)objc);
return NULL;
}

Expand Down Expand Up @@ -1342,7 +1348,7 @@ Tkapp_CallProc(Tcl_Event *evPtr, int flags)
Tkapp_CallEvent *e = (Tkapp_CallEvent *)evPtr;
Tcl_Obj *objStore[ARGSZ];
Tcl_Obj **objv;
int objc;
Tcl_Size objc;
int i;
ENTER_PYTHON
if (e->self->trace && !Tkapp_Trace(e->self, PyTuple_Pack(1, e->args))) {
Expand Down Expand Up @@ -1398,7 +1404,7 @@ Tkapp_Call(PyObject *selfptr, PyObject *args)
{
Tcl_Obj *objStore[ARGSZ];
Tcl_Obj **objv = NULL;
int objc, i;
Tcl_Size objc;
PyObject *res = NULL;
TkappObject *self = (TkappObject*)selfptr;
int flags = TCL_EVAL_DIRECT | TCL_EVAL_GLOBAL;
Expand Down Expand Up @@ -1445,6 +1451,7 @@ Tkapp_Call(PyObject *selfptr, PyObject *args)
{
TRACE(self, ("(O)", args));

int i;
objv = Tkapp_CallArgs(args, objStore, &objc);
if (!objv)
return NULL;
Expand Down Expand Up @@ -2179,13 +2186,12 @@ _tkinter_tkapp_splitlist(TkappObject *self, PyObject *arg)
/*[clinic end generated code: output=13b51d34386d36fb input=2b2e13351e3c0b53]*/
{
char *list;
int argc;
Tcl_Size argc, i;
const char **argv;
PyObject *v;
int i;

if (PyTclObject_Check(arg)) {
int objc;
Tcl_Size objc;
Tcl_Obj **objv;
if (Tcl_ListObjGetElements(Tkapp_Interp(self),
((PyTclObject*)arg)->value,
Expand Down
Loading