diff options
42 files changed, 390 insertions, 427 deletions
diff --git a/generic/regcomp.c b/generic/regcomp.c index 58d55fb..e36fc30 100644 --- a/generic/regcomp.c +++ b/generic/regcomp.c @@ -39,7 +39,7 @@ /* automatically gathered by fwd; do not hand-edit */ /* === regcomp.c === */ int compile(regex_t *, const chr *, size_t, int); -static void moresubs(struct vars *, int); +static void moresubs(struct vars *, size_t); static int freev(struct vars *, int); static void makesearch(struct vars *, struct nfa *); static struct subre *parse(struct vars *, int, int, struct state *, struct state *); @@ -469,18 +469,18 @@ compile( /* - moresubs - enlarge subRE vector - ^ static void moresubs(struct vars *, int); + ^ static void moresubs(struct vars *, size_t); */ static void moresubs( struct vars *v, - int wanted) /* want enough room for this one */ + size_t wanted) /* want enough room for this one */ { struct subre **p; size_t n; - assert(wanted > 0 && (size_t)wanted >= v->nsubs); - n = (size_t)wanted * 3 / 2 + 1; + assert(wanted > 0 && wanted >= v->nsubs); + n = wanted * 3 / 2 + 1; if (v->subs == v->sub10) { p = (struct subre **) MALLOC(n * sizeof(struct subre *)); if (p != NULL) { @@ -499,7 +499,7 @@ moresubs( *p = NULL; } assert(v->nsubs == n); - assert((size_t)wanted < v->nsubs); + assert(wanted < v->nsubs); } /* @@ -797,7 +797,7 @@ parseqatom( struct subre *t; int cap; /* capturing parens? */ int pos; /* positive lookahead? */ - int subno; /* capturing-parens or backref number */ + size_t subno; /* capturing-parens or backref number */ int atomtype; int qprefer; /* quantifier short/long preference */ int f; @@ -954,10 +954,10 @@ parseqatom( if (cap) { v->nsubexp++; subno = v->nsubexp; - if ((size_t)subno >= v->nsubs) { + if (subno >= v->nsubs) { moresubs(v, subno); } - assert((size_t)subno < v->nsubs); + assert(subno < v->nsubs); } else { atomtype = PLAIN; /* something that's not '(' */ } diff --git a/generic/tclAlloc.c b/generic/tclAlloc.c index 9dcb431..f8bc2f7 100644 --- a/generic/tclAlloc.c +++ b/generic/tclAlloc.c @@ -603,7 +603,7 @@ TclpRealloc( if (maxSize < numBytes) { numBytes = maxSize; } - memcpy(newPtr, oldPtr, (size_t) numBytes); + memcpy(newPtr, oldPtr, numBytes); TclpFree(oldPtr); return newPtr; } diff --git a/generic/tclBasic.c b/generic/tclBasic.c index 51ff8a6..8196ef4 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -3992,7 +3992,7 @@ Tcl_CancelEval( if (resultObjPtr != NULL) { result = TclGetStringFromObj(resultObjPtr, &cancelInfo->length); cancelInfo->result = Tcl_Realloc(cancelInfo->result,cancelInfo->length); - memcpy(cancelInfo->result, result, (size_t) cancelInfo->length); + memcpy(cancelInfo->result, result, cancelInfo->length); TclDecrRefCount(resultObjPtr); /* Discard their result object. */ } else { cancelInfo->result = NULL; diff --git a/generic/tclBinary.c b/generic/tclBinary.c index ea64557..94ea600 100644 --- a/generic/tclBinary.c +++ b/generic/tclBinary.c @@ -548,8 +548,7 @@ SetByteArrayFromAny( return TCL_OK; } - src = TclGetString(objPtr); - length = objPtr->length; + src = TclGetStringFromObj(objPtr, &length); srcEnd = src + length; byteArrayPtr = Tcl_Alloc(BYTEARRAY_SIZE(length)); diff --git a/generic/tclCkalloc.c b/generic/tclCkalloc.c index 32d4158..bdc5cf2 100644 --- a/generic/tclCkalloc.c +++ b/generic/tclCkalloc.c @@ -248,7 +248,7 @@ ValidateMemory( } } if (guard_failed) { - TclDumpMemoryInfo((ClientData) stderr, 0); + TclDumpMemoryInfo(stderr, 0); fprintf(stderr, "low guard failed at %p, %s %d\n", memHeaderP->body, file, line); fflush(stderr); /* In case name pointer is bad. */ @@ -270,7 +270,7 @@ ValidateMemory( } if (guard_failed) { - TclDumpMemoryInfo((ClientData) stderr, 0); + TclDumpMemoryInfo(stderr, 0); fprintf(stderr, "high guard failed at %p, %s %d\n", memHeaderP->body, file, line); fflush(stderr); /* In case name pointer is bad. */ @@ -408,7 +408,7 @@ Tcl_DbCkalloc( } if (result == NULL) { fflush(stdout); - TclDumpMemoryInfo((ClientData) stderr, 0); + TclDumpMemoryInfo(stderr, 0); Tcl_Panic("unable to alloc %" TCL_Z_MODIFIER "u bytes, %s line %d", size, file, line); } @@ -498,7 +498,7 @@ Tcl_AttemptDbCkalloc( } if (result == NULL) { fflush(stdout); - TclDumpMemoryInfo((ClientData) stderr, 0); + TclDumpMemoryInfo(stderr, 0); return NULL; } @@ -689,7 +689,7 @@ Tcl_DbCkrealloc( copySize = memp->length; } newPtr = Tcl_DbCkalloc(size, file, line); - memcpy(newPtr, ptr, (size_t) copySize); + memcpy(newPtr, ptr, copySize); Tcl_DbCkfree(ptr, file, line); return newPtr; } @@ -723,7 +723,7 @@ Tcl_AttemptDbCkrealloc( if (newPtr == NULL) { return NULL; } - memcpy(newPtr, ptr, (size_t) copySize); + memcpy(newPtr, ptr, copySize); Tcl_DbCkfree(ptr, file, line); return newPtr; } diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c index e7ff8cb..d0a1a41 100644 --- a/generic/tclCmdIL.c +++ b/generic/tclCmdIL.c @@ -35,7 +35,7 @@ typedef struct SortElement { } collationKey; union { /* Object being sorted, or its index. */ Tcl_Obj *objPtr; - int index; + size_t index; } payload; struct SortElement *nextPtr;/* Next element in the list, or NULL for end * of list. */ @@ -2420,7 +2420,8 @@ Tcl_LinsertObjCmd( Tcl_Obj *const objv[]) /* Argument objects. */ { Tcl_Obj *listPtr; - int index, len, result; + size_t index; + int len, result; if (objc < 3) { Tcl_WrongNumArgs(interp, 1, objv, "list index ?element ...?"); @@ -2442,7 +2443,7 @@ Tcl_LinsertObjCmd( if (result != TCL_OK) { return result; } - if (index > len) { + if (index + 1 > (size_t)len + 1) { index = len; } @@ -2456,7 +2457,7 @@ Tcl_LinsertObjCmd( listPtr = TclListObjCopy(NULL, listPtr); } - if ((objc == 4) && (index == len)) { + if ((objc == 4) && (index == (size_t)len)) { /* * Special case: insert one element at the end of the list. */ @@ -2674,7 +2675,8 @@ Tcl_LrangeObjCmd( register Tcl_Obj *const objv[]) /* Argument objects. */ { - int listLen, first, last, result; + int listLen, result; + size_t first, last; if (objc != 4) { Tcl_WrongNumArgs(interp, 1, objv, "list first last"); @@ -2836,7 +2838,8 @@ Tcl_LreplaceObjCmd( Tcl_Obj *const objv[]) /* Argument objects. */ { register Tcl_Obj *listPtr; - int first, last, listLen, numToDelete, result; + size_t first, last; + int listLen, numToDelete, result; if (objc < 4) { Tcl_WrongNumArgs(interp, 1, objv, @@ -2865,17 +2868,16 @@ Tcl_LreplaceObjCmd( return result; } - if (first < 0) { + if (first == TCL_INDEX_NONE) { first = 0; - } - if (first > listLen) { + } else if (first > (size_t)listLen) { first = listLen; } - if (last >= listLen) { + if (last + 1 > (size_t)listLen) { last = listLen - 1; } - if (first <= last) { + if (first + 1 <= last + 1) { numToDelete = last - first + 1; } else { numToDelete = 0; @@ -3017,9 +3019,9 @@ Tcl_LsearchObjCmd( { const char *bytes, *patternBytes; int i, match, index, result=TCL_OK, listc, bisect; - size_t length = 0, elemLen; + size_t length = 0, elemLen, start; int allocatedIndexVector = 0; - int dataType, isIncreasing, lower, upper, start, groupSize, groupOffset; + int dataType, isIncreasing, lower, upper, groupSize, groupOffset; Tcl_WideInt patWide, objWide; int allMatches, inlineReturn, negatedMatch, returnSubindices, noCase; double patDouble, objDouble; @@ -3245,7 +3247,7 @@ Tcl_LsearchObjCmd( TCL_INDEX_NONE, &encoded) != TCL_OK) { result = TCL_ERROR; } - if (encoded == TCL_INDEX_NONE) { + if (encoded == (int)TCL_INDEX_NONE) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "index \"%s\" cannot select an element " "from any list", TclGetString(indices[j]))); @@ -3378,8 +3380,8 @@ Tcl_LsearchObjCmd( if (result != TCL_OK) { goto done; } - if (start < 0) { - start = 0; + if (start == TCL_INDEX_NONE) { + start = TCL_INDEX_START; } /* @@ -3387,7 +3389,7 @@ Tcl_LsearchObjCmd( * "did not match anything at all" result straight away. [Bug 1374778] */ - if (start > listc-1) { + if (start >= (size_t)listc) { if (allMatches || inlineReturn) { Tcl_ResetResult(interp); } else { @@ -3595,8 +3597,7 @@ Tcl_LsearchObjCmd( if (noCase) { match = (TclUtfCasecmp(bytes, patternBytes) == 0); } else { - match = (memcmp(bytes, patternBytes, - (size_t) length) == 0); + match = (memcmp(bytes, patternBytes, length) == 0); } } break; @@ -3962,7 +3963,7 @@ Tcl_LsortObjCmd( int result = TclIndexEncode(interp, indexv[j], TCL_INDEX_NONE, TCL_INDEX_NONE, &encoded); - if ((result == TCL_OK) && (encoded == TCL_INDEX_NONE)) { + if ((result == TCL_OK) && (encoded == (int)TCL_INDEX_NONE)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "index \"%s\" cannot select an element " "from any list", TclGetString(indexv[j]))); @@ -4290,7 +4291,7 @@ Tcl_LsortObjCmd( } } else if (indices) { for (i=0; elementPtr != NULL ; elementPtr = elementPtr->nextPtr) { - objPtr = Tcl_NewWideIntObj(elementPtr->payload.index); + objPtr = TclNewWideIntObjFromSize(elementPtr->payload.index); newArray[i++] = objPtr; Tcl_IncrRefCount(objPtr); } @@ -4706,7 +4707,8 @@ SelectObjFromSublist( */ for (i=0 ; i<infoPtr->indexc ; i++) { - int listLen, index; + int listLen; + int index; Tcl_Obj *currentObj; if (TclListObjLength(infoPtr->interp, objPtr, &listLen) != TCL_OK) { @@ -4722,7 +4724,7 @@ SelectObjFromSublist( return NULL; } if (currentObj == NULL) { - if (index == TCL_INDEX_NONE) { + if (index == (int)TCL_INDEX_NONE) { index = TCL_INDEX_END - infoPtr->indexv[i]; Tcl_SetObjResult(infoPtr->interp, Tcl_ObjPrintf( "element end-%d missing from sublist \"%s\"", diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c index 8afc98c..f140f3c 100644 --- a/generic/tclCmdMZ.c +++ b/generic/tclCmdMZ.c @@ -126,7 +126,8 @@ Tcl_RegexpObjCmd( int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { - int i, indices, match, about, offset, all, doinline, numMatchesSaved; + size_t offset; + int i, indices, match, about, all, doinline, numMatchesSaved; int cflags, eflags, stringLength, matchLength; Tcl_RegExp regExpr; Tcl_Obj *objPtr, *startIndex = NULL, *resultPtr = NULL; @@ -145,7 +146,7 @@ Tcl_RegexpObjCmd( indices = 0; about = 0; cflags = TCL_REG_ADVANCED; - offset = 0; + offset = TCL_INDEX_START; all = 0; doinline = 0; @@ -190,7 +191,7 @@ Tcl_RegexpObjCmd( cflags |= TCL_REG_NLANCH; break; case REGEXP_START: { - int temp; + size_t temp; if (++i >= objc) { goto endOfForLoop; } @@ -260,8 +261,8 @@ Tcl_RegexpObjCmd( if (startIndex) { TclGetIntForIndexM(interp, startIndex, stringLength, &offset); Tcl_DecrRefCount(startIndex); - if (offset < 0) { - offset = 0; + if (offset == TCL_INDEX_NONE) { + offset = TCL_INDEX_START; } } @@ -305,9 +306,9 @@ Tcl_RegexpObjCmd( * start of the string unless the previous character is a newline. */ - if (offset == 0) { + if (offset == TCL_INDEX_START) { eflags = 0; - } else if (offset > stringLength) { + } else if (offset + 1 > (size_t)stringLength + 1) { eflags = TCL_REG_NOTBOL; } else if (Tcl_GetUniChar(objPtr, offset-1) == '\n') { eflags = 0; @@ -380,7 +381,7 @@ Tcl_RegexpObjCmd( * match instead of the first character after the match. */ - if (end >= offset) { + if ((size_t)end + 1 >= offset + 1) { end--; } } else { @@ -443,7 +444,7 @@ Tcl_RegexpObjCmd( offset++; } all++; - if (offset >= stringLength) { + if (offset + 1 >= (size_t)stringLength + 1) { break; } } @@ -486,8 +487,8 @@ Tcl_RegsubObjCmd( int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { - int idx, result, cflags, all, numMatches, offset; - size_t wlen, wsublen = 0; + int idx, result, cflags, all, numMatches; + size_t wlen, wsublen = 0, offset; int start, end, subStart, subEnd, match, command, numParts; Tcl_RegExp regExpr; Tcl_RegExpInfo info; @@ -507,7 +508,7 @@ Tcl_RegsubObjCmd( cflags = TCL_REG_ADVANCED; all = 0; - offset = 0; + offset = TCL_INDEX_START; command = 0; resultPtr = NULL; @@ -546,7 +547,7 @@ Tcl_RegsubObjCmd( cflags |= TCL_REG_NLANCH; break; case REGSUB_START: { - int temp; + size_t temp; if (++idx >= objc) { goto endOfForLoop; } @@ -585,12 +586,12 @@ Tcl_RegsubObjCmd( TclGetIntForIndexM(interp, startIndex, stringLength, &offset); Tcl_DecrRefCount(startIndex); - if (offset < 0) { - offset = 0; + if (offset == TCL_INDEX_NONE) { + offset = TCL_INDEX_START; } } - if (all && (offset == 0) && (command == 0) + if (all && (offset == TCL_INDEX_START) && (command == 0) && (strpbrk(TclGetString(objv[2]), "&\\") == NULL) && (strpbrk(TclGetString(objv[0]), "*+?{}()[].\\|^$") == NULL)) { /* @@ -634,8 +635,7 @@ Tcl_RegsubObjCmd( for (p = wfirstChar = wstring; wstring < wend; wstring++) { if ((*wstring == *wsrc || (nocase && Tcl_UniCharToLower(*wstring)==wsrclc)) && - (slen==1 || (strCmpFn(wstring, wsrc, - (size_t)slen) == 0))) { + (slen==1 || (strCmpFn(wstring, wsrc, slen) == 0))) { if (numMatches == 0) { resultPtr = Tcl_NewUnicodeObj(wstring, 0); Tcl_IncrRefCount(resultPtr); @@ -723,7 +723,7 @@ Tcl_RegsubObjCmd( */ numMatches = 0; - for ( ; (size_t)offset <= wlen; ) { + for ( ; offset <= wlen; ) { /* * The flags argument is set if string is part of a larger string, so @@ -745,7 +745,7 @@ Tcl_RegsubObjCmd( if (numMatches == 0) { resultPtr = Tcl_NewUnicodeObj(wstring, 0); Tcl_IncrRefCount(resultPtr); - if (offset > 0) { + if (offset > TCL_INDEX_START) { /* * Copy the initial portion of the string in if an offset was * specified. @@ -838,7 +838,7 @@ Tcl_RegsubObjCmd( * again at the same spot. */ - if ((size_t)offset < wlen) { + if (offset < wlen) { Tcl_AppendUnicodeToObj(resultPtr, wstring + offset, 1); } offset++; @@ -911,7 +911,7 @@ Tcl_RegsubObjCmd( * order to prevent infinite loops. */ - if ((size_t)offset < wlen) { + if (offset < wlen) { Tcl_AppendUnicodeToObj(resultPtr, wstring + offset, 1); } offset++; @@ -923,7 +923,7 @@ Tcl_RegsubObjCmd( * one more step so we don't match again at the same spot. */ - if ((size_t)offset < wlen) { + if (offset < wlen) { Tcl_AppendUnicodeToObj(resultPtr, wstring + offset, 1); } offset++; @@ -948,7 +948,7 @@ Tcl_RegsubObjCmd( resultPtr = objv[1]; Tcl_IncrRefCount(resultPtr); - } else if ((size_t)offset < wlen) { + } else if (offset < wlen) { Tcl_AppendUnicodeToObj(resultPtr, wstring + offset, wlen - offset); } if (objc == 4) { @@ -1323,7 +1323,7 @@ StringFirstCmd( int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { - int start = 0; + size_t start = TCL_INDEX_START; if (objc < 3 || objc > 4) { Tcl_WrongNumArgs(interp, 1, objv, @@ -1338,9 +1338,6 @@ StringFirstCmd( return TCL_ERROR; } } - if (start < -1) { - start = -1; - } Tcl_SetObjResult(interp, TclNewWideIntObjFromSize(TclStringFirst(objv[1], objv[2], start))); return TCL_OK; @@ -1371,7 +1368,7 @@ StringLastCmd( int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { - int last = INT_MAX - 1; + size_t last = TCL_INDEX_END; if (objc < 3 || objc > 4) { Tcl_WrongNumArgs(interp, 1, objv, @@ -1386,9 +1383,6 @@ StringLastCmd( return TCL_ERROR; } } - if (last < -1) { - last = -1; - } Tcl_SetObjResult(interp, TclNewWideIntObjFromSize(TclStringLast(objv[1], objv[2], last))); return TCL_OK; @@ -1419,8 +1413,7 @@ StringIndexCmd( int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { - size_t end; - int index; + size_t index, end; if (objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "string charIndex"); @@ -1436,7 +1429,7 @@ StringIndexCmd( return TCL_ERROR; } - if ((index >= 0) && (index <= (int)end)) { + if ((index != TCL_INDEX_NONE) && (index + 1 <= end + 1)) { int ch = Tcl_GetUniChar(objv[1], index); if (ch == -1) { @@ -1947,7 +1940,7 @@ StringMapCmd( const char *string = TclGetStringFromObj(objv[1], &length2); if ((length2 > 1) && - strncmp(string, "-nocase", (size_t) length2) == 0) { + strncmp(string, "-nocase", length2) == 0) { nocase = 1; } else { Tcl_SetObjResult(interp, Tcl_ObjPrintf( @@ -2257,8 +2250,7 @@ StringRangeCmd( int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { - size_t end; - int first, last; + size_t first, last, end; if (objc != 4) { Tcl_WrongNumArgs(interp, 1, objv, "string first last"); @@ -2277,13 +2269,13 @@ StringRangeCmd( return TCL_ERROR; } - if (first < 0) { - first = 0; + if (first == TCL_INDEX_NONE) { + first = TCL_INDEX_START; } - if (last >= (int)end) { + if (last + 1 >= end + 1) { last = end; } - if (last >= first) { + if (last + 1 >= first + 1) { Tcl_SetObjResult(interp, Tcl_GetRange(objv[1], first, last)); } return TCL_OK; @@ -2370,8 +2362,7 @@ StringRplcCmd( int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { - int first, last; - size_t end; + size_t first, last, end; if (objc < 4 || objc > 5) { Tcl_WrongNumArgs(interp, 1, objv, "string first last ?string?"); @@ -2390,9 +2381,9 @@ StringRplcCmd( * candidates for replacement. When they are detected, no * replacement is done, and the result is the original string, */ - if ((last < 0) || /* Range ends before start of string */ - (first > (int)end) || /* Range begins after end of string */ - (last < first)) { /* Range begins after it starts */ + if ((last == TCL_INDEX_NONE) || /* Range ends before start of string */ + (first + 1 > end + 1) || /* Range begins after end of string */ + (last + 1 < first + 1)) { /* Range begins after it starts */ /* * BUT!!! when (end < 0) -- an empty original string -- we can @@ -2403,10 +2394,10 @@ StringRplcCmd( } else { Tcl_Obj *resultPtr; - if (first < 0) { - first = 0; + if (first == TCL_INDEX_NONE) { + first = TCL_INDEX_START; } - if (last > (int)end) { + if (last + 1 > end + 1) { last = end; } @@ -2481,8 +2472,7 @@ StringStartCmd( { Tcl_UniChar ch = 0; const char *p, *string; - int cur, index; - size_t numChars, length; + size_t numChars, length, cur, index; if (objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "string index"); @@ -2494,14 +2484,14 @@ StringStartCmd( if (TclGetIntForIndexM(interp, objv[2], numChars, &index) != TCL_OK) { return TCL_ERROR; } - string = TclGetStringFromObj(objv[1], &length); - if (index > (int)numChars) { + string = TclGetString(objv[1]); + if (index + 1 > numChars + 1) { index = numChars; } cur = 0; - if (index > 0) { + if (index + 1 > 1) { p = Tcl_UtfAtIndex(string, index); - for (cur = index; cur >= 0; cur--) { + for (cur = index; cur != TCL_INDEX_NONE; cur--) { TclUtfToUniChar(p, &ch); if (!Tcl_UniCharIsWordChar(ch)) { break; @@ -2512,7 +2502,7 @@ StringStartCmd( cur += 1; } } - Tcl_SetObjResult(interp, Tcl_NewWideIntObj(cur)); + Tcl_SetObjResult(interp, TclNewWideIntObjFromSize(cur)); return TCL_OK; } @@ -2543,8 +2533,7 @@ StringEndCmd( { Tcl_UniChar ch = 0; const char *p, *end, *string; - int cur, index; - size_t length, numChars; + size_t length, numChars, cur, index; if (objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "string index"); @@ -2557,10 +2546,10 @@ StringEndCmd( return TCL_ERROR; } string = TclGetStringFromObj(objv[1], &length); - if (index < 0) { - index = 0; + if (index == TCL_INDEX_NONE) { + index = TCL_INDEX_START; } - if (index <= (int) numChars) { + if (index + 1 <= numChars + 1) { p = Tcl_UtfAtIndex(string, index); end = string+length; for (cur = index; p < end; cur++) { @@ -2575,7 +2564,7 @@ StringEndCmd( } else { cur = numChars + 1; } - Tcl_SetObjResult(interp, Tcl_NewWideIntObj(cur)); + Tcl_SetObjResult(interp, TclNewWideIntObjFromSize(cur)); return TCL_OK; } @@ -2904,7 +2893,7 @@ StringLowerCmd( Tcl_SetObjLength(resultPtr, length1); Tcl_SetObjResult(interp, resultPtr); } else { - int first, last; + size_t first, last; const char *start, *end; Tcl_Obj *resultPtr; @@ -2912,7 +2901,7 @@ StringLowerCmd( if (TclGetIntForIndexM(interp,objv[2],length1, &first) != TCL_OK) { return TCL_ERROR; } - if (first < 0) { + if (first == TCL_INDEX_NONE) { first = 0; } last = first; @@ -2922,10 +2911,10 @@ StringLowerCmd( return TCL_ERROR; } - if (last >= (int)length1) { + if (last + 1 >= length1 + 1) { last = length1; } - if (last < first) { + if (last + 1 < first + 1) { Tcl_SetObjResult(interp, objv[1]); return TCL_OK; } @@ -2989,7 +2978,7 @@ StringUpperCmd( Tcl_SetObjLength(resultPtr, length1); Tcl_SetObjResult(interp, resultPtr); } else { - int first, last; + size_t first, last; const char *start, *end; Tcl_Obj *resultPtr; @@ -2997,8 +2986,8 @@ StringUpperCmd( if (TclGetIntForIndexM(interp,objv[2],length1, &first) != TCL_OK) { return TCL_ERROR; } - if (first < 0) { - first = 0; + if (first == TCL_INDEX_NONE) { + first = TCL_INDEX_START; } last = first; @@ -3007,10 +2996,10 @@ StringUpperCmd( return TCL_ERROR; } - if (last >= (int)length1) { + if (last + 1 >= length1 + 1) { last = length1; } - if (last < first) { + if (last + 1 < first + 1) { Tcl_SetObjResult(interp, objv[1]); return TCL_OK; } @@ -3074,7 +3063,7 @@ StringTitleCmd( Tcl_SetObjLength(resultPtr, length1); Tcl_SetObjResult(interp, resultPtr); } else { - int first, last; + size_t first, last; const char *start, *end; Tcl_Obj *resultPtr; @@ -3082,8 +3071,8 @@ StringTitleCmd( if (TclGetIntForIndexM(interp,objv[2],length1, &first) != TCL_OK) { return TCL_ERROR; } - if (first < 0) { - first = 0; + if (first == TCL_INDEX_NONE) { + first = TCL_INDEX_START; } last = first; @@ -3092,10 +3081,10 @@ StringTitleCmd( return TCL_ERROR; } - if (last >= (int)length1) { + if (last + 1 >= length1 + 1) { last = length1; } - if (last < first) { + if (last + 1 < first + 1) { Tcl_SetObjResult(interp, objv[1]); return TCL_OK; } diff --git a/generic/tclCompCmdsGR.c b/generic/tclCompCmdsGR.c index c790729..5b8d4ae 100644 --- a/generic/tclCompCmdsGR.c +++ b/generic/tclCompCmdsGR.c @@ -49,8 +49,8 @@ static int IndexTailVarIfKnown(Tcl_Interp *interp, int TclGetIndexFromToken( Tcl_Token *tokenPtr, - int before, - int after, + size_t before, + size_t after, int *indexPtr) { Tcl_Obj *tmpObj = Tcl_NewObj(); @@ -1039,7 +1039,7 @@ TclCompileLassignCmd( */ TclEmitInstInt4( INST_LIST_RANGE_IMM, idx, envPtr); - TclEmitInt4( TCL_INDEX_END, envPtr); + TclEmitInt4( (int)TCL_INDEX_END, envPtr); return TCL_OK; } @@ -1244,7 +1244,7 @@ TclCompileListCmd( if (concat && numWords == 2) { TclEmitInstInt4( INST_LIST_RANGE_IMM, 0, envPtr); - TclEmitInt4( TCL_INDEX_END, envPtr); + TclEmitInt4( (int)TCL_INDEX_END, envPtr); } return TCL_OK; } @@ -1320,7 +1320,7 @@ TclCompileLrangeCmd( tokenPtr = TokenAfter(listTokenPtr); if ((TclGetIndexFromToken(tokenPtr, TCL_INDEX_START, TCL_INDEX_NONE, - &idx1) != TCL_OK) || (idx1 == TCL_INDEX_NONE)) { + &idx1) != TCL_OK) || (idx1 == (int)TCL_INDEX_NONE)) { return TCL_ERROR; } /* @@ -1409,7 +1409,7 @@ TclCompileLinsertCmd( CompileWord(envPtr, listTokenPtr, interp, 1); if (parsePtr->numWords == 3) { TclEmitInstInt4( INST_LIST_RANGE_IMM, 0, envPtr); - TclEmitInt4( TCL_INDEX_END, envPtr); + TclEmitInt4( (int)TCL_INDEX_END, envPtr); return TCL_OK; } @@ -1419,10 +1419,10 @@ TclCompileLinsertCmd( } TclEmitInstInt4( INST_LIST, i - 3, envPtr); - if (idx == TCL_INDEX_START) { + if (idx == (int)TCL_INDEX_START) { TclEmitInstInt4( INST_REVERSE, 2, envPtr); TclEmitOpcode( INST_LIST_CONCAT, envPtr); - } else if (idx == TCL_INDEX_END) { + } else if (idx == (int)TCL_INDEX_END) { TclEmitOpcode( INST_LIST_CONCAT, envPtr); } else { /* @@ -1437,7 +1437,7 @@ TclCompileLinsertCmd( * differ in their interpretation of the "end" index. */ - if (idx < TCL_INDEX_END) { + if (idx < (int)TCL_INDEX_END) { idx++; } TclEmitInstInt4( INST_OVER, 1, envPtr); @@ -1445,7 +1445,7 @@ TclCompileLinsertCmd( TclEmitInt4( idx - 1, envPtr); TclEmitInstInt4( INST_REVERSE, 3, envPtr); TclEmitInstInt4( INST_LIST_RANGE_IMM, idx, envPtr); - TclEmitInt4( TCL_INDEX_END, envPtr); + TclEmitInt4( (int)TCL_INDEX_END, envPtr); TclEmitOpcode( INST_LIST_CONCAT, envPtr); TclEmitOpcode( INST_LIST_CONCAT, envPtr); } @@ -1506,14 +1506,14 @@ TclCompileLreplaceCmd( * we must defer to direct evaluation. */ - if (idx1 == TCL_INDEX_NONE) { - suffixStart = TCL_INDEX_NONE; - } else if (idx2 == TCL_INDEX_NONE) { + if (idx1 == (int)TCL_INDEX_NONE) { + suffixStart = (int)TCL_INDEX_NONE; + } else if (idx2 == (int)TCL_INDEX_NONE) { suffixStart = idx1; - } else if (idx2 == TCL_INDEX_END) { - suffixStart = TCL_INDEX_NONE; - } else if (((idx2 < TCL_INDEX_END) && (idx1 <= TCL_INDEX_END)) - || ((idx2 >= TCL_INDEX_START) && (idx1 >= TCL_INDEX_START))) { + } else if (idx2 == (int)TCL_INDEX_END) { + suffixStart = (int)TCL_INDEX_NONE; + } else if (((idx2 < (int)TCL_INDEX_END) && (idx1 <= (int)TCL_INDEX_END)) + || ((idx2 >= (int)TCL_INDEX_START) && (idx1 >= (int)TCL_INDEX_START))) { suffixStart = (idx1 > idx2 + 1) ? idx1 : idx2 + 1; } else { return TCL_ERROR; @@ -1547,11 +1547,11 @@ TclCompileLreplaceCmd( * and canonicalization side effects. */ TclEmitInstInt4( INST_LIST_RANGE_IMM, 0, envPtr); - TclEmitInt4( TCL_INDEX_END, envPtr); + TclEmitInt4( (int)TCL_INDEX_END, envPtr); return TCL_OK; } - if (idx1 != TCL_INDEX_START) { + if (idx1 != (int)TCL_INDEX_START) { /* Prefix may not be empty; generate bytecode to push it */ if (emptyPrefix) { TclEmitOpcode( INST_DUP, envPtr); @@ -1571,7 +1571,7 @@ TclCompileLreplaceCmd( TclEmitInstInt4( INST_REVERSE, 2, envPtr); } - if (suffixStart == TCL_INDEX_NONE) { + if (suffixStart == (int)TCL_INDEX_NONE) { TclEmitOpcode( INST_POP, envPtr); if (emptyPrefix) { PushStringLiteral(envPtr, ""); @@ -1579,7 +1579,7 @@ TclCompileLreplaceCmd( } else { /* Suffix may not be empty; generate bytecode to push it */ TclEmitInstInt4( INST_LIST_RANGE_IMM, suffixStart, envPtr); - TclEmitInt4( TCL_INDEX_END, envPtr); + TclEmitInt4( (int)TCL_INDEX_END, envPtr); if (!emptyPrefix) { TclEmitOpcode( INST_LIST_CONCAT, envPtr); } diff --git a/generic/tclCompCmdsSZ.c b/generic/tclCompCmdsSZ.c index 5325099..81a44ee 100644 --- a/generic/tclCompCmdsSZ.c +++ b/generic/tclCompCmdsSZ.c @@ -765,7 +765,7 @@ TclCompileStringMatchCmd( } str = tokenPtr[1].start; length = tokenPtr[1].size; - if ((length <= 1) || strncmp(str, "-nocase", (size_t) length)) { + if ((length <= 1) || strncmp(str, "-nocase", length)) { /* * Fail at run time, not in compilation. */ @@ -957,7 +957,7 @@ TclCompileStringRangeCmd( * the string the same as the start of the string. */ - if (idx1 == TCL_INDEX_NONE) { + if (idx1 == (int)TCL_INDEX_NONE) { /* [string range $s end+1 $last] must be empty string */ OP( POP); PUSH( ""); @@ -972,7 +972,7 @@ TclCompileStringRangeCmd( * Token parsed as an index expression. We treat all indices after * the string the same as the end of the string. */ - if (idx2 == TCL_INDEX_NONE) { + if (idx2 == (int)TCL_INDEX_NONE) { /* [string range $s $first -1] must be empty string */ OP( POP); PUSH( ""); @@ -1050,8 +1050,8 @@ TclCompileStringReplaceCmd( * compile direct to bytecode implementing the no-op. */ - if ((last == TCL_INDEX_NONE) /* Know (last < 0) */ - || (first == TCL_INDEX_NONE) /* Know (first > end) */ + if ((last == (int)TCL_INDEX_NONE) /* Know (last < 0) */ + || (first == (int)TCL_INDEX_NONE) /* Know (first > end) */ /* * Tricky to determine when runtime (last < first) can be @@ -1062,7 +1062,7 @@ TclCompileStringReplaceCmd( * (last <= TCL_INDEX END) && (last < first) => ACCEPT * else => cannot tell REJECT */ - || ((first <= TCL_INDEX_END) && (last <= TCL_INDEX_END) + || ((first <= (int)TCL_INDEX_END) && (last <= (int)TCL_INDEX_END) && (last < first)) /* Know (last < first) */ /* * (first == TCL_INDEX_NONE) && @@ -1073,7 +1073,7 @@ TclCompileStringReplaceCmd( * (last <= TCL_INDEX_END) => cannot tell REJECT * else [[last >= TCL_INDEX START]] && (last < first) => ACCEPT */ - || ((first >= TCL_INDEX_START) && (last >= TCL_INDEX_START) + || ((first >= (int)TCL_INDEX_START) && (last >= (int)TCL_INDEX_START) && (last < first))) { /* Know (last < first) */ if (parsePtr->numWords == 5) { tokenPtr = TokenAfter(tokenPtr); @@ -1124,7 +1124,7 @@ TclCompileStringReplaceCmd( * getting a guarantee that first <= last. */ - if ((first == TCL_INDEX_START) && (last >= TCL_INDEX_START)) { + if ((first == (int)TCL_INDEX_START) && (last >= (int)TCL_INDEX_START)) { /* empty prefix */ tokenPtr = TokenAfter(tokenPtr); CompileWord(envPtr, tokenPtr, interp, 4); @@ -1132,13 +1132,13 @@ TclCompileStringReplaceCmd( if (last == INT_MAX) { OP( POP); /* Pop original */ } else { - OP44( STR_RANGE_IMM, last + 1, TCL_INDEX_END); + OP44( STR_RANGE_IMM, last + 1, (int)TCL_INDEX_END); OP1( STR_CONCAT1, 2); } return TCL_OK; } - if ((last == TCL_INDEX_NONE) && (first <= TCL_INDEX_END)) { + if ((last == (int)TCL_INDEX_NONE) && (first <= (int)TCL_INDEX_END)) { OP44( STR_RANGE_IMM, 0, first-1); tokenPtr = TokenAfter(tokenPtr); CompileWord(envPtr, tokenPtr, interp, 4); @@ -1155,19 +1155,19 @@ TclCompileStringReplaceCmd( * are harmless when they are replaced by another empty string. */ - if (first == TCL_INDEX_START) { + if (first == (int)TCL_INDEX_START) { /* empty prefix - build suffix only */ - if (last == TCL_INDEX_END) { + if (last == (int)TCL_INDEX_END) { /* empty suffix too => empty result */ OP( POP); /* Pop original */ PUSH ( ""); return TCL_OK; } - OP44( STR_RANGE_IMM, last + 1, TCL_INDEX_END); + OP44( STR_RANGE_IMM, last + 1, (int)TCL_INDEX_END); return TCL_OK; } else { - if (last == TCL_INDEX_END) { + if (last == (int)TCL_INDEX_END) { /* empty suffix - build prefix only */ OP44( STR_RANGE_IMM, 0, first-1); return TCL_OK; @@ -1175,7 +1175,7 @@ TclCompileStringReplaceCmd( OP( DUP); OP44( STR_RANGE_IMM, 0, first-1); OP4( REVERSE, 2); - OP44( STR_RANGE_IMM, last + 1, TCL_INDEX_END); + OP44( STR_RANGE_IMM, last + 1, (int)TCL_INDEX_END); OP1( STR_CONCAT1, 2); return TCL_OK; } diff --git a/generic/tclCompExpr.c b/generic/tclCompExpr.c index 06634e2..3e4441b 100644 --- a/generic/tclCompExpr.c +++ b/generic/tclCompExpr.c @@ -1560,7 +1560,7 @@ ConvertTreeToTokens( TclGrowParseTokenArray(parsePtr, toCopy); subExprTokenPtr = parsePtr->tokenPtr + parsePtr->numTokens; memcpy(subExprTokenPtr, tokenPtr, - (size_t) toCopy * sizeof(Tcl_Token)); + toCopy * sizeof(Tcl_Token)); subExprTokenPtr->type = TCL_TOKEN_SUB_EXPR; parsePtr->numTokens += toCopy; } else { @@ -1577,7 +1577,7 @@ ConvertTreeToTokens( subExprTokenPtr->numComponents++; subExprTokenPtr++; memcpy(subExprTokenPtr, tokenPtr, - (size_t) toCopy * sizeof(Tcl_Token)); + toCopy * sizeof(Tcl_Token)); parsePtr->numTokens += toCopy + 1; } diff --git a/generic/tclCompile.c b/generic/tclCompile.c index cbdf373..aeb8be8 100644 --- a/generic/tclCompile.c +++ b/generic/tclCompile.c @@ -2819,7 +2819,7 @@ TclInitByteCode( p += sizeof(ByteCode); codePtr->codeStart = p; - memcpy(p, envPtr->codeStart, (size_t) codeBytes); + memcpy(p, envPtr->codeStart, codeBytes); p += TCL_ALIGN(codeBytes); /* align object array */ codePtr->objArrayPtr = (Tcl_Obj **) p; @@ -2830,7 +2830,7 @@ TclInitByteCode( p += TCL_ALIGN(objArrayBytes); /* align exception range array */ if (exceptArrayBytes > 0) { codePtr->exceptArrayPtr = (ExceptionRange *) p; - memcpy(p, envPtr->exceptArrayPtr, (size_t) exceptArrayBytes); + memcpy(p, envPtr->exceptArrayPtr, exceptArrayBytes); } else { codePtr->exceptArrayPtr = NULL; } @@ -2838,7 +2838,7 @@ TclInitByteCode( p += TCL_ALIGN(exceptArrayBytes); /* align AuxData array */ if (auxDataArrayBytes > 0) { codePtr->auxDataArrayPtr = (AuxData *) p; - memcpy(p, envPtr->auxDataArrayPtr, (size_t) auxDataArrayBytes); + memcpy(p, envPtr->auxDataArrayPtr, auxDataArrayBytes); } else { codePtr->auxDataArrayPtr = NULL; } @@ -2989,7 +2989,7 @@ TclFindCompiledLocal( if (!TclIsVarTemporary(localPtr)) { char *localName = localPtr->name; - if ((nameBytes == (size_t)localPtr->nameLength) && + if ((nameBytes == localPtr->nameLength) && (strncmp(name,localName,nameBytes) == 0)) { return i; } @@ -3022,7 +3022,7 @@ TclFindCompiledLocal( localPtr->resolveInfo = NULL; if (name != NULL) { - memcpy(localPtr->name, name, (size_t) nameBytes); + memcpy(localPtr->name, name, nameBytes); } localPtr->name[nameBytes] = '\0'; procPtr->numCompiledLocals++; diff --git a/generic/tclCompile.h b/generic/tclCompile.h index 5d77009..44bde7a 100644 --- a/generic/tclCompile.h +++ b/generic/tclCompile.h @@ -1118,7 +1118,7 @@ MODULE_SCOPE int TclFixupForwardJump(CompileEnv *envPtr, MODULE_SCOPE void TclFreeCompileEnv(CompileEnv *envPtr); MODULE_SCOPE void TclFreeJumpFixupArray(JumpFixupArray *fixupArrayPtr); MODULE_SCOPE int TclGetIndexFromToken(Tcl_Token *tokenPtr, - int before, int after, int *indexPtr); + size_t before, size_t after, int *indexPtr); MODULE_SCOPE ByteCode * TclInitByteCode(CompileEnv *envPtr); MODULE_SCOPE ByteCode * TclInitByteCodeObj(Tcl_Obj *objPtr, const Tcl_ObjType *typePtr, CompileEnv *envPtr); diff --git a/generic/tclEnv.c b/generic/tclEnv.c index b4a62b9..445b345 100644 --- a/generic/tclEnv.c +++ b/generic/tclEnv.c @@ -441,12 +441,12 @@ TclUnsetEnv( #if defined(_WIN32) string = Tcl_Alloc(length + 2); - memcpy(string, name, (size_t) length); + memcpy(string, name, length); string[length] = '='; string[length+1] = '\0'; #else string = Tcl_Alloc(length + 1); - memcpy(string, name, (size_t) length); + memcpy(string, name, length); string[length] = '\0'; #endif /* _WIN32 */ @@ -691,7 +691,7 @@ ReplaceString( (env.cacheSize + growth) * sizeof(char *)); env.cache[env.cacheSize] = newStr; (void) memset(env.cache+env.cacheSize+1, 0, - (size_t) (growth-1) * sizeof(char *)); + (growth-1) * sizeof(char *)); env.cacheSize += growth; } } diff --git a/generic/tclExecute.c b/generic/tclExecute.c index c1b85ad..9ae26c5 100644 --- a/generic/tclExecute.c +++ b/generic/tclExecute.c @@ -443,13 +443,13 @@ VarHashCreateVar( #define GetNumberFromObj(interp, objPtr, ptrPtr, tPtr) \ (((objPtr)->typePtr == &tclIntType) \ ? (*(tPtr) = TCL_NUMBER_INT, \ - *(ptrPtr) = (ClientData) \ + *(ptrPtr) = (void *) \ (&((objPtr)->internalRep.wideValue)), TCL_OK) : \ ((objPtr)->typePtr == &tclDoubleType) \ ? (((TclIsNaN((objPtr)->internalRep.doubleValue)) \ ? (*(tPtr) = TCL_NUMBER_NAN) \ : (*(tPtr) = TCL_NUMBER_DOUBLE)), \ - *(ptrPtr) = (ClientData) \ + *(ptrPtr) = (void *) \ (&((objPtr)->internalRep.doubleValue)), TCL_OK) : \ (((objPtr)->bytes != NULL) && ((objPtr)->length == 0)) \ ? TCL_ERROR : \ @@ -635,8 +635,8 @@ static void InitByteCodeExecution(Tcl_Interp *interp); static inline int wordSkip(void *ptr); static void ReleaseDictIterator(Tcl_Obj *objPtr); /* Useful elsewhere, make available in tclInt.h or stubs? */ -static Tcl_Obj ** StackAllocWords(Tcl_Interp *interp, int numWords); -static Tcl_Obj ** StackReallocWords(Tcl_Interp *interp, int numWords); +static Tcl_Obj ** StackAllocWords(Tcl_Interp *interp, size_t numWords); +static Tcl_Obj ** StackReallocWords(Tcl_Interp *interp, size_t numWords); static Tcl_NRPostProc CopyCallback; static Tcl_NRPostProc ExprObjCallback; static Tcl_NRPostProc FinalizeOONext; @@ -777,7 +777,7 @@ TclCreateExecEnv( { ExecEnv *eePtr = Tcl_Alloc(sizeof(ExecEnv)); ExecStack *esPtr = Tcl_Alloc(sizeof(ExecStack) - + (size_t) (size-1) * sizeof(Tcl_Obj *)); + + (size-1) * sizeof(Tcl_Obj *)); eePtr->execStackPtr = esPtr; TclNewIntObj(eePtr->constants[0], 0); @@ -959,8 +959,8 @@ GrowEvaluationStack( int move) /* 1 if move words since last marker. */ { ExecStack *esPtr = eePtr->execStackPtr, *oldPtr = NULL; - int newBytes, newElems, currElems; - int needed = growth - (esPtr->endPtr - esPtr->tosPtr); + size_t newBytes; + int newElems, currElems, needed = growth - (esPtr->endPtr - esPtr->tosPtr); Tcl_Obj **markerPtr = esPtr->markerPtr, **memStart; int moveWords = 0; @@ -1105,7 +1105,7 @@ GrowEvaluationStack( static Tcl_Obj ** StackAllocWords( Tcl_Interp *interp, - int numWords) + size_t numWords) { /* * Note that GrowEvaluationStack sets a marker in the stack. This marker @@ -1123,7 +1123,7 @@ StackAllocWords( static Tcl_Obj ** StackReallocWords( Tcl_Interp *interp, - int numWords) + size_t numWords) { Interp *iPtr = (Interp *) interp; ExecEnv *eePtr = iPtr->execEnvPtr; @@ -1205,13 +1205,13 @@ TclStackAlloc( size_t numBytes) { Interp *iPtr = (Interp *) interp; - int numWords; + size_t numWords; if (iPtr == NULL || iPtr->execEnvPtr == NULL) { return (void *) Tcl_Alloc(numBytes); } numWords = (numBytes + (sizeof(Tcl_Obj *) - 1))/sizeof(Tcl_Obj *); - return (void *) StackAllocWords(interp, numWords); + return StackAllocWords(interp, numWords); } void * @@ -1224,10 +1224,10 @@ TclStackRealloc( ExecEnv *eePtr; ExecStack *esPtr; Tcl_Obj **markerPtr; - int numWords; + size_t numWords; if (iPtr == NULL || iPtr->execEnvPtr == NULL) { - return (void *) Tcl_Realloc((char *) ptr, numBytes); + return Tcl_Realloc(ptr, numBytes); } eePtr = iPtr->execEnvPtr; @@ -4523,9 +4523,8 @@ TEBCresume( */ { - int index, numIndices, fromIdx, toIdx; - int nocase, match, cflags, s1len, s2len; - size_t slength, length2; + int numIndices, nocase, match, cflags; + size_t slength, length2, fromIdx, toIdx, index, s1len, s2len; const char *s1, *s2; case INST_LIST: @@ -4608,7 +4607,7 @@ TEBCresume( pcAdjustment = 5; lindexFastPath: - if (index >= 0 && index < objc) { + if (index < (size_t)objc) { objResultPtr = objv[index]; } else { TclNewObj(objResultPtr); @@ -4771,13 +4770,13 @@ TEBCresume( NEXT_INST_F(9, 1, 1); } toIdx = TclIndexDecode(toIdx, objc - 1); - if (toIdx < 0) { + if (toIdx == TCL_INDEX_NONE) { goto emptyList; - } else if (toIdx >= objc) { + } else if (toIdx + 1 >= (size_t)objc + 1) { toIdx = objc - 1; } - assert ( toIdx >= 0 && toIdx < objc); + assert (toIdx < (size_t)objc); /* assert ( fromIdx != TCL_INDEX_NONE ); * @@ -4999,7 +4998,7 @@ TEBCresume( goto gotError; } - if ((index < 0) || (index >= (int)slength)) { + if (index >= slength) { TclNewObj(objResultPtr); } else if (TclIsPureByteArray(valuePtr)) { objResultPtr = Tcl_NewByteArrayObj( @@ -5042,13 +5041,13 @@ TEBCresume( goto gotError; } - if (fromIdx < 0) { - fromIdx = 0; + if (fromIdx == TCL_INDEX_NONE) { + fromIdx = TCL_INDEX_START; } - if (toIdx >= (int)slength) { + if (toIdx + 1 >= slength + 1) { toIdx = slength; } - if (toIdx >= fromIdx) { + if (toIdx + 1 >= fromIdx + 1) { objResultPtr = Tcl_GetRange(OBJ_AT_DEPTH(2), fromIdx, toIdx); } else { TclNewObj(objResultPtr); @@ -5061,7 +5060,7 @@ TEBCresume( fromIdx = TclGetInt4AtPtr(pc+1); toIdx = TclGetInt4AtPtr(pc+5); slength = Tcl_GetCharLength(valuePtr); - TRACE(("\"%.20s\" %d %d => ", O2S(valuePtr), fromIdx, toIdx)); + TRACE(("\"%.20s\" %" TCL_LL_MODIFIER "d %" TCL_LL_MODIFIER "d => ", O2S(valuePtr), TclWideIntFromSize(fromIdx), TclWideIntFromSize(toIdx))); /* Every range of an empty value is an empty value */ if (slength == 0) { @@ -5081,13 +5080,13 @@ TEBCresume( } toIdx = TclIndexDecode(toIdx, slength - 1); - if (toIdx < 0) { + if (toIdx == TCL_INDEX_NONE) { goto emptyRange; - } else if (toIdx >= (int)slength) { + } else if (toIdx >= slength) { toIdx = slength - 1; } - assert ( toIdx >= 0 && (size_t)toIdx < slength ); + assert ( toIdx != TCL_INDEX_NONE && toIdx < slength ); /* assert ( fromIdx != TCL_INDEX_NONE ); @@ -5099,11 +5098,11 @@ TEBCresume( } fromIdx = TclIndexDecode(fromIdx, slength - 1); - if (fromIdx < 0) { - fromIdx = 0; + if (fromIdx == TCL_INDEX_NONE) { + fromIdx = TCL_INDEX_START; } - if (fromIdx <= toIdx) { + if (fromIdx + 1 <= toIdx + 1) { objResultPtr = Tcl_GetRange(valuePtr, fromIdx, toIdx); } else { emptyRange: @@ -5136,23 +5135,23 @@ TEBCresume( TclDecrRefCount(OBJ_AT_TOS); (void) POP_OBJECT(); - if ((toIdx < 0) || - (fromIdx > (int)slength) || - (toIdx < fromIdx)) { + if ((toIdx == TCL_INDEX_NONE) || + (fromIdx + 1 > slength + 1) || + (toIdx + 1 < fromIdx + 1)) { TRACE_APPEND(("\"%.30s\"\n", O2S(valuePtr))); TclDecrRefCount(value3Ptr); NEXT_INST_F(1, 0, 0); } - if (fromIdx < 0) { - fromIdx = 0; + if (fromIdx == TCL_INDEX_NONE) { + fromIdx = TCL_INDEX_START; } - if (toIdx > (int)slength) { + if (toIdx + 1 > slength + 1) { toIdx = slength; } - if (fromIdx == 0 && toIdx == (int)slength) { + if ((fromIdx == TCL_INDEX_START) && (toIdx == slength)) { TclDecrRefCount(OBJ_AT_TOS); OBJ_AT_TOS = value3Ptr; TRACE_APPEND(("\"%.30s\"\n", O2S(value3Ptr))); @@ -5236,16 +5235,16 @@ TEBCresume( case INST_STR_FIND: slength = TclStringFirst(OBJ_UNDER_TOS, OBJ_AT_TOS, 0); - TRACE(("%.20s %.20s => %" TCL_Z_MODIFIER "d\n", - O2S(OBJ_UNDER_TOS), O2S(OBJ_AT_TOS), slength)); + TRACE(("%.20s %.20s => %" TCL_LL_MODIFIER "d\n", + O2S(OBJ_UNDER_TOS), O2S(OBJ_AT_TOS), TclWideIntFromSize(slength))); objResultPtr = TclNewWideIntObjFromSize(slength); NEXT_INST_F(1, 2, 1); case INST_STR_FIND_LAST: - slength = TclStringLast(OBJ_UNDER_TOS, OBJ_AT_TOS, (size_t)-2); + slength = TclStringLast(OBJ_UNDER_TOS, OBJ_AT_TOS, TCL_INDEX_END); - TRACE(("%.20s %.20s => %" TCL_Z_MODIFIER "d\n", - O2S(OBJ_UNDER_TOS), O2S(OBJ_AT_TOS), slength)); + TRACE(("%.20s %.20s => %" TCL_LL_MODIFIER "d\n", + O2S(OBJ_UNDER_TOS), O2S(OBJ_AT_TOS), TclWideIntFromSize(slength))); objResultPtr = TclNewWideIntObjFromSize(slength); NEXT_INST_F(1, 2, 1); @@ -8480,7 +8479,7 @@ PrintByteCodeInfo( Interp *iPtr = (Interp *) *codePtr->interpHandle; fprintf(stdout, "\nExecuting ByteCode 0x%p, refCt %" TCL_Z_MODIFIER "u, epoch %" TCL_Z_MODIFIER "u, interp 0x%p (epoch %" TCL_Z_MODIFIER "u)\n", - codePtr, (size_t)codePtr->refCount, codePtr->compileEpoch, iPtr, + codePtr, codePtr->refCount, codePtr->compileEpoch, iPtr, iPtr->compileEpoch); fprintf(stdout, " Source: "); TclPrintSource(stdout, codePtr->source, 60); @@ -9463,7 +9462,7 @@ EvalStatsCmd( #ifdef TCL_MEM_DEBUG Tcl_AppendPrintfToObj(objPtr, "\nHeap Statistics:\n"); - TclDumpMemoryInfo((ClientData) objPtr, 1); + TclDumpMemoryInfo(objPtr, 1); #endif Tcl_AppendPrintfToObj(objPtr, "\n----------------------------------------------------------------\n"); diff --git a/generic/tclFileName.c b/generic/tclFileName.c index 5d0cff6..48544f3 100644 --- a/generic/tclFileName.c +++ b/generic/tclFileName.c @@ -598,7 +598,7 @@ Tcl_SplitPath( for (i = 0; i < *argcPtr; i++) { Tcl_ListObjIndex(NULL, resultPtr, i, &eltPtr); str = TclGetStringFromObj(eltPtr, &len); - memcpy(p, str, (size_t) len+1); + memcpy(p, str, len+1); p += len+1; } diff --git a/generic/tclIO.c b/generic/tclIO.c index b80739f..f6119df 100644 --- a/generic/tclIO.c +++ b/generic/tclIO.c @@ -1563,7 +1563,7 @@ TclGetChannelFromObj( * Re-use the ResolvedCmdName struct. */ - Tcl_Release((ClientData) resPtr->statePtr); + Tcl_Release(resPtr->statePtr); } else { resPtr = (ResolvedChanName *) Tcl_Alloc(sizeof(ResolvedChanName)); resPtr->refCount = 0; @@ -1571,7 +1571,7 @@ TclGetChannelFromObj( } statePtr = ((Channel *)chan)->state; resPtr->statePtr = statePtr; - Tcl_Preserve((ClientData) statePtr); + Tcl_Preserve(statePtr); resPtr->interp = interp; resPtr->epoch = statePtr->epoch; @@ -4321,7 +4321,7 @@ Write( * that we need to stick at the beginning of this buffer. */ - memcpy(InsertPoint(bufPtr), safe, (size_t) saved); + memcpy(InsertPoint(bufPtr), safe, saved); bufPtr->nextAdded += saved; saved = 0; } @@ -4409,7 +4409,7 @@ Write( */ saved = -SpaceLeft(bufPtr); - memcpy(safe, dst + dstLen, (size_t) saved); + memcpy(safe, dst + dstLen, saved); bufPtr->nextAdded = bufPtr->bufLength; } @@ -4719,7 +4719,7 @@ Tcl_GetsObj( gs.rawRead -= rawRead; gs.bytesWrote--; gs.charsWrote--; - memmove(dst, dst + 1, (size_t) (dstEnd - dst)); + memmove(dst, dst + 1, dstEnd - dst); dstEnd--; } } @@ -5089,7 +5089,7 @@ TclGetsObjBinary( rawLen = dstEnd - dst; byteArray = Tcl_SetByteArrayLength(objPtr, byteLen + rawLen); - memcpy(byteArray + byteLen, dst, (size_t) rawLen); + memcpy(byteArray + byteLen, dst, rawLen); byteLen += rawLen; } @@ -5106,7 +5106,7 @@ TclGetsObjBinary( rawLen = eol - dst; byteArray = Tcl_SetByteArrayLength(objPtr, byteLen + rawLen); - memcpy(byteArray + byteLen, dst, (size_t) rawLen); + memcpy(byteArray + byteLen, dst, rawLen); byteLen += rawLen; bufPtr->nextRemoved += rawLen + skip; @@ -5402,7 +5402,7 @@ FilterInputBytes( } extra = rawLen - gsPtr->rawRead; memcpy(nextPtr->buf + (BUFFER_PADDING - extra), - raw + gsPtr->rawRead, (size_t) extra); + raw + gsPtr->rawRead, extra); nextPtr->nextRemoved -= extra; bufPtr->nextAdded -= extra; } @@ -5657,7 +5657,7 @@ Tcl_ReadRaw( * Copy the current chunk into the read buffer. */ - memcpy(readBuf, RemovePoint(bufPtr), (size_t) toCopy); + memcpy(readBuf, RemovePoint(bufPtr), toCopy); bufPtr->nextRemoved += toCopy; copied += toCopy; readBuf += toCopy; @@ -6406,7 +6406,7 @@ ReadChars( } nextPtr->nextRemoved -= srcLen; - memcpy(RemovePoint(nextPtr), src, (size_t) srcLen); + memcpy(RemovePoint(nextPtr), src, srcLen); RecycleBuffer(statePtr, bufPtr, 0); statePtr->inQueueHead = nextPtr; Tcl_SetObjLength(objPtr, numBytes); @@ -6512,7 +6512,7 @@ TranslateInputEOL( case TCL_TRANSLATE_LF: case TCL_TRANSLATE_CR: if (dstStart != srcStart) { - memcpy(dstStart, srcStart, (size_t) srcLen); + memcpy(dstStart, srcStart, srcLen); } if (statePtr->inputTranslation == TCL_TRANSLATE_CR) { char *dst = dstStart; @@ -10406,7 +10406,7 @@ Tcl_IsChannelExisting( } if ((*chanName == *name) && - (memcmp(name, chanName, (size_t) chanNameLen + 1) == 0)) { + (memcmp(name, chanName, chanNameLen + 1) == 0)) { return 1; } } diff --git a/generic/tclIORTrans.c b/generic/tclIORTrans.c index 3769533..31ed8d4 100644 --- a/generic/tclIORTrans.c +++ b/generic/tclIORTrans.c @@ -2607,7 +2607,7 @@ ForwardProc( if (bytec > 0) { paramPtr->transform.buf = Tcl_Alloc(bytec); - memcpy(paramPtr->transform.buf, bytev, (size_t)bytec); + memcpy(paramPtr->transform.buf, bytev, bytec); } else { paramPtr->transform.buf = NULL; } @@ -2641,7 +2641,7 @@ ForwardProc( if (bytec > 0) { paramPtr->transform.buf = Tcl_Alloc(bytec); - memcpy(paramPtr->transform.buf, bytev, (size_t)bytec); + memcpy(paramPtr->transform.buf, bytev, bytec); } else { paramPtr->transform.buf = NULL; } @@ -2670,7 +2670,7 @@ ForwardProc( if (bytec > 0) { paramPtr->transform.buf = Tcl_Alloc(bytec); - memcpy(paramPtr->transform.buf, bytev, (size_t)bytec); + memcpy(paramPtr->transform.buf, bytev, bytec); } else { paramPtr->transform.buf = NULL; } @@ -2697,7 +2697,7 @@ ForwardProc( if (bytec > 0) { paramPtr->transform.buf = Tcl_Alloc(bytec); - memcpy(paramPtr->transform.buf, bytev, (size_t)bytec); + memcpy(paramPtr->transform.buf, bytev, bytec); } else { paramPtr->transform.buf = NULL; } diff --git a/generic/tclInt.decls b/generic/tclInt.decls index 03f56c3..c0d7696 100644 --- a/generic/tclInt.decls +++ b/generic/tclInt.decls @@ -154,7 +154,7 @@ declare 32 { #} declare 34 { int TclGetIntForIndex(Tcl_Interp *interp, Tcl_Obj *objPtr, - size_t endValue, int *indexPtr) + size_t endValue, size_t *indexPtr) } # Removed in 8.4b2: #declare 35 { diff --git a/generic/tclInt.h b/generic/tclInt.h index 08f0606..d8075f7 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -921,7 +921,7 @@ typedef struct CompiledLocal { /* Next compiler-recognized local variable for * this procedure, or NULL if this is the last * local. */ - int nameLength; /* The number of bytes in local variable's name. + size_t nameLength; /* The number of bytes in local variable's name. * Among others used to speed up var lookups. */ int frameIndex; /* Index in the array of compiler-assigned * variables in the procedure call frame. */ @@ -2448,7 +2448,7 @@ typedef struct List { (((objPtr)->typePtr == &tclIntType \ && (objPtr)->internalRep.wideValue <= (Tcl_WideInt)(INT_MAX)) \ ? ((*(idxPtr) = ((objPtr)->internalRep.wideValue >= 0) \ - ? (int)(objPtr)->internalRep.wideValue : -1), TCL_OK) \ + ? (size_t)(objPtr)->internalRep.wideValue : TCL_INDEX_NONE), TCL_OK) \ : TclGetIntForIndex((interp), (objPtr), (endValue), (idxPtr))) /* @@ -3179,7 +3179,7 @@ MODULE_SCOPE void TclRegisterCommandTypeName( const char *nameStr); MODULE_SCOPE int TclUtfCmp(const char *cs, const char *ct); MODULE_SCOPE int TclUtfCasecmp(const char *cs, const char *ct); -MODULE_SCOPE int TclUtfCount(int ch); +MODULE_SCOPE size_t TclUtfCount(int ch); MODULE_SCOPE Tcl_Obj * TclpNativeToNormalized(void *clientData); MODULE_SCOPE Tcl_Obj * TclpFilesystemPathType(Tcl_Obj *pathPtr); MODULE_SCOPE int TclpDlopen(Tcl_Interp *interp, Tcl_Obj *pathPtr, @@ -4098,9 +4098,9 @@ MODULE_SCOPE int TclIndexEncode(Tcl_Interp *interp, Tcl_Obj *objPtr, MODULE_SCOPE size_t TclIndexDecode(int encoded, size_t endValue); /* Constants used in index value encoding routines. */ -#define TCL_INDEX_END (-2) -#define TCL_INDEX_NONE (-1) /* Index out of range or END+1 */ -#define TCL_INDEX_START (0) +#define TCL_INDEX_END ((size_t)-2) +#define TCL_INDEX_NONE ((size_t)-1) /* Index out of range or END+1 */ +#define TCL_INDEX_START ((size_t)0) /* *---------------------------------------------------------------- @@ -4384,6 +4384,7 @@ MODULE_SCOPE void TclDbInitNewObj(Tcl_Obj *objPtr, const char *file, } #else +#include "tclStringRep.h" #define TclGetStringFromObj(objPtr, lenPtr) \ (((objPtr)->bytes \ ? 0 : Tcl_GetString((objPtr)), \ @@ -4391,11 +4392,11 @@ MODULE_SCOPE void TclDbInitNewObj(Tcl_Obj *objPtr, const char *file, #define TclGetUnicodeFromObj(objPtr, lenPtr) \ (Tcl_GetUnicodeFromObj(objPtr, NULL), \ *(lenPtr) = *((size_t *) (objPtr)->internalRep.twoPtrValue.ptr1), \ - Tcl_GetUnicodeFromObj(objPtr, NULL)) + ((String *)(objPtr)->internalRep.twoPtrValue.ptr1)->unicode) #define TclGetByteArrayFromObj(objPtr, lenPtr) \ (Tcl_GetByteArrayFromObj(objPtr, NULL), \ *(lenPtr) = *((size_t *) (objPtr)->internalRep.twoPtrValue.ptr1), \ - (unsigned char *)(((size_t *) (objPtr)->internalRep.twoPtrValue.ptr1) + 2)) + (unsigned char *)(((size_t *) (objPtr)->internalRep.twoPtrValue.ptr1) + 2)) #endif /* diff --git a/generic/tclIntDecls.h b/generic/tclIntDecls.h index 1bf36ab..61249c0 100644 --- a/generic/tclIntDecls.h +++ b/generic/tclIntDecls.h @@ -111,7 +111,7 @@ EXTERN int TclGetFrame(Tcl_Interp *interp, const char *str, /* 34 */ EXTERN int TclGetIntForIndex(Tcl_Interp *interp, Tcl_Obj *objPtr, size_t endValue, - int *indexPtr); + size_t *indexPtr); /* Slot 35 is reserved */ /* Slot 36 is reserved */ /* 37 */ @@ -622,7 +622,7 @@ typedef struct TclIntStubs { const char * (*tclGetExtension) (const char *name); /* 31 */ int (*tclGetFrame) (Tcl_Interp *interp, const char *str, CallFrame **framePtrPtr); /* 32 */ void (*reserved33)(void); - int (*tclGetIntForIndex) (Tcl_Interp *interp, Tcl_Obj *objPtr, size_t endValue, int *indexPtr); /* 34 */ + int (*tclGetIntForIndex) (Tcl_Interp *interp, Tcl_Obj *objPtr, size_t endValue, size_t *indexPtr); /* 34 */ void (*reserved35)(void); void (*reserved36)(void); int (*tclGetLoadedPackages) (Tcl_Interp *interp, const char *targetName); /* 37 */ diff --git a/generic/tclInterp.c b/generic/tclInterp.c index 6b28ff2..ffbd935 100644 --- a/generic/tclInterp.c +++ b/generic/tclInterp.c @@ -1831,8 +1831,8 @@ AliasNRCmd( cmdv = &listRep->elements; prefv = &aliasPtr->objPtr; - memcpy(cmdv, prefv, (size_t) (prefc * sizeof(Tcl_Obj *))); - memcpy(cmdv+prefc, objv+1, (size_t) ((objc-1) * sizeof(Tcl_Obj *))); + memcpy(cmdv, prefv, (prefc * sizeof(Tcl_Obj *))); + memcpy(cmdv+prefc, objv+1, ((objc-1) * sizeof(Tcl_Obj *))); for (i=0; i<cmdc; i++) { Tcl_IncrRefCount(cmdv[i]); @@ -1880,8 +1880,8 @@ TclAliasObjCmd( cmdv = TclStackAlloc(interp, cmdc * sizeof(Tcl_Obj *)); } - memcpy(cmdv, prefv, (size_t) (prefc * sizeof(Tcl_Obj *))); - memcpy(cmdv+prefc, objv+1, (size_t) ((objc-1) * sizeof(Tcl_Obj *))); + memcpy(cmdv, prefv, prefc * sizeof(Tcl_Obj *)); + memcpy(cmdv+prefc, objv+1, (objc-1) * sizeof(Tcl_Obj *)); Tcl_ResetResult(targetInterp); @@ -1970,8 +1970,8 @@ TclLocalAliasObjCmd( cmdv = TclStackAlloc(interp, cmdc * sizeof(Tcl_Obj *)); } - memcpy(cmdv, prefv, (size_t) (prefc * sizeof(Tcl_Obj *))); - memcpy(cmdv+prefc, objv+1, (size_t) ((objc-1) * sizeof(Tcl_Obj *))); + memcpy(cmdv, prefv, prefc * sizeof(Tcl_Obj *)); + memcpy(cmdv+prefc, objv+1, (objc-1) * sizeof(Tcl_Obj *)); for (i=0; i<cmdc; i++) { Tcl_IncrRefCount(cmdv[i]); diff --git a/generic/tclListObj.c b/generic/tclListObj.c index 85f391c..2ce980a 100644 --- a/generic/tclListObj.c +++ b/generic/tclListObj.c @@ -765,7 +765,7 @@ Tcl_ListObjAppendElement( * Old intrep to be freed, re-use refCounts. */ - memcpy(dst, src, (size_t) numElems * sizeof(Tcl_Obj *)); + memcpy(dst, src, numElems * sizeof(Tcl_Obj *)); Tcl_Free(listRepPtr); } listRepPtr = newPtr; @@ -1080,7 +1080,7 @@ Tcl_ListObjReplace( if ((numAfterLast > 0) && (shift != 0)) { Tcl_Obj **src = elemPtrs + start; - memmove(src+shift, src, (size_t) numAfterLast * sizeof(Tcl_Obj*)); + memmove(src+shift, src, numAfterLast * sizeof(Tcl_Obj*)); } } else { /* @@ -1147,7 +1147,7 @@ Tcl_ListObjReplace( */ if (first > 0) { - memcpy(elemPtrs, oldPtrs, (size_t) first * sizeof(Tcl_Obj *)); + memcpy(elemPtrs, oldPtrs, first * sizeof(Tcl_Obj *)); } /* @@ -1233,7 +1233,7 @@ TclLindexList( Tcl_Obj *argPtr) /* Index or index list. */ { - int index; /* Index into the list. */ + size_t index; /* Index into the list. */ Tcl_Obj *indexListCopy; List *listRepPtr; @@ -1319,7 +1319,8 @@ TclLindexFlat( Tcl_IncrRefCount(listPtr); for (i=0 ; i<indexCount && listPtr ; i++) { - int index, listLen = 0; + size_t index; + int listLen = 0; Tcl_Obj **elemPtrs = NULL, *sublistCopy; /* @@ -1343,7 +1344,7 @@ TclLindexFlat( if (TclGetIntForIndexM(interp, indexArray[i], /*endValue*/ listLen-1, &index) == TCL_OK) { - if (index<0 || index>=listLen) { + if (index >= (size_t)listLen) { /* * Index is out of range. Break out of loop with empty result. * First check remaining indices for validity @@ -1402,7 +1403,7 @@ TclLsetList( int indexCount = 0; /* Number of indices in the index list. */ Tcl_Obj **indices = NULL; /* Vector of indices in the index list. */ Tcl_Obj *retValuePtr; /* Pointer to the list to be returned. */ - int index; /* Current index in the list - discarded. */ + size_t index; /* Current index in the list - discarded. */ Tcl_Obj *indexListCopy; List *listRepPtr; @@ -1500,7 +1501,8 @@ TclLsetFlat( /* Index args. */ Tcl_Obj *valuePtr) /* Value arg to 'lset' or NULL to 'lpop'. */ { - int index, result, len; + size_t index; + int result, len; Tcl_Obj *subListPtr, *retValuePtr, *chainPtr; Tcl_ObjIntRep *irPtr; @@ -1573,8 +1575,8 @@ TclLsetFlat( } indexArray++; - if (index < 0 || index > elemCount - || (valuePtr == NULL && index >= elemCount)) { + if (index > (size_t)elemCount + || (valuePtr == NULL && index >= (size_t)elemCount)) { /* ...the index points outside the sublist. */ if (interp != NULL) { Tcl_SetObjResult(interp, @@ -1596,7 +1598,7 @@ TclLsetFlat( if (--indexCount) { parentList = subListPtr; - if (index == elemCount) { + if (index == (size_t)elemCount) { subListPtr = Tcl_NewObj(); } else { subListPtr = elemPtrs[index]; @@ -1614,7 +1616,7 @@ TclLsetFlat( * and store another copy. */ - if (index == elemCount) { + if (index == (size_t)elemCount) { Tcl_ListObjAppendElement(NULL, parentList, subListPtr); } else { TclListObjSetElement(NULL, parentList, index, subListPtr); @@ -1703,7 +1705,7 @@ TclLsetFlat( TclListObjLength(NULL, subListPtr, &len); if (valuePtr == NULL) { Tcl_ListObjReplace(NULL, subListPtr, index, 1, 0, NULL); - } else if (index == len) { + } else if (index == (size_t)len) { Tcl_ListObjAppendElement(NULL, subListPtr, valuePtr); } else { TclListObjSetElement(NULL, subListPtr, index, valuePtr); diff --git a/generic/tclLiteral.c b/generic/tclLiteral.c index 3ece98b..b2ccb44 100644 --- a/generic/tclLiteral.c +++ b/generic/tclLiteral.c @@ -549,8 +549,7 @@ TclHideLiteral( { LiteralEntry **nextPtrPtr, *entryPtr, *lPtr; LiteralTable *localTablePtr = &envPtr->localLitTable; - size_t localHash; - size_t length; + size_t localHash, length; const char *bytes; Tcl_Obj *newObjPtr; @@ -568,8 +567,7 @@ TclHideLiteral( TclReleaseLiteral(interp, lPtr->objPtr); lPtr->objPtr = newObjPtr; - bytes = TclGetString(newObjPtr); - length = newObjPtr->length; + bytes = TclGetStringFromObj(newObjPtr, &length); localHash = HashString(bytes, length) & localTablePtr->mask; nextPtrPtr = &localTablePtr->buckets[localHash]; @@ -702,8 +700,7 @@ AddLocalLiteralEntry( } if (!found) { - bytes = TclGetString(objPtr); - length = objPtr->length; + bytes = TclGetStringFromObj(objPtr, &length); Tcl_Panic("%s: literal \"%.*s\" wasn't found locally", "AddLocalLiteralEntry", (length>60? 60 : (int)length), bytes); } @@ -832,8 +829,7 @@ TclReleaseLiteral( } globalTablePtr = &iPtr->literalTable; - bytes = TclGetString(objPtr); - length = objPtr->length; + bytes = TclGetStringFromObj(objPtr, &length); index = HashString(bytes, length) & globalTablePtr->mask; /* @@ -1004,8 +1000,7 @@ RebuildLiteralTable( for (oldChainPtr=oldBuckets ; oldSize>0 ; oldSize--,oldChainPtr++) { for (entryPtr=*oldChainPtr ; entryPtr!=NULL ; entryPtr=*oldChainPtr) { - bytes = TclGetString(entryPtr->objPtr); - length = entryPtr->objPtr->length; + bytes = TclGetStringFromObj(entryPtr->objPtr, &length); index = (HashString(bytes, length) & tablePtr->mask); *oldChainPtr = entryPtr->nextPtr; @@ -1176,8 +1171,7 @@ TclVerifyLocalLiteralTable( localPtr=localPtr->nextPtr) { count++; if (localPtr->refCount != TCL_AUTO_LENGTH) { - bytes = TclGetString(localPtr->objPtr); - length = localPtr->objPtr->length; + bytes = TclGetStringFromObj(localPtr->objPtr, &length); Tcl_Panic("%s: local literal \"%.*s\" had bad refCount %" TCL_Z_MODIFIER "u", "TclVerifyLocalLiteralTable", (length>60? 60 : (int) length), bytes, localPtr->refCount); @@ -1226,8 +1220,7 @@ TclVerifyGlobalLiteralTable( globalPtr=globalPtr->nextPtr) { count++; if (globalPtr->refCount + 1 < 2) { - bytes = TclGetString(globalPtr->objPtr); - length = globalPtr->objPtr->length; + bytes = TclGetStringFromObj(globalPtr->objPtr, &length); Tcl_Panic("%s: global literal \"%.*s\" had bad refCount %" TCL_Z_MODIFIER "d", "TclVerifyGlobalLiteralTable", (length>60? 60 : (int)length), bytes, globalPtr->refCount); diff --git a/generic/tclObj.c b/generic/tclObj.c index d6a6c80..5cf35b4 100644 --- a/generic/tclObj.c +++ b/generic/tclObj.c @@ -1396,7 +1396,7 @@ TclFreeObj( */ TclInvalidateStringRep(objPtr); - objPtr->length = -1; + objPtr->length = TCL_AUTO_LENGTH; if (!objPtr->typePtr || !objPtr->typePtr->freeIntRepProc) { /* diff --git a/generic/tclParse.c b/generic/tclParse.c index 7259567..a3defec 100644 --- a/generic/tclParse.c +++ b/generic/tclParse.c @@ -927,7 +927,7 @@ TclParseBackslash( } else { char utfBytes[TCL_UTF_MAX]; - memcpy(utfBytes, p, (size_t) (numBytes - 1)); + memcpy(utfBytes, p, numBytes - 1); utfBytes[numBytes - 1] = '\0'; count = TclUtfToUniChar(utfBytes, &unichar) + 1; } diff --git a/generic/tclPathObj.c b/generic/tclPathObj.c index b500c7e..4344c2d 100644 --- a/generic/tclPathObj.c +++ b/generic/tclPathObj.c @@ -576,8 +576,8 @@ TclPathPart( * the standardPath code. */ - const char *rest = TclGetString(fsPathPtr->normPathPtr); - size_t numBytes = fsPathPtr->normPathPtr->length; + size_t numBytes; + const char *rest = TclGetStringFromObj(fsPathPtr->normPathPtr, &numBytes); if (strchr(rest, '/') != NULL) { goto standardPath; @@ -613,8 +613,8 @@ TclPathPart( * we don't, and instead just use the standardPath code. */ - const char *rest = TclGetString(fsPathPtr->normPathPtr); - size_t numBytes = fsPathPtr->normPathPtr->length; + size_t numBytes; + const char *rest = TclGetStringFromObj(fsPathPtr->normPathPtr, &numBytes); if (strchr(rest, '/') != NULL) { goto standardPath; @@ -1362,6 +1362,7 @@ AppendPath( { const char *bytes; Tcl_Obj *copy = Tcl_DuplicateObj(head); + size_t length; /* * This is likely buggy when dealing with virtual filesystem drivers @@ -1371,8 +1372,8 @@ AppendPath( * intrep produce the same results; that is, bugward compatibility. If * we need to fix that bug here, it needs fixing in TclJoinPath() too. */ - bytes = TclGetString(tail); - if (tail->length == 0) { + bytes = TclGetStringFromObj(tail, &length); + if (length == 0) { Tcl_AppendToObj(copy, "/", 1); } else { TclpNativeJoinPath(copy, bytes); diff --git a/generic/tclProc.c b/generic/tclProc.c index d12e0f2..f2a52a7 100644 --- a/generic/tclProc.c +++ b/generic/tclProc.c @@ -354,8 +354,7 @@ Tcl_ProcObjCmd( * The argument list is just "args"; check the body */ - procBody = TclGetString(objv[3]); - numBytes = objv[3]->length; + procBody = TclGetStringFromObj(objv[3], &numBytes); if (TclParseAllWhiteSpace(procBody, numBytes) < numBytes) { goto done; } @@ -510,7 +509,8 @@ TclCreateProc( for (i = 0; i < numArgs; i++) { const char *argname, *argnamei, *argnamelast; - int fieldCount, nameLength; + int fieldCount; + size_t nameLength; Tcl_Obj **fieldValues; /* @@ -602,10 +602,9 @@ TclCreateProc( */ if (localPtr->defValuePtr != NULL) { - const char *tmpPtr = TclGetString(localPtr->defValuePtr); - size_t tmpLength = localPtr->defValuePtr->length; - const char *value = TclGetString(fieldValues[1]); - size_t valueLength = fieldValues[1]->length; + size_t tmpLength, valueLength; + const char *tmpPtr = TclGetStringFromObj(localPtr->defValuePtr, &tmpLength); + const char *value = TclGetStringFromObj(fieldValues[1], &valueLength); if ((valueLength != tmpLength) || memcmp(value, tmpPtr, tmpLength) != 0 diff --git a/generic/tclResult.c b/generic/tclResult.c index a4df031..c8ffcf2 100644 --- a/generic/tclResult.c +++ b/generic/tclResult.c @@ -383,12 +383,13 @@ Tcl_AppendElement( Tcl_Obj *elementPtr = Tcl_NewStringObj(element, -1); Tcl_Obj *listPtr = Tcl_NewListObj(1, &elementPtr); const char *bytes; + size_t length; if (Tcl_IsShared(iPtr->objResultPtr)) { Tcl_SetObjResult(interp, Tcl_DuplicateObj(iPtr->objResultPtr)); } - bytes = TclGetString(iPtr->objResultPtr); - if (TclNeedSpace(bytes, bytes+iPtr->objResultPtr->length)) { + bytes = TclGetStringFromObj(iPtr->objResultPtr, &length); + if (TclNeedSpace(bytes, bytes + length)) { Tcl_AppendToObj(iPtr->objResultPtr, " ", 1); } Tcl_AppendObjToObj(iPtr->objResultPtr, listPtr); diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index 0bae9f0..8e3816b 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -141,10 +141,8 @@ GrowStringBuffer( objPtr->bytes = NULL; } if (flag == 0 || stringPtr->allocated > 0) { - if (needed <= STRING_MAXCHARS / 2) { - attempt = 2 * needed; - ptr = Tcl_AttemptRealloc(objPtr->bytes, attempt + 1); - } + attempt = 2 * needed; + ptr = Tcl_AttemptRealloc(objPtr->bytes, attempt + 1); if (ptr == NULL) { /* * Take care computing the amount of modest growth to avoid @@ -180,7 +178,6 @@ GrowUnicodeBuffer( * Pre-conditions: * objPtr->typePtr == &tclStringType * needed > stringPtr->maxChars - * needed < STRING_MAXCHARS */ String *ptr = NULL, *stringPtr = GET_STRING(objPtr); @@ -191,22 +188,18 @@ GrowUnicodeBuffer( * Subsequent appends - apply the growth algorithm. */ - if (needed <= STRING_MAXCHARS / 2) { - attempt = 2 * needed; - ptr = stringAttemptRealloc(stringPtr, attempt); - } + attempt = 2 * needed; + ptr = stringAttemptRealloc(stringPtr, attempt); if (ptr == NULL) { /* * Take care computing the amount of modest growth to avoid * overflow into invalid argument values for attempt. */ - size_t limit = STRING_MAXCHARS - needed; size_t extra = needed - stringPtr->numChars + TCL_MIN_UNICHAR_GROWTH; - size_t growth = (extra > limit) ? limit : extra; - attempt = needed + growth; + attempt = needed + extra; ptr = stringAttemptRealloc(stringPtr, attempt); } } @@ -651,8 +644,8 @@ Tcl_GetRange( String *stringPtr; size_t length; - if (first == TCL_AUTO_LENGTH) { - first = 0; + if (first == TCL_INDEX_NONE) { + first = TCL_INDEX_START; } if (last + 2 <= first + 1) { return Tcl_NewObj(); @@ -854,11 +847,6 @@ Tcl_SetObjLength( stringPtr->numChars = TCL_AUTO_LENGTH; stringPtr->hasUnicode = 0; } else { - /* - * Changing length of pure unicode string. - */ - - stringCheckLimits(length); if (length > stringPtr->maxChars) { stringPtr = stringRealloc(stringPtr, length); SET_STRING(objPtr, stringPtr); @@ -960,9 +948,6 @@ Tcl_AttemptSetObjLength( * Changing length of pure unicode string. */ - if (length > STRING_MAXCHARS) { - return 0; - } if (length > stringPtr->maxChars) { stringPtr = stringAttemptRealloc(stringPtr, length); if (stringPtr == NULL) { @@ -1030,7 +1015,6 @@ UnicodeLength( numChars++; } } - stringCheckLimits(numChars); return numChars; } @@ -1052,7 +1036,6 @@ SetUnicodeObj( * Allocate enough space for the String structure + Unicode string. */ - stringCheckLimits(numChars); stringPtr = stringAlloc(numChars); SET_STRING(objPtr, stringPtr); objPtr->typePtr = &tclStringType; @@ -1419,7 +1402,6 @@ AppendUnicodeToUnicodeRep( */ numChars = stringPtr->numChars + appendNumChars; - stringCheckLimits(numChars); if (numChars > stringPtr->maxChars) { size_t offset = TCL_AUTO_LENGTH; @@ -3004,7 +2986,7 @@ TclStringCat( if ((objPtr->bytes == NULL) || (objPtr->length)) { size_t numChars; - TclGetUnicodeFromObj(objPtr, &numChars); /* PANIC? */ + (void)TclGetUnicodeFromObj(objPtr, &numChars); /* PANIC? */ if (numChars) { last = objc - oc; if (length == 0) { @@ -3061,8 +3043,7 @@ TclStringCat( do { Tcl_Obj *objPtr = *ov++; - TclGetString(objPtr); /* PANIC? */ - numBytes = objPtr->length; + (void)TclGetStringFromObj(objPtr, &numBytes); /* PANIC? */ } while (--oc && numBytes == 0 && pendingPtr->bytes == NULL); if (numBytes) { @@ -3154,7 +3135,7 @@ TclStringCat( objResultPtr = *objv++; objc--; /* Ugly interface! Force resize of the unicode array. */ - TclGetUnicodeFromObj(objResultPtr, &start); + (void)TclGetUnicodeFromObj(objResultPtr, &start); Tcl_InvalidateStringRep(objResultPtr); if (0 == Tcl_AttemptSetObjLength(objResultPtr, length)) { if (interp) { @@ -3239,7 +3220,7 @@ TclStringCat( size_t more; char *src = TclGetStringFromObj(objPtr, &more); - memcpy(dst, src, (size_t) more); + memcpy(dst, src, more); dst += more; } } @@ -3429,7 +3410,7 @@ TclStringCmp( * length only. */ - match = memCmpFn(s1, s2, (size_t) length); + match = memCmpFn(s1, s2, length); } if ((match == 0) && (reqlength > length)) { match = s1len - s2len; @@ -3959,7 +3940,6 @@ ExtendUnicodeRepWithString( TclNumUtfChars(numAppendChars, bytes, numBytes); } needed = numOrigChars + numAppendChars; - stringCheckLimits(needed); if (needed > stringPtr->maxChars) { GrowUnicodeBuffer(objPtr, needed); diff --git a/generic/tclStringRep.h b/generic/tclStringRep.h index a8b3b08..73ccad6 100644 --- a/generic/tclStringRep.h +++ b/generic/tclStringRep.h @@ -31,6 +31,10 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +#ifndef _TCLSTRINGREP +#define _TCLSTRINGREP + /* * The following structure is the internal rep for a String object. It keeps @@ -64,17 +68,8 @@ typedef struct { * field above. */ } String; -#define STRING_MAXCHARS \ - ((UINT_MAX - sizeof(String))/sizeof(Tcl_UniChar)) #define STRING_SIZE(numChars) \ (sizeof(String) + ((numChars) * sizeof(Tcl_UniChar))) -#define stringCheckLimits(numChars) \ - do { \ - if ((size_t)(numChars) > STRING_MAXCHARS) { \ - Tcl_Panic("max length for a Tcl unicode value (%" TCL_Z_MODIFIER "u chars) exceeded", \ - STRING_MAXCHARS); \ - } \ - } while (0) #define stringAttemptAlloc(numChars) \ (String *) Tcl_AttemptAlloc(STRING_SIZE(numChars)) #define stringAlloc(numChars) \ @@ -89,6 +84,7 @@ typedef struct { ((objPtr)->internalRep.twoPtrValue.ptr2 = NULL), \ ((objPtr)->internalRep.twoPtrValue.ptr1 = (void *) (stringPtr)) +#endif /* _TCLSTRINGREP */ /* * Local Variables: * mode: c diff --git a/generic/tclThreadTest.c b/generic/tclThreadTest.c index db4ee0d..64858cb 100644 --- a/generic/tclThreadTest.c +++ b/generic/tclThreadTest.c @@ -294,7 +294,7 @@ ThreadObjCmd( script = Tcl_GetStringFromObj(objv[2], &len); if ((len > 1) && (script[0] == '-') && (script[1] == 'j') && - (0 == strncmp(script, "-joinable", (size_t) len))) { + (0 == strncmp(script, "-joinable", len))) { joinable = 1; script = "testthread wait"; /* Just enter event loop */ } else { @@ -311,7 +311,7 @@ ThreadObjCmd( script = Tcl_GetStringFromObj(objv[2], &len); joinable = ((len > 1) && (script[0] == '-') && (script[1] == 'j') - && (0 == strncmp(script, "-joinable", (size_t) len))); + && (0 == strncmp(script, "-joinable", len))); script = Tcl_GetString(objv[3]); } else { Tcl_WrongNumArgs(interp, 2, objv, "?-joinable? ?script?"); diff --git a/generic/tclUtf.c b/generic/tclUtf.c index 6b73a8f..9903c8c 100644 --- a/generic/tclUtf.c +++ b/generic/tclUtf.c @@ -88,7 +88,7 @@ static const unsigned char totalBytes[256] = { *--------------------------------------------------------------------------- */ -int +size_t TclUtfCount( int ch) /* The Unicode character whose size is returned. */ { @@ -575,7 +575,8 @@ Tcl_UtfFindFirst( const char *src, /* The UTF-8 string to be searched. */ int ch) /* The Unicode character to search for. */ { - int len, fullchar; + size_t len; + int fullchar; Tcl_UniChar find = 0; while (1) { @@ -621,7 +622,8 @@ Tcl_UtfFindLast( const char *src, /* The UTF-8 string to be searched. */ int ch) /* The Unicode character to search for. */ { - int len, fullchar; + size_t len; + int fullchar; Tcl_UniChar find = 0; const char *last; @@ -670,7 +672,7 @@ Tcl_UtfNext( const char *src) /* The current location in the string. */ { Tcl_UniChar ch = 0; - int len = TclUtfToUniChar(src, &ch); + size_t len = TclUtfToUniChar(src, &ch); #if TCL_UTF_MAX <= 4 if (len == 0) { @@ -755,7 +757,7 @@ Tcl_UniCharAtIndex( Tcl_UniChar ch = 0; int fullchar = 0; #if TCL_UTF_MAX <= 4 - int len = 1; + size_t len = 1; #endif src += TclUtfToUniChar(src, &ch); @@ -803,7 +805,7 @@ Tcl_UtfAtIndex( { Tcl_UniChar ch = 0; #if TCL_UTF_MAX <= 4 - int len = 1; + size_t len = 1; #endif if (index != TCL_AUTO_LENGTH) { @@ -901,7 +903,7 @@ Tcl_UtfToUpper( Tcl_UniChar ch = 0; int upChar; char *src, *dst; - int bytes; + size_t bytes; /* * Iterate over the string until we hit the terminating null. @@ -928,7 +930,7 @@ Tcl_UtfToUpper( */ if ((bytes < TclUtfCount(upChar)) || ((upChar & 0xF800) == 0xD800)) { - memcpy(dst, src, (size_t) bytes); + memcpy(dst, src, bytes); dst += bytes; } else { dst += Tcl_UniCharToUtf(upChar, dst); @@ -964,7 +966,7 @@ Tcl_UtfToLower( Tcl_UniChar ch = 0; int lowChar; char *src, *dst; - int bytes; + size_t bytes; /* * Iterate over the string until we hit the terminating null. @@ -991,7 +993,7 @@ Tcl_UtfToLower( */ if ((bytes < TclUtfCount(lowChar)) || ((lowChar & 0xF800) == 0xD800)) { - memcpy(dst, src, (size_t) bytes); + memcpy(dst, src, bytes); dst += bytes; } else { dst += Tcl_UniCharToUtf(lowChar, dst); @@ -1028,7 +1030,7 @@ Tcl_UtfToTitle( Tcl_UniChar ch = 0; int titleChar, lowChar; char *src, *dst; - int bytes; + size_t bytes; /* * Capitalize the first character and then lowercase the rest of the @@ -1051,7 +1053,7 @@ Tcl_UtfToTitle( titleChar = Tcl_UniCharToTitle(titleChar); if ((bytes < TclUtfCount(titleChar)) || ((titleChar & 0xF800) == 0xD800)) { - memcpy(dst, src, (size_t) bytes); + memcpy(dst, src, bytes); dst += bytes; } else { dst += Tcl_UniCharToUtf(titleChar, dst); @@ -1075,7 +1077,7 @@ Tcl_UtfToTitle( } if ((bytes < TclUtfCount(lowChar)) || ((lowChar & 0xF800) == 0xD800)) { - memcpy(dst, src, (size_t) bytes); + memcpy(dst, src, bytes); dst += bytes; } else { dst += Tcl_UniCharToUtf(lowChar, dst); diff --git a/generic/tclUtil.c b/generic/tclUtil.c index 6481283..d1a9d02 100644 --- a/generic/tclUtil.c +++ b/generic/tclUtil.c @@ -1027,7 +1027,7 @@ TclScanElement( int extra = 0; /* Count of number of extra bytes needed for * formatted element, assuming we use escape * sequences in formatting. */ - int bytesNeeded; /* Buffer length computed to complete the + size_t bytesNeeded; /* Buffer length computed to complete the * element formatting in the selected mode. */ #if COMPAT int preferEscape = 0; /* Use preferences to track whether to use */ @@ -1197,7 +1197,7 @@ TclScanElement( bytesNeeded++; } *flagPtr = CONVERT_ESCAPE; - goto overflowCheck; + return bytesNeeded; } if (*flagPtr & CONVERT_ANY) { /* @@ -1245,7 +1245,7 @@ TclScanElement( bytesNeeded += braceCount; } *flagPtr = CONVERT_MASK; - goto overflowCheck; + return bytesNeeded; } #endif /* COMPAT */ if (*flagPtr & TCL_DONT_USE_BRACES) { @@ -1271,7 +1271,7 @@ TclScanElement( bytesNeeded += 2; } *flagPtr = CONVERT_BRACE; - goto overflowCheck; + return bytesNeeded; } /* @@ -1286,11 +1286,6 @@ TclScanElement( bytesNeeded += 2; } *flagPtr = CONVERT_NONE; - - overflowCheck: - if (bytesNeeded < 0) { - Tcl_Panic("TclScanElement: string length overflow"); - } return bytesNeeded; } @@ -1669,15 +1664,15 @@ UtfWellFormedEnd( *---------------------------------------------------------------------- */ -static inline int +static inline size_t TrimRight( const char *bytes, /* String to be trimmed... */ - int numBytes, /* ...and its length in bytes */ + size_t numBytes, /* ...and its length in bytes */ const char *trim, /* String of trim characters... */ - int numTrim) /* ...and its length in bytes */ + size_t numTrim) /* ...and its length in bytes */ { const char *p = bytes + numBytes; - int pInc; + size_t pInc; Tcl_UniChar ch1 = 0, ch2 = 0; /* @@ -1686,7 +1681,7 @@ TrimRight( do { const char *q = trim; - int bytesLeft = numTrim; + size_t bytesLeft = numTrim; p = Tcl_UtfPrev(p, bytes); pInc = TclUtfToUniChar(p, &ch1); @@ -1696,7 +1691,7 @@ TrimRight( */ do { - int qInc = TclUtfToUniChar(q, &ch2); + size_t qInc = TclUtfToUniChar(q, &ch2); if (ch1 == ch2) { break; @@ -1783,16 +1778,16 @@ TrimLeft( */ do { - int pInc = TclUtfToUniChar(p, &ch1); + size_t pInc = TclUtfToUniChar(p, &ch1); const char *q = trim; - int bytesLeft = numTrim; + size_t bytesLeft = numTrim; /* * Inner loop: scan trim string for match to current character. */ do { - int qInc = TclUtfToUniChar(q, &ch2); + size_t qInc = TclUtfToUniChar(q, &ch2); if (ch1 == ch2) { break; @@ -1992,7 +1987,7 @@ Tcl_Concat( if (needSpace) { *p++ = ' '; } - memcpy(p, element, (size_t) elemLength); + memcpy(p, element, elemLength); p += elemLength; needSpace = 1; } @@ -2041,8 +2036,7 @@ Tcl_ConcatObj( if (TclListObjIsCanonical(objPtr)) { continue; } - TclGetString(objPtr); - length = objPtr->length; + (void)TclGetStringFromObj(objPtr, &length); if (length > 0) { break; } @@ -2079,8 +2073,7 @@ Tcl_ConcatObj( */ for (i = 0; i < objc; i++) { - element = TclGetString(objv[i]); - elemLength = objv[i]->length; + element = TclGetStringFromObj(objv[i], &elemLength); bytesNeeded += elemLength; } @@ -2097,8 +2090,7 @@ Tcl_ConcatObj( for (i = 0; i < objc; i++) { size_t triml, trimr; - element = TclGetString(objv[i]); - elemLength = objv[i]->length; + element = TclGetStringFromObj(objv[i], &elemLength); /* Trim away the leading/trailing whitespace. */ triml = TclTrim(element, elemLength, CONCAT_TRIM_SET, @@ -3631,23 +3623,22 @@ TclGetIntForIndex( * or an integer. */ size_t endValue, /* The value to be stored at "indexPtr" if * "objPtr" holds "end". */ - int *indexPtr) /* Location filled in with an integer + size_t *indexPtr) /* Location filled in with an integer * representing an index. */ { Tcl_WideInt wide; /* Use platform-related size_t to wide-int to consider negative value - * ((size_t)-1) if wide-int and size_t have different dimensions. */ - if (GetWideForIndex(interp, objPtr, TclWideIntFromSize(endValue), - &wide) == TCL_ERROR) { + * TCL_INDEX_NONE if wide-int and size_t have different dimensions. */ + if (GetWideForIndex(interp, objPtr, endValue, &wide) == TCL_ERROR) { return TCL_ERROR; } if (wide < 0) { - *indexPtr = -1; - } else if (wide > INT_MAX) { - *indexPtr = INT_MAX; + *indexPtr = TCL_INDEX_NONE; + } else if ((Tcl_WideUInt)wide > TCL_INDEX_END) { + *indexPtr = TCL_INDEX_END; } else { - *indexPtr = (int) wide; + *indexPtr = (size_t) wide; } return TCL_OK; } @@ -3741,7 +3732,7 @@ GetEndOffsetFromObj( offset = irPtr->wideValue; - if (endValue == (size_t)-1) { + if (endValue == TCL_INDEX_NONE) { *widePtr = offset - 1; } else if (offset < 0) { /* Different signs, sum cannot overflow */ @@ -3825,7 +3816,7 @@ TclIndexEncode( /* We parsed a value in the range WIDE_MIN...WIDE_MAX */ wide = (*(Tcl_WideInt *)cd); integerEncode: - if (wide < TCL_INDEX_START) { + if (wide < 0) { /* All negative absolute indices are "before the beginning" */ idx = before; } else if (wide >= INT_MAX) { @@ -3845,13 +3836,13 @@ TclIndexEncode( * All end+positive or end-negative expressions * always indicate "after the end". */ - idx = after; - } else if (wide < INT_MIN - TCL_INDEX_END) { + idx = (int) after; + } else if (wide < INT_MIN - (int) TCL_INDEX_END) { /* These indices always indicate "before the beginning */ - idx = before; + idx = (int) before; } else { /* Encoded end-positive (or end+negative) are offset */ - idx = (int)wide + TCL_INDEX_END; + idx = (int) wide + (int) TCL_INDEX_END; } /* TODO: Consider flag to suppress repeated end-offset parse. */ @@ -3890,10 +3881,10 @@ TclIndexDecode( int encoded, /* Value to decode */ size_t endValue) /* Meaning of "end" to use, > TCL_INDEX_END */ { - if (encoded > TCL_INDEX_END) { + if (encoded > (int)TCL_INDEX_END) { return encoded; } - if (endValue >= TCL_INDEX_END - (size_t)encoded) { + if (endValue >= TCL_INDEX_END - encoded) { return endValue + encoded - TCL_INDEX_END; } return TCL_INDEX_NONE; diff --git a/generic/tclVar.c b/generic/tclVar.c index 308af04..972e1f6 100644 --- a/generic/tclVar.c +++ b/generic/tclVar.c @@ -6395,7 +6395,7 @@ CompareVarKeys( Tcl_Obj *objPtr1 = (Tcl_Obj *)keyPtr; Tcl_Obj *objPtr2 = hPtr->key.objPtr; register const char *p1, *p2; - register int l1, l2; + register size_t l1, l2; /* * If the object pointers are the same then they match. diff --git a/generic/tclZlib.c b/generic/tclZlib.c index ef5eab3..33ab2e5 100644 --- a/generic/tclZlib.c +++ b/generic/tclZlib.c @@ -422,6 +422,7 @@ GenerateHeader( { Tcl_Obj *value; int len, result = TCL_ERROR; + size_t length; const char *valueStr; Tcl_Encoding latin1enc; static const char *const types[] = { @@ -440,8 +441,8 @@ GenerateHeader( if (GetValue(interp, dictObj, "comment", &value) != TCL_OK) { goto error; } else if (value != NULL) { - valueStr = TclGetString(value); - Tcl_UtfToExternal(NULL, latin1enc, valueStr, value->length, 0, NULL, + valueStr = TclGetStringFromObj(value, &length); + Tcl_UtfToExternal(NULL, latin1enc, valueStr, length, 0, NULL, headerPtr->nativeCommentBuf, MAX_COMMENT_LEN-1, NULL, &len, NULL); headerPtr->nativeCommentBuf[len] = '\0'; @@ -461,8 +462,8 @@ GenerateHeader( if (GetValue(interp, dictObj, "filename", &value) != TCL_OK) { goto error; } else if (value != NULL) { - valueStr = TclGetString(value); - Tcl_UtfToExternal(NULL, latin1enc, valueStr, value->length, 0, NULL, + valueStr = TclGetStringFromObj(value, &length); + Tcl_UtfToExternal(NULL, latin1enc, valueStr, length, 0, NULL, headerPtr->nativeFilenameBuf, MAXPATHLEN-1, NULL, &len, NULL); headerPtr->nativeFilenameBuf[len] = '\0'; headerPtr->header.name = (Bytef *) headerPtr->nativeFilenameBuf; @@ -3397,9 +3398,10 @@ ZlibTransformGetOption( } } else { if (cd->compDictObj) { - const char *str = TclGetString(cd->compDictObj); + size_t length; + const char *str = TclGetStringFromObj(cd->compDictObj, &length); - Tcl_DStringAppend(dsPtr, str, cd->compDictObj->length); + Tcl_DStringAppend(dsPtr, str, length); } return TCL_OK; } diff --git a/macosx/tclMacOSXFCmd.c b/macosx/tclMacOSXFCmd.c index ab9b74f..f6d39e1 100644 --- a/macosx/tclMacOSXFCmd.c +++ b/macosx/tclMacOSXFCmd.c @@ -639,9 +639,10 @@ SetOSTypeFromAny( int result = TCL_OK; Tcl_DString ds; Tcl_Encoding encoding = Tcl_GetEncoding(NULL, "macRoman"); + size_t length; - string = TclGetString(objPtr); - Tcl_UtfToExternalDString(encoding, string, objPtr->length, &ds); + string = TclGetStringFromObj(objPtr, &length); + Tcl_UtfToExternalDString(encoding, string, length, &ds); if (Tcl_DStringLength(&ds) > 4) { if (interp) { diff --git a/unix/tclUnixFCmd.c b/unix/tclUnixFCmd.c index cb2ecdb..aa99042 100644 --- a/unix/tclUnixFCmd.c +++ b/unix/tclUnixFCmd.c @@ -1507,10 +1507,11 @@ SetGroupAttribute( Tcl_DString ds; struct group *groupPtr = NULL; const char *string; + size_t length; - string = TclGetString(attributePtr); + string = TclGetStringFromObj(attributePtr, &length); - native = Tcl_UtfToExternalDString(NULL, string, attributePtr->length, &ds); + native = Tcl_UtfToExternalDString(NULL, string, length, &ds); groupPtr = TclpGetGrNam(native); /* INTL: Native. */ Tcl_DStringFree(&ds); @@ -1573,10 +1574,11 @@ SetOwnerAttribute( Tcl_DString ds; struct passwd *pwPtr = NULL; const char *string; + size_t length; - string = TclGetString(attributePtr); + string = TclGetStringFromObj(attributePtr, &length); - native = Tcl_UtfToExternalDString(NULL, string, attributePtr->length, &ds); + native = Tcl_UtfToExternalDString(NULL, string, length, &ds); pwPtr = TclpGetPwNam(native); /* INTL: Native. */ Tcl_DStringFree(&ds); @@ -1945,8 +1947,8 @@ TclpObjNormalizePath( { const char *currentPathEndPosition; char cur; - const char *path = TclGetString(pathPtr); - size_t pathLen = pathPtr->length; + size_t pathLen; + const char *path = TclGetStringFromObj(pathPtr, &pathLen); Tcl_DString ds; const char *nativePath; #ifndef NO_REALPATH @@ -2176,14 +2178,15 @@ TclUnixOpenTemporaryFile( Tcl_DString template, tmp; const char *string; int fd; + size_t length; /* * We should also check against making more then TMP_MAX of these. */ if (dirObj) { - string = TclGetString(dirObj); - Tcl_UtfToExternalDString(NULL, string, dirObj->length, &template); + string = TclGetStringFromObj(dirObj, &length); + Tcl_UtfToExternalDString(NULL, string, length, &template); } else { Tcl_DStringInit(&template); Tcl_DStringAppend(&template, DefaultTempDir(), -1); /* INTL: native */ @@ -2192,8 +2195,8 @@ TclUnixOpenTemporaryFile( TclDStringAppendLiteral(&template, "/"); if (basenameObj) { - string = TclGetString(basenameObj); - Tcl_UtfToExternalDString(NULL, string, basenameObj->length, &tmp); + string = TclGetStringFromObj(basenameObj, &length); + Tcl_UtfToExternalDString(NULL, string, length, &tmp); TclDStringAppendDString(&template, &tmp); Tcl_DStringFree(&tmp); } else { @@ -2204,8 +2207,8 @@ TclUnixOpenTemporaryFile( #ifdef HAVE_MKSTEMPS if (extensionObj) { - string = TclGetString(extensionObj); - Tcl_UtfToExternalDString(NULL, string, extensionObj->length, &tmp); + string = TclGetStringFromObj(extensionObj, &length); + Tcl_UtfToExternalDString(NULL, string, length, &tmp); TclDStringAppendDString(&template, &tmp); fd = mkstemps(Tcl_DStringValue(&template), Tcl_DStringLength(&tmp)); Tcl_DStringFree(&tmp); diff --git a/unix/tclUnixFile.c b/unix/tclUnixFile.c index 3da84e0..352c04e 100644 --- a/unix/tclUnixFile.c +++ b/unix/tclUnixFile.c @@ -269,8 +269,7 @@ TclpMatchInDirectory( Tcl_DString dsOrig; /* utf-8 encoding of dir */ Tcl_DStringInit(&dsOrig); - dirName = TclGetString(fileNamePtr); - dirLength = fileNamePtr->length; + dirName = TclGetStringFromObj(fileNamePtr, &dirLength); Tcl_DStringAppend(&dsOrig, dirName, dirLength); /* @@ -940,6 +939,7 @@ TclpObjLink( if (linkAction & TCL_CREATE_SYMBOLIC_LINK) { Tcl_DString ds; Tcl_Obj *transPtr; + size_t length; /* * Now we don't want to link to the absolute, normalized path. @@ -951,8 +951,8 @@ TclpObjLink( if (transPtr == NULL) { return NULL; } - target = TclGetString(transPtr); - target = Tcl_UtfToExternalDString(NULL, target, transPtr->length, &ds); + target = TclGetStringFromObj(transPtr, &length); + target = Tcl_UtfToExternalDString(NULL, target, length, &ds); Tcl_DecrRefCount(transPtr); if (symlink(target, src) != 0) { @@ -1105,8 +1105,7 @@ TclNativeCreateNativeRep( Tcl_IncrRefCount(validPathPtr); } - str = TclGetString(validPathPtr); - len = validPathPtr->length; + str = TclGetStringFromObj(validPathPtr, &len); Tcl_UtfToExternalDString(NULL, str, len, &ds); len = Tcl_DStringLength(&ds) + sizeof(char); if (strlen(Tcl_DStringValue(&ds)) < len - sizeof(char)) { diff --git a/unix/tclUnixInit.c b/unix/tclUnixInit.c index eacf157..b320650 100644 --- a/unix/tclUnixInit.c +++ b/unix/tclUnixInit.c @@ -455,6 +455,7 @@ TclpInitLibraryPath( Tcl_Obj *pathPtr, *objPtr; const char *str; Tcl_DString buffer; + size_t length; pathPtr = Tcl_NewObj(); @@ -537,8 +538,7 @@ TclpInitLibraryPath( Tcl_DStringFree(&buffer); *encodingPtr = Tcl_GetEncoding(NULL, NULL); - str = TclGetString(pathPtr); - *lengthPtr = pathPtr->length; + str = TclGetStringFromObj(pathPtr, lengthPtr); *valuePtr = Tcl_Alloc(*lengthPtr + 1); memcpy(*valuePtr, str, *lengthPtr + 1); Tcl_DecrRefCount(pathPtr); diff --git a/unix/tclUnixSock.c b/unix/tclUnixSock.c index d53b3de..dd91e25 100644 --- a/unix/tclUnixSock.c +++ b/unix/tclUnixSock.c @@ -241,7 +241,7 @@ InitializeHostName( if (dot != NULL) { char *node = Tcl_Alloc(dot - u.nodename + 1); - memcpy(node, u.nodename, (size_t) (dot - u.nodename)); + memcpy(node, u.nodename, dot - u.nodename); node[dot - u.nodename] = '\0'; hp = TclpGetHostByName(node); Tcl_Free(node); diff --git a/win/tclWinFCmd.c b/win/tclWinFCmd.c index d281c22..14d5779 100644 --- a/win/tclWinFCmd.c +++ b/win/tclWinFCmd.c @@ -1524,8 +1524,8 @@ GetWinFileAttributes( * We test for, and fix that case, here. */ - const char *str = TclGetString(fileName); - size_t len = fileName->length; + size_t len; + const char *str = TclGetStringFromObj(fileName, &len); if (len < 4) { if (len == 0) { @@ -1586,6 +1586,7 @@ ConvertFileNameFormat( { int pathc, i; Tcl_Obj *splitPath; + size_t length; splitPath = Tcl_FSSplitPath(fileName, &pathc); @@ -1613,8 +1614,8 @@ ConvertFileNameFormat( Tcl_ListObjIndex(NULL, splitPath, i, &elt); - pathv = TclGetString(elt); - if ((pathv[0] == '/') || ((elt->length == 3) && (pathv[1] == ':')) + pathv = TclGetStringFromObj(elt, &length); + if ((pathv[0] == '/') || ((length == 3) && (pathv[1] == ':')) || (strcmp(pathv, ".") == 0) || (strcmp(pathv, "..") == 0)) { /* * Handle "/", "//machine/export", "c:/", "." or ".." by just @@ -1649,8 +1650,8 @@ ConvertFileNameFormat( * likely to lead to infinite loops. */ - tempString = TclGetString(tempPath); - nativeName = Tcl_WinUtfToTChar(tempString, tempPath->length, &ds); + tempString = TclGetStringFromObj(tempPath, &length); + nativeName = Tcl_WinUtfToTChar(tempString, length, &ds); Tcl_DecrRefCount(tempPath); handle = FindFirstFile(nativeName, &data); if (handle == INVALID_HANDLE_VALUE) { diff --git a/win/tclWinFile.c b/win/tclWinFile.c index 7ff8b9b..3910f3d 100644 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -913,7 +913,8 @@ TclpMatchInDirectory( DWORD attr; WIN32_FILE_ATTRIBUTE_DATA data; - const char *str = TclGetString(norm); + size_t length; + const char *str = TclGetStringFromObj(norm, &length); native = Tcl_FSGetNativePath(pathPtr); @@ -923,7 +924,7 @@ TclpMatchInDirectory( } attr = data.dwFileAttributes; - if (NativeMatchType(WinIsDrive(str,norm->length), attr, native, types)) { + if (NativeMatchType(WinIsDrive(str, length), attr, native, types)) { Tcl_ListObjAppendElement(interp, resultPtr, pathPtr); } } @@ -2733,12 +2734,13 @@ TclpObjNormalizePath( char *path; Tcl_Obj *tmpPathPtr; + size_t length; tmpPathPtr = Tcl_NewStringObj(Tcl_DStringValue(&ds), nextCheckpoint); Tcl_AppendToObj(tmpPathPtr, lastValidPathEnd, -1); - path = TclGetString(tmpPathPtr); - Tcl_SetStringObj(pathPtr, path, tmpPathPtr->length); + path = TclGetStringFromObj(tmpPathPtr, &length); + Tcl_SetStringObj(pathPtr, path, length); Tcl_DecrRefCount(tmpPathPtr); } else { /* |