From cf84dd6daf65e20f747bcabb9584b370c08f4392 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Fri, 16 Jun 2023 12:21:21 +0000 Subject: Proposed fix for [c13819225e]: Problem with lsort|lsearch -stride on 32-bit linux. Also fix some compiler warnings --- generic/tclBinary.c | 2 +- generic/tclCmdIL.c | 15 ++++++++------- generic/tclIOUtil.c | 8 ++++---- generic/tclVar.c | 4 ++-- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/generic/tclBinary.c b/generic/tclBinary.c index 81ea3f3..b8cf1bc 100644 --- a/generic/tclBinary.c +++ b/generic/tclBinary.c @@ -2629,7 +2629,7 @@ BinaryEncode64( } switch (index) { case OPT_MAXLEN: - if (Tcl_GetSizeIntFromObj(interp, objv[i + 1], &maxlen) != TCL_OK) { + if (TclGetSizeIntFromObj(interp, objv[i + 1], &maxlen) != TCL_OK) { return TCL_ERROR; } if (maxlen < 0) { diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c index 4836b9e..9a502e0 100644 --- a/generic/tclCmdIL.c +++ b/generic/tclCmdIL.c @@ -2981,7 +2981,8 @@ Tcl_LrepeatObjCmd( Tcl_Obj *const objv[]) /* The argument objects. */ { - Tcl_Size elementCount, i, totalElems; + Tcl_WideInt elementCount, i; + Tcl_Size totalElems; Tcl_Obj *listPtr, **dataArray = NULL; /* @@ -2993,12 +2994,12 @@ Tcl_LrepeatObjCmd( Tcl_WrongNumArgs(interp, 1, objv, "count ?value ...?"); return TCL_ERROR; } - if (TCL_OK != TclGetSizeIntFromObj(interp, objv[1], &elementCount)) { + if (TCL_OK != TclGetWideIntFromObj(interp, objv[1], &elementCount)) { return TCL_ERROR; } if (elementCount < 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "bad count \"%" TCL_SIZE_MODIFIER "d\": must be integer >= 0", elementCount)); + "bad count \"%" TCL_LL_MODIFIER "d\": must be integer >= 0", elementCount)); Tcl_SetErrorCode(interp, "TCL", "OPERATION", "LREPEAT", "NEGARG", NULL); return TCL_ERROR; @@ -3307,10 +3308,10 @@ Tcl_LsearchObjCmd( const char *bytes, *patternBytes; int match, result=TCL_OK, bisect; Tcl_Size i, length = 0, listc, elemLen, start, index; - Tcl_Size groupSize, groupOffset, lower, upper; + Tcl_Size groupOffset, lower, upper; int allocatedIndexVector = 0; int isIncreasing; - Tcl_WideInt patWide, objWide, wide; + Tcl_WideInt patWide, objWide, wide, groupSize; int allMatches, inlineReturn, negatedMatch, returnSubindices, noCase; double patDouble, objDouble; SortInfo sortInfo; @@ -4554,8 +4555,8 @@ Tcl_LsortObjCmd( int indices, nocase = 0, indexc; int sortMode = SORTMODE_ASCII; int group, allocatedIndexVector = 0; - Tcl_Size j, idx, groupSize, groupOffset, length; - Tcl_WideInt wide; + Tcl_Size j, idx, groupOffset, length; + Tcl_WideInt wide, groupSize; Tcl_Obj *resultPtr, *cmdPtr, **listObjPtrs, *listObj, *indexPtr; Tcl_Size i, elmArrSize; SortElement *elementArray = NULL, *elementPtr; diff --git a/generic/tclIOUtil.c b/generic/tclIOUtil.c index cec6ad3..4484e2b 100644 --- a/generic/tclIOUtil.c +++ b/generic/tclIOUtil.c @@ -1802,7 +1802,7 @@ Tcl_FSEvalFileEx( const char *pathString = Tcl_GetStringFromObj(pathPtr, &length); unsigned limit = 150; - int overflow = (length > limit); + int overflow = ((unsigned)length > limit); Tcl_AppendObjToErrorInfo(interp, Tcl_ObjPrintf( "\n (file \"%.*s%s\" line %d)", @@ -1954,12 +1954,12 @@ EvalFileCallback( Tcl_Size length; const char *pathString = Tcl_GetStringFromObj(pathPtr, &length); - const unsigned int limit = 150; - int overflow = (length > limit); + const unsigned limit = 150; + int overflow = ((unsigned)length > limit); Tcl_AppendObjToErrorInfo(interp, Tcl_ObjPrintf( "\n (file \"%.*s%s\" line %d)", - (overflow ? limit : (unsigned int)length), pathString, + (overflow ? limit : (unsigned)length), pathString, (overflow ? "..." : ""), Tcl_GetErrorLine(interp))); } diff --git a/generic/tclVar.c b/generic/tclVar.c index 32ee631..3bd47be 100644 --- a/generic/tclVar.c +++ b/generic/tclVar.c @@ -376,7 +376,7 @@ CleanupVar( { if (TclIsVarUndefined(varPtr) && TclIsVarInHash(varPtr) && !TclIsVarTraced(varPtr) - && (VarHashRefCount(varPtr) == (unsigned) + && (VarHashRefCount(varPtr) == (Tcl_Size) !TclIsVarDeadHash(varPtr))) { if (VarHashRefCount(varPtr) == 0) { Tcl_Free(varPtr); @@ -386,7 +386,7 @@ CleanupVar( } if (arrayPtr != NULL && TclIsVarUndefined(arrayPtr) && TclIsVarInHash(arrayPtr) && !TclIsVarTraced(arrayPtr) && - (VarHashRefCount(arrayPtr) == (unsigned) + (VarHashRefCount(arrayPtr) == (Tcl_Size) !TclIsVarDeadHash(arrayPtr))) { if (VarHashRefCount(arrayPtr) == 0) { Tcl_Free(arrayPtr); -- cgit v0.12