From 06e049afdf041c22b28d0983a91a5d38d5bf2c6e Mon Sep 17 00:00:00 2001 From: apnadkarni Date: Mon, 10 Apr 2023 13:21:02 +0000 Subject: Fix compiler warnings and crashes. Builds and passes test suite on Windows and Ubuntu for 64-bit --- generic/tclDecls.h | 18 ++++++++++++------ generic/tclFCmd.c | 2 +- generic/tclTest.c | 27 ++++++++++++++++----------- generic/tclTestObj.c | 2 +- generic/tclThreadTest.c | 3 ++- generic/tclTrace.c | 3 ++- win/tclWinDde.c | 3 ++- win/tclWinReg.c | 2 +- 8 files changed, 37 insertions(+), 23 deletions(-) diff --git a/generic/tclDecls.h b/generic/tclDecls.h index caf3ce6..3f3d76e 100644 --- a/generic/tclDecls.h +++ b/generic/tclDecls.h @@ -4020,19 +4020,19 @@ extern const TclStubs *tclStubsPtr; Tcl_GetStringFromObj(objPtr, (Tcl_Size *)NULL) #define Tcl_GetUnicode(objPtr) \ Tcl_GetUnicodeFromObj(objPtr, (Tcl_Size *)NULL) -#if defined(TCL_8_API) +#if defined(TCL_8_API) || TCL_MAJOR_VERSION == 8 # undef Tcl_GetBytesFromObj -# undef Tcl_GetIndexFromObjStruct # undef Tcl_GetStringFromObj # undef Tcl_GetUnicodeFromObj #endif +#undef Tcl_GetIndexFromObjStruct #undef TclGetByteArrayFromObj #undef Tcl_GetByteArrayFromObj #undef Tcl_GetBooleanFromObj #undef Tcl_GetBoolean #if defined(USE_TCL_STUBS) -# if defined(TCL_8_API) +# if defined(TCL_8_API) || TCL_MAJOR_VERSION == 8 # define Tcl_GetBytesFromObj(interp, objPtr, sizePtr) \ (sizeof(*(sizePtr)) <= sizeof(int) ? \ tclStubsPtr->tclGetBytesFromObj(interp, objPtr, (int *)(void *)(sizePtr)) : \ @@ -4060,6 +4060,9 @@ extern const TclStubs *tclStubsPtr; tclStubsPtr->tclGetUnicodeFromObj(objPtr, (int *)(void *)(sizePtr)) : \ tclStubsPtr->tcl_GetUnicodeFromObj(objPtr, (size_t *)(void *)(sizePtr))) # else /* TCL_8_API */ +# define Tcl_GetIndexFromObjStruct(interp, objPtr, tablePtr, offset, msg, flags, indexPtr) \ + (tclStubsPtr->tcl_GetIndexFromObjStruct((interp), (objPtr), (tablePtr), (offset), (msg), \ + (flags)|(int)(sizeof(*(indexPtr))<<1), (indexPtr))) # if TCL_MAJOR_VERSION > 8 # define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ tclStubsPtr->tcl_GetBytesFromObj(NULL, objPtr, (size_t *)(void *)(sizePtr)) @@ -4075,7 +4078,7 @@ extern const TclStubs *tclStubsPtr; ((sizeof(*(boolPtr)) == sizeof(int) && (TCL_MAJOR_VERSION == 8)) ? tclStubsPtr->tcl_GetBoolean(interp, src, (int *)(boolPtr)) : \ Tcl_GetBool(interp, src, (TCL_NULL_OK-2)&(int)sizeof((*(boolPtr))), (char *)(boolPtr))) #else -# if defined(TCL_8_API) +# if defined(TCL_8_API) || TCL_MAJOR_VERSION == 8 # define Tcl_GetBytesFromObj(interp, objPtr, sizePtr) \ (sizeof(*(sizePtr)) <= sizeof(int) ? \ TclGetBytesFromObj(interp, objPtr, (int *)(void *)(sizePtr)) : \ @@ -4096,6 +4099,9 @@ extern const TclStubs *tclStubsPtr; TclGetUnicodeFromObj(objPtr, (int *)(void *)(sizePtr)) : \ (Tcl_GetUnicodeFromObj)(objPtr, (size_t *)(void *)(sizePtr))) # else /* TCL_8_API */ +# define Tcl_GetIndexFromObjStruct(interp, objPtr, tablePtr, offset, msg, flags, indexPtr) \ + ((Tcl_GetIndexFromObjStruct)((interp), (objPtr), (tablePtr), (offset), (msg), \ + (flags)|(int)(sizeof(*(indexPtr))<<1), (indexPtr))) # define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ Tcl_GetBytesFromObj(NULL, objPtr, (size_t *)(void *)(sizePtr)) # endif /* TCL_8_API */ @@ -4176,7 +4182,7 @@ extern const TclStubs *tclStubsPtr; # define Tcl_WCharLen (sizeof(wchar_t) != sizeof(short) \ ? (Tcl_Size (*)(wchar_t *))tclStubsPtr->tcl_UniCharLen \ : (Tcl_Size (*)(wchar_t *))Tcl_Char16Len) -#if defined(TCL_8_API) +#if defined(TCL_8_API) || TCL_MAJOR_VERSION == 8 # undef Tcl_ListObjGetElements # define Tcl_ListObjGetElements(interp, listPtr, objcPtr, objvPtr) (sizeof(*(objcPtr)) == sizeof(int) \ ? tclStubsPtr->tclListObjGetElements((interp), (listPtr), (int *)(void *)(objcPtr), (objvPtr)) \ @@ -4220,7 +4226,7 @@ extern const TclStubs *tclStubsPtr; ? (Tcl_Size (*)(wchar_t *))Tcl_UniCharLen \ : (Tcl_Size (*)(wchar_t *))Tcl_Char16Len) #if !defined(BUILD_tcl) -#if defined(TCL_8_API) +#if defined(TCL_8_API) || TCL_MAJOR_VERSION == 8 # define Tcl_ListObjGetElements(interp, listPtr, objcPtr, objvPtr) (sizeof(*(objcPtr)) == sizeof(int) \ ? TclListObjGetElements((interp), (listPtr), (int *)(void *)(objcPtr), (objvPtr)) \ : (Tcl_ListObjGetElements)((interp), (listPtr), (size_t *)(void *)(objcPtr), (objvPtr))) diff --git a/generic/tclFCmd.c b/generic/tclFCmd.c index a34e80a..d26eb9c 100644 --- a/generic/tclFCmd.c +++ b/generic/tclFCmd.c @@ -1533,7 +1533,7 @@ TclFileTempDirCmd( } if (objc > 1) { - int length; + Tcl_Size length; Tcl_Obj *templateObj = objv[1]; const char *string = Tcl_GetStringFromObj(templateObj, &length); const int onWindows = (tclPlatform == TCL_PLATFORM_WINDOWS); diff --git a/generic/tclTest.c b/generic/tclTest.c index e42d5e6..d829640 100644 --- a/generic/tclTest.c +++ b/generic/tclTest.c @@ -2028,7 +2028,7 @@ static int UtfExtWrapper( int result; int flags; Tcl_Obj **flagObjs; - int nflags; + Tcl_Size nflags; static const struct { const char *flagKey; int flag; @@ -2043,7 +2043,7 @@ static int UtfExtWrapper( {"profilereplace", TCL_ENCODING_PROFILE_REPLACE}, {NULL, 0} }; - int i; + Tcl_Size i; Tcl_WideInt wide; if (objc < 7 || objc > 10) { @@ -2418,7 +2418,8 @@ TestevalexObjCmd( int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { - int length, flags; + int flags; + Tcl_Size length; const char *script; flags = 0; @@ -3656,7 +3657,8 @@ TestlinkarrayCmd( TCL_LINK_FLOAT, TCL_LINK_DOUBLE, TCL_LINK_STRING, TCL_LINK_CHARS, TCL_LINK_BINARY }; - int typeIndex, readonly, i, size, length; + int typeIndex, readonly, i, size; + Tcl_Size length; char *name, *arg; Tcl_WideInt addr; @@ -4001,7 +4003,8 @@ TestparserObjCmd( Tcl_Obj *const objv[]) /* The argument objects. */ { const char *script; - int length, dummy; + Tcl_Size dummy; + int length; Tcl_Parse parse; if (objc != 3) { @@ -4057,7 +4060,8 @@ TestexprparserObjCmd( Tcl_Obj *const objv[]) /* The argument objects. */ { const char *script; - int length, dummy; + Tcl_Size dummy; + int length; Tcl_Parse parse; if (objc != 3) { @@ -4246,7 +4250,8 @@ TestparsevarnameObjCmd( Tcl_Obj *const objv[]) /* The argument objects. */ { const char *script; - int append, length, dummy; + int length, append; + Tcl_Size dummy; Tcl_Parse parse; if (objc != 4) { @@ -4379,8 +4384,8 @@ TestregexpObjCmd( int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { - int i, indices, stringLength, match, about; - Tcl_Size ii; + int i, indices, match, about; + Tcl_Size stringLength, ii; int hasxflags, cflags, eflags; Tcl_RegExp regExpr; const char *string; @@ -5533,7 +5538,7 @@ TeststringbytesObjCmd( int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* The argument objects. */ { - int n; + Tcl_Size n; const unsigned char *p; if (objc != 2) { @@ -7269,7 +7274,7 @@ static Tcl_Obj * SimpleRedirect( Tcl_Obj *pathPtr) /* Name of file to copy. */ { - int len; + Tcl_Size len; const char *str; Tcl_Obj *origPtr; diff --git a/generic/tclTestObj.c b/generic/tclTestObj.c index b24c639..26d33ce 100644 --- a/generic/tclTestObj.c +++ b/generic/tclTestObj.c @@ -899,7 +899,7 @@ TestlistobjCmd( Tcl_Size first; /* First index in the list */ Tcl_Size count; /* Count of elements in a list */ Tcl_Obj **varPtr; - int i, len; + Tcl_Size i, len; if (objc < 3) { Tcl_WrongNumArgs(interp, 1, objv, "option arg ?arg...?"); diff --git a/generic/tclThreadTest.c b/generic/tclThreadTest.c index a5b079a..484c4e4 100644 --- a/generic/tclThreadTest.c +++ b/generic/tclThreadTest.c @@ -272,7 +272,8 @@ ThreadObjCmd( } case THREAD_CREATE: { const char *script; - int joinable, len; + int joinable; + Tcl_Size len; if (objc == 2) { /* diff --git a/generic/tclTrace.c b/generic/tclTrace.c index daeb424..4403562 100644 --- a/generic/tclTrace.c +++ b/generic/tclTrace.c @@ -269,7 +269,8 @@ Tcl_TraceObjCmd( case TRACE_OLD_VDELETE: { Tcl_Obj *copyObjv[6]; Tcl_Obj *opsList; - int code, numFlags; + int code; + Tcl_Size numFlags; if (objc != 5) { Tcl_WrongNumArgs(interp, 2, objv, "name ops command"); diff --git a/win/tclWinDde.c b/win/tclWinDde.c index fb2be99..457f20d 100644 --- a/win/tclWinDde.c +++ b/win/tclWinDde.c @@ -318,7 +318,8 @@ DdeSetServerName( Tcl_DString dString; const WCHAR *actualName; Tcl_Obj *srvListPtr = NULL, **srvPtrPtr = NULL; - int n, srvCount = 0, lastSuffix, r = TCL_OK; + Tcl_Size n, srvCount = 0; + int lastSuffix, r = TCL_OK; ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); /* diff --git a/win/tclWinReg.c b/win/tclWinReg.c index becc6f5..efd5b7c 100644 --- a/win/tclWinReg.c +++ b/win/tclWinReg.c @@ -1329,7 +1329,7 @@ SetValue( (DWORD) type, (BYTE *) &value, sizeof(DWORD)); } else if (type == REG_MULTI_SZ) { Tcl_DString data, buf; - int objc, i; + Tcl_Size objc, i; Tcl_Obj **objv; if (Tcl_ListObjGetElements(interp, dataObj, &objc, &objv) != TCL_OK) { -- cgit v0.12