From 238ad5bc9e7a3a174084646bd915e2392030cfdd Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 18 Nov 2007 22:30:10 +0000 Subject: More minor cleanup --- generic/tclFileName.c | 15 ++- generic/tclIOCmd.c | 14 +-- generic/tclParse.c | 251 ++++++++++++++++++++++++------------------------- generic/tclPathObj.c | 12 +-- generic/tclPkg.c | 148 +++++++++++++++-------------- generic/tclStrToD.c | 235 +++++++++++++++++++++++---------------------- generic/tclStringObj.c | 143 ++++++++++++++-------------- 7 files changed, 414 insertions(+), 404 deletions(-) diff --git a/generic/tclFileName.c b/generic/tclFileName.c index 6705866..dc58199 100644 --- a/generic/tclFileName.c +++ b/generic/tclFileName.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclFileName.c,v 1.84 2007/06/20 18:46:12 dgp Exp $ + * RCS: @(#) $Id: tclFileName.c,v 1.85 2007/11/18 22:32:47 dkf Exp $ */ #include "tclInt.h" @@ -1154,7 +1154,7 @@ DoTildeSubst( if (interp) { Tcl_ResetResult(interp); Tcl_AppendResult(interp, "couldn't find HOME environment " - "variable to expand path", (char *) NULL); + "variable to expand path", NULL); } return NULL; } @@ -1164,7 +1164,7 @@ DoTildeSubst( if (interp) { Tcl_ResetResult(interp); Tcl_AppendResult(interp, "user \"", user, "\" doesn't exist", - (char *) NULL); + NULL); } return NULL; } @@ -1598,19 +1598,18 @@ Tcl_GlobObjCmd( if (length == 0) { Tcl_AppendResult(interp, "no files matched glob pattern", - (join || (objc == 1)) ? " \"" : "s \"", (char *) NULL); + (join || (objc == 1)) ? " \"" : "s \"", NULL); if (join) { - Tcl_AppendResult(interp, Tcl_DStringValue(&prefix), - (char *) NULL); + Tcl_AppendResult(interp, Tcl_DStringValue(&prefix), NULL); } else { const char *sep = ""; for (i = 0; i < objc; i++) { string = Tcl_GetString(objv[i]); - Tcl_AppendResult(interp, sep, string, (char *) NULL); + Tcl_AppendResult(interp, sep, string, NULL); sep = " "; } } - Tcl_AppendResult(interp, "\"", (char *) NULL); + Tcl_AppendResult(interp, "\"", NULL); result = TCL_ERROR; } } diff --git a/generic/tclIOCmd.c b/generic/tclIOCmd.c index f69506c..cc01b91 100644 --- a/generic/tclIOCmd.c +++ b/generic/tclIOCmd.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclIOCmd.c,v 1.45 2007/11/11 19:32:15 msofer Exp $ + * RCS: @(#) $Id: tclIOCmd.c,v 1.46 2007/11/18 22:32:47 dkf Exp $ */ #include "tclInt.h" @@ -265,18 +265,18 @@ Tcl_GetsObjCmd( } linePtr = Tcl_NewObj(); - lineLen = Tcl_GetsObj(chan, linePtr); if (lineLen < 0) { if (!Tcl_Eof(chan) && !Tcl_InputBlocked(chan)) { Tcl_DecrRefCount(linePtr); /* - * TIP #219. - * Capture error messages put by the driver into the bypass area - * and put them into the regular interpreter result. Fall back to - * the regular message if nothing was found in the bypass. + * TIP #219. Capture error messages put by the driver into the + * bypass area and put them into the regular interpreter result. + * Fall back to the regular message if nothing was found in the + * bypass. */ + if (!TclChanCaughtErrorBypass(interp, chan)) { Tcl_ResetResult(interp); Tcl_AppendResult(interp, "error reading \"", name, "\": ", @@ -1665,7 +1665,7 @@ TclChanPendingObjCmd( Tcl_Channel chan; int index, mode; char *arg; - static const char *options[] = {"input", "output", (char *) NULL}; + static const char *options[] = {"input", "output", NULL}; enum options {PENDING_INPUT, PENDING_OUTPUT}; if (objc != 3) { diff --git a/generic/tclParse.c b/generic/tclParse.c index ba1198a..211a10b 100644 --- a/generic/tclParse.c +++ b/generic/tclParse.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclParse.c,v 1.58 2007/11/11 19:32:17 msofer Exp $ + * RCS: @(#) $Id: tclParse.c,v 1.59 2007/11/18 22:30:10 dkf Exp $ */ #include "tclInt.h" @@ -54,7 +54,7 @@ #define CHAR_TYPE(c) (charTypeTable+128)[(int)(c)] -static CONST char charTypeTable[] = { +static const char charTypeTable[] = { /* * Negative character values, from -128 to -1: */ @@ -171,12 +171,12 @@ static CONST char charTypeTable[] = { * Prototypes for local functions defined in this file: */ -static int CommandComplete(CONST char *script, int numBytes); -static int ParseComment(CONST char *src, int numBytes, +static inline int CommandComplete(const char *script, int numBytes); +static int ParseComment(const char *src, int numBytes, Tcl_Parse *parsePtr); -static int ParseTokens(CONST char *src, int numBytes, int mask, +static int ParseTokens(const char *src, int numBytes, int mask, int flags, Tcl_Parse *parsePtr); -static int ParseWhiteSpace(CONST char *src, int numBytes, +static int ParseWhiteSpace(const char *src, int numBytes, int *incompletePtr, char *typePtr); /* @@ -198,7 +198,7 @@ static int ParseWhiteSpace(CONST char *src, int numBytes, void TclParseInit( Tcl_Interp *interp, /* Interpreter to use for error reporting */ - CONST char *string, /* String to be parsed. */ + const char *string, /* String to be parsed. */ int numBytes, /* Total number of bytes in string. If < 0, * the script consists of all bytes up to the * first null character. */ @@ -243,7 +243,7 @@ int Tcl_ParseCommand( Tcl_Interp *interp, /* Interpreter to use for error reporting; if * NULL, then no error message is provided. */ - CONST char *start, /* First character of string containing one or + const char *start, /* First character of string containing one or * more Tcl commands. */ register int numBytes, /* Total number of bytes in string. If < 0, * the script consists of all bytes up to the @@ -257,14 +257,14 @@ Tcl_ParseCommand( * the parsed command; any previous * information in the structure is ignored. */ { - register CONST char *src; /* Points to current character in the + register const char *src; /* Points to current character in the * command. */ char type; /* Result returned by CHAR_TYPE(*src). */ Tcl_Token *tokenPtr; /* Pointer to token being filled in. */ int wordIndex; /* Index of word token for current word. */ int terminators; /* CHAR_TYPE bits that indicate the end of a * command. */ - CONST char *termPtr; /* Set by Tcl_ParseBraces/QuotedString to + const char *termPtr; /* Set by Tcl_ParseBraces/QuotedString to * point to char after terminating one. */ int scanned; @@ -327,7 +327,7 @@ Tcl_ParseCommand( * sequence: it should be treated just like white space. */ - scanned = ParseWhiteSpace(src, numBytes, &(parsePtr->incomplete), &type); + scanned = ParseWhiteSpace(src,numBytes, &parsePtr->incomplete, &type); src += scanned; numBytes -= scanned; if (numBytes == 0) { @@ -351,8 +351,8 @@ Tcl_ParseCommand( parseWord: if (*src == '"') { - if (Tcl_ParseQuotedString(interp, src, numBytes, - parsePtr, 1, &termPtr) != TCL_OK) { + if (Tcl_ParseQuotedString(interp, src, numBytes, parsePtr, 1, + &termPtr) != TCL_OK) { goto error; } src = termPtr; @@ -361,33 +361,31 @@ Tcl_ParseCommand( int expIdx = wordIndex + 1; Tcl_Token *expPtr; - if (Tcl_ParseBraces(interp, src, numBytes, - parsePtr, 1, &termPtr) != TCL_OK) { + if (Tcl_ParseBraces(interp, src, numBytes, parsePtr, 1, + &termPtr) != TCL_OK) { goto error; } src = termPtr; numBytes = parsePtr->end - src; /* - * Check whether the braces contained the word expansion prefix {*} + * Check whether the braces contained the word expansion prefix + * {*} */ expPtr = &parsePtr->tokenPtr[expIdx]; - if ( - (0 == expandWord) - /* Haven't seen prefix already */ - && (1 == parsePtr->numTokens - expIdx) - /* Only one token */ - && (((1 == (size_t) expPtr->size) + if ((0 == expandWord) + /* Haven't seen prefix already */ + && (1 == parsePtr->numTokens - expIdx) + /* Only one token */ + && (((1 == (size_t) expPtr->size) /* Same length as prefix */ - && (expPtr->start[0] == '*')) - ) - /* Is the prefix */ - && (numBytes > 0) && (0 == - ParseWhiteSpace(termPtr, numBytes, &(parsePtr->incomplete), &type)) - && (type != TYPE_COMMAND_END) - /* Non-whitespace follows */ - ) { + && (expPtr->start[0] == '*'))) + /* Is the prefix */ + && (numBytes > 0) && (0 == ParseWhiteSpace(termPtr, + numBytes, &parsePtr->incomplete, &type)) + && (type != TYPE_COMMAND_END) + /* Non-whitespace follows */) { expandWord = 1; parsePtr->numTokens--; goto parseWord; @@ -417,12 +415,12 @@ Tcl_ParseCommand( if (expandWord) { int i, isLiteral = 1; - /* - * When a command includes a word that is an expanded literal; - * for example, {*}{1 2 3}, the parser performs that expansion + /* + * When a command includes a word that is an expanded literal; for + * example, {*}{1 2 3}, the parser performs that expansion * immediately, generating several TCL_TOKEN_SIMPLE_WORDs instead * of a single TCL_TOKEN_EXPAND_WORD that the Tcl_ParseCommand() - * caller might have to expand. This notably makes it simpler for + * caller might have to expand. This notably makes it simpler for * those callers that wish to track line endings, such as those * that implement key parts of TIP 280. * @@ -442,12 +440,12 @@ Tcl_ParseCommand( int elemCount = 0, code = TCL_OK; const char *nextElem, *listEnd, *elemStart; - /* + /* * The word to be expanded is a literal, so determine the * boundaries of the literal string to be treated as a list - * and expanded. That literal string starts at - * tokenPtr[1].start, and includes all bytes up to, but - * not including (tokenPtr[tokenPtr->numComponents].start + + * and expanded. That literal string starts at + * tokenPtr[1].start, and includes all bytes up to, but not + * including (tokenPtr[tokenPtr->numComponents].start + * tokenPtr[tokenPtr->numComponents].size) */ @@ -455,11 +453,11 @@ Tcl_ParseCommand( tokenPtr[tokenPtr->numComponents].size); nextElem = tokenPtr[1].start; - /* - * Step through the literal string, parsing and counting - * list elements. + /* + * Step through the literal string, parsing and counting list + * elements. */ - + while (nextElem < listEnd) { code = TclFindElement(NULL, nextElem, listEnd - nextElem, &elemStart, &nextElem, NULL, NULL); @@ -470,29 +468,26 @@ Tcl_ParseCommand( } if (code != TCL_OK) { - /* - * Some list element could not be parsed. This means - * the literal string was not in fact a valid list. - * Defer the handling of this to compile/eval time, where - * code is already in place to report the "attempt to - * expand a non-list" error. + * Some list element could not be parsed. This means the + * literal string was not in fact a valid list. Defer the + * handling of this to compile/eval time, where code is + * already in place to report the "attempt to expand a + * non-list" error. */ tokenPtr->type = TCL_TOKEN_EXPAND_WORD; } else if (elemCount == 0) { - /* - * We are expanding a literal empty list. This means - * that the expanding word completely disappears, leaving - * no word generated this pass through the loop. Adjust + * We are expanding a literal empty list. This means that + * the expanding word completely disappears, leaving no + * word generated this pass through the loop. Adjust * accounting appropriately. */ parsePtr->numWords--; parsePtr->numTokens = wordIndex; } else { - /* * Recalculate the number of Tcl_Tokens needed to store * tokens representing the expanded list. @@ -508,9 +503,9 @@ Tcl_ParseCommand( /* * Generate a TCL_TOKEN_SIMPLE_WORD token sequence for * each element of the literal list we are expanding in - * place. Take care with the start and size fields of - * each token so they point to the right literal characters - * in the original script to represent the right expanded + * place. Take care with the start and size fields of each + * token so they point to the right literal characters in + * the original script to represent the right expanded * word value. */ @@ -542,8 +537,7 @@ Tcl_ParseCommand( } } } else { - - /* + /* * The word to be expanded is not a literal, so defer * expansion to compile/eval time by marking with a * TCL_TOKEN_EXPAND_WORD token. @@ -562,7 +556,7 @@ Tcl_ParseCommand( * word), and (b) check for the end of the command. */ - scanned = ParseWhiteSpace(src, numBytes, &(parsePtr->incomplete), &type); + scanned = ParseWhiteSpace(src,numBytes, &parsePtr->incomplete, &type); if (scanned) { src += scanned; numBytes -= scanned; @@ -626,7 +620,7 @@ Tcl_ParseCommand( static int ParseWhiteSpace( - CONST char *src, /* First character to parse. */ + const char *src, /* First character to parse. */ register int numBytes, /* Max number of bytes to scan. */ int *incompletePtr, /* Set this boolean memory to true if parsing * indicates an incomplete command. */ @@ -634,7 +628,7 @@ ParseWhiteSpace( * of character that ends run of whitespace */ { register char type = TYPE_NORMAL; - register CONST char *p = src; + register const char *p = src; while (1) { while (numBytes && ((type = CHAR_TYPE(*p)) & TYPE_SPACE)) { @@ -680,12 +674,12 @@ ParseWhiteSpace( int TclParseAllWhiteSpace( - CONST char *src, /* First character to parse. */ + const char *src, /* First character to parse. */ int numBytes) /* Max number of byes to scan */ { int dummy; char type; - CONST char *p = src; + const char *p = src; do { int scanned = ParseWhiteSpace(p, numBytes, &dummy, &type); @@ -720,14 +714,14 @@ TclParseAllWhiteSpace( int TclParseHex( - CONST char *src, /* First character to parse. */ + const char *src, /* First character to parse. */ int numBytes, /* Max number of byes to scan */ Tcl_UniChar *resultPtr) /* Points to storage provided by caller where * the Tcl_UniChar resulting from the * conversion is to be written. */ { Tcl_UniChar result = 0; - register CONST char *p = src; + register const char *p = src; while (numBytes--) { unsigned char digit = UCHAR(*p); @@ -775,7 +769,7 @@ TclParseHex( int TclParseBackslash( - CONST char *src, /* Points to the backslash character of a a + const char *src, /* Points to the backslash character of a a * backslash sequence. */ int numBytes, /* Max number of bytes to scan. */ int *readPtr, /* NULL, or points to storage where the number @@ -785,7 +779,7 @@ TclParseBackslash( * written. At most TCL_UTF_MAX bytes will be * written there. */ { - register CONST char *p = src+1; + register const char *p = src+1; Tcl_UniChar result; int count; char buf[TCL_UTF_MAX]; @@ -948,13 +942,14 @@ TclParseBackslash( static int ParseComment( - CONST char *src, /* First character to parse. */ + const char *src, /* First character to parse. */ register int numBytes, /* Max number of bytes to scan. */ Tcl_Parse *parsePtr) /* Information about parse in progress. * Updated if parsing indicates an incomplete * command. */ { - register CONST char *p = src; + register const char *p = src; + while (numBytes) { char type; int scanned; @@ -972,7 +967,8 @@ ParseComment( while (numBytes) { if (*p == '\\') { - scanned = ParseWhiteSpace(p, numBytes, &(parsePtr->incomplete), &type); + scanned = ParseWhiteSpace(p, numBytes, &parsePtr->incomplete, + &type); if (scanned) { p += scanned; numBytes -= scanned; @@ -1028,7 +1024,7 @@ ParseComment( static int ParseTokens( - register CONST char *src, /* First character to parse. */ + register const char *src, /* First character to parse. */ register int numBytes, /* Max number of bytes to scan. */ int mask, /* Specifies when to stop parsing. The parse * stops at the first unquoted character whose @@ -1094,8 +1090,8 @@ ParseTokens( */ varToken = parsePtr->numTokens; - if (Tcl_ParseVarName(parsePtr->interp, src, numBytes, - parsePtr, 1) != TCL_OK) { + if (Tcl_ParseVarName(parsePtr->interp, src, numBytes, parsePtr, + 1) != TCL_OK) { return TCL_ERROR; } src += parsePtr->tokenPtr[varToken].size; @@ -1123,8 +1119,8 @@ ParseTokens( nestedPtr = (Tcl_Parse *) TclStackAlloc(parsePtr->interp, sizeof(Tcl_Parse)); while (1) { - if (Tcl_ParseCommand(parsePtr->interp, src, - numBytes, 1, nestedPtr) != TCL_OK) { + if (Tcl_ParseCommand(parsePtr->interp, src, numBytes, 1, + nestedPtr) != TCL_OK) { parsePtr->errorType = nestedPtr->errorType; parsePtr->term = nestedPtr->term; parsePtr->incomplete = nestedPtr->incomplete; @@ -1141,7 +1137,8 @@ ParseTokens( * parsed command. */ - if ((nestedPtr->term < parsePtr->end) && (*(nestedPtr->term) == ']') + if ((nestedPtr->term < parsePtr->end) + && (*(nestedPtr->term) == ']') && !(nestedPtr->incomplete)) { break; } @@ -1300,13 +1297,14 @@ TclExpandTokenArray( int newCount = parsePtr->tokensAvailable*2; if (parsePtr->tokenPtr != parsePtr->staticTokens) { - parsePtr->tokenPtr = (Tcl_Token *) ckrealloc ((char *) - (parsePtr->tokenPtr), newCount * sizeof(Tcl_Token)); + parsePtr->tokenPtr = (Tcl_Token *) ckrealloc((char *) + parsePtr->tokenPtr, newCount * sizeof(Tcl_Token)); } else { - Tcl_Token *newPtr = (Tcl_Token *) ckalloc( - newCount * sizeof(Tcl_Token)); + Tcl_Token *newPtr = (Tcl_Token *) + ckalloc(newCount * sizeof(Tcl_Token)); + memcpy(newPtr, parsePtr->tokenPtr, - (size_t) (parsePtr->tokensAvailable * sizeof(Tcl_Token))); + (size_t) parsePtr->tokensAvailable * sizeof(Tcl_Token)); parsePtr->tokenPtr = newPtr; } parsePtr->tokensAvailable = newCount; @@ -1343,7 +1341,7 @@ int Tcl_ParseVarName( Tcl_Interp *interp, /* Interpreter to use for error reporting; if * NULL, then no error message is provided. */ - CONST char *start, /* Start of variable substitution string. + const char *start, /* Start of variable substitution string. * First character must be "$". */ register int numBytes, /* Total number of bytes in string. If < 0, * the string consists of all bytes up to the @@ -1356,7 +1354,7 @@ Tcl_ParseVarName( * reinitialize it. */ { Tcl_Token *tokenPtr; - register CONST char *src; + register const char *src; unsigned char c; int varIndex, offset; Tcl_UniChar ch; @@ -1379,7 +1377,7 @@ Tcl_ParseVarName( */ src = start; - if ((parsePtr->numTokens + 2) > parsePtr->tokensAvailable) { + if (parsePtr->numTokens+2 > parsePtr->tokensAvailable) { TclExpandTokenArray(parsePtr); } tokenPtr = &parsePtr->tokenPtr[parsePtr->numTokens]; @@ -1454,7 +1452,7 @@ Tcl_ParseVarName( offset = Tcl_UtfToUniChar(utfBytes, &ch); } c = UCHAR(ch); - if (isalnum(c) || (c == '_')) { /* INTL: ISO only, UCHAR. */ + if (isalnum(c) || (c == '_')) { /* INTL: ISO only, UCHAR. */ src += offset; numBytes -= offset; continue; @@ -1492,7 +1490,7 @@ Tcl_ParseVarName( TCL_SUBST_ALL, parsePtr)) { goto error; } - if ((parsePtr->term == src+numBytes) || (*parsePtr->term != ')')) { + if ((parsePtr->term == src+numBytes) || (*parsePtr->term != ')')){ if (parsePtr->interp != NULL) { Tcl_SetResult(parsePtr->interp, "missing )", TCL_STATIC); @@ -1549,18 +1547,19 @@ Tcl_ParseVarName( *---------------------------------------------------------------------- */ -CONST char * +const char * Tcl_ParseVar( - Tcl_Interp *interp, /* Context for looking up variable. */ - register CONST char *start, /* Start of variable substitution. - * First character must be "$". */ - CONST char **termPtr) /* If non-NULL, points to word to fill - * in with character just after last - * one in the variable specifier. */ + Tcl_Interp *interp, /* Context for looking up variable. */ + register const char *start, /* Start of variable substitution. First + * character must be "$". */ + const char **termPtr) /* If non-NULL, points to word to fill in with + * character just after last one in the + * variable specifier. */ { register Tcl_Obj *objPtr; int code; - Tcl_Parse *parsePtr = (Tcl_Parse *) TclStackAlloc(interp, sizeof(Tcl_Parse)); + Tcl_Parse *parsePtr = (Tcl_Parse *) + TclStackAlloc(interp, sizeof(Tcl_Parse)); if (Tcl_ParseVarName(interp, start, -1, parsePtr, 0) != TCL_OK) { TclStackFree(interp, parsePtr); @@ -1579,7 +1578,8 @@ Tcl_ParseVar( return "$"; } - code = TclSubstTokens(interp, parsePtr->tokenPtr, parsePtr->numTokens, NULL, 1); + code = TclSubstTokens(interp, parsePtr->tokenPtr, parsePtr->numTokens, + NULL, 1); TclStackFree(interp, parsePtr); if (code != TCL_OK) { return NULL; @@ -1636,7 +1636,7 @@ int Tcl_ParseBraces( Tcl_Interp *interp, /* Interpreter to use for error reporting; if * NULL, then no error message is provided. */ - CONST char *start, /* Start of string enclosed in braces. The + const char *start, /* Start of string enclosed in braces. The * first character must be {'. */ register int numBytes, /* Total number of bytes in string. If < 0, * the string consists of all bytes up to the @@ -1648,13 +1648,13 @@ Tcl_ParseBraces( * information in parsePtr; zero means ignore * existing tokens in parsePtr and * reinitialize it. */ - CONST char **termPtr) /* If non-NULL, points to word in which to + const char **termPtr) /* If non-NULL, points to word in which to * store a pointer to the character just after * the terminating '}' if the parse was * successful. */ { Tcl_Token *tokenPtr; - register CONST char *src; + register const char *src; int startIndex, level, length; if ((numBytes == 0) || (start == NULL)) { @@ -1794,10 +1794,9 @@ Tcl_ParseBraces( openBrace = 0; break; case '#' : - if (openBrace && (isspace(UCHAR(src[-1])))) { + if (openBrace && isspace(UCHAR(src[-1]))) { Tcl_AppendResult(parsePtr->interp, - ": possible unbalanced brace in comment", - (char *) NULL); + ": possible unbalanced brace in comment", NULL); goto error; } break; @@ -1842,7 +1841,7 @@ int Tcl_ParseQuotedString( Tcl_Interp *interp, /* Interpreter to use for error reporting; if * NULL, then no error message is provided. */ - CONST char *start, /* Start of the quoted string. The first + const char *start, /* Start of the quoted string. The first * character must be '"'. */ register int numBytes, /* Total number of bytes in string. If < 0, * the string consists of all bytes up to the @@ -1854,7 +1853,7 @@ Tcl_ParseQuotedString( * information in parsePtr; zero means ignore * existing tokens in parsePtr and * reinitialize it. */ - CONST char **termPtr) /* If non-NULL, points to word in which to + const char **termPtr) /* If non-NULL, points to word in which to * store a pointer to the character just after * the quoted string's terminating close-quote * if the parse succeeds. */ @@ -1870,8 +1869,8 @@ Tcl_ParseQuotedString( TclParseInit(interp, start, numBytes, parsePtr); } - if (TCL_OK != ParseTokens(start+1, numBytes-1, TYPE_QUOTE, - TCL_SUBST_ALL, parsePtr)) { + if (TCL_OK != ParseTokens(start+1, numBytes-1, TYPE_QUOTE, TCL_SUBST_ALL, + parsePtr)) { goto error; } if (*parsePtr->term != '"') { @@ -1919,10 +1918,10 @@ Tcl_SubstObj( { int length, tokensLeft, code; Tcl_Token *endTokenPtr; - Tcl_Obj *result; - Tcl_Obj *errMsg = NULL; + Tcl_Obj *result, *errMsg = NULL; CONST char *p = TclGetStringFromObj(objPtr, &length); - Tcl_Parse *parsePtr = (Tcl_Parse *) TclStackAlloc(interp, sizeof(Tcl_Parse)); + Tcl_Parse *parsePtr = (Tcl_Parse *) + TclStackAlloc(interp, sizeof(Tcl_Parse)); TclParseInit(interp, p, length, parsePtr); @@ -2036,9 +2035,9 @@ Tcl_SubstObj( */ Tcl_Token *tokenPtr; - CONST char *lastTerm = parsePtr->term; - Tcl_Parse *nestedPtr = - (Tcl_Parse *) TclStackAlloc(interp, sizeof(Tcl_Parse)); + const char *lastTerm = parsePtr->term; + Tcl_Parse *nestedPtr = (Tcl_Parse *) + TclStackAlloc(interp, sizeof(Tcl_Parse)); while (TCL_OK == Tcl_ParseCommand(NULL, p, length, 0, nestedPtr)) { @@ -2178,7 +2177,7 @@ TclSubstTokens( int *tokensLeftPtr, /* If not NULL, points to memory where an * integer representing the number of tokens * left to be substituted will be written */ - int line) /* The line the script starts on. */ + int line) /* The line the script starts on. */ { Tcl_Obj *result; int code = TCL_OK; @@ -2196,7 +2195,7 @@ TclSubstTokens( result = NULL; for (; count>0 && code==TCL_OK ; count--, tokenPtr++) { Tcl_Obj *appendObj = NULL; - CONST char *append = NULL; + const char *append = NULL; int appendByteLength = 0; char utfCharBytes[TCL_UTF_MAX]; @@ -2207,7 +2206,7 @@ TclSubstTokens( break; case TCL_TOKEN_BS: - appendByteLength = Tcl_UtfBackslash(tokenPtr->start, (int *) NULL, + appendByteLength = Tcl_UtfBackslash(tokenPtr->start, NULL, utfCharBytes); append = utfCharBytes; break; @@ -2354,19 +2353,18 @@ TclSubstTokens( *---------------------------------------------------------------------- */ -static int +static inline int CommandComplete( - CONST char *script, /* Script to check. */ + const char *script, /* Script to check. */ int numBytes) /* Number of bytes in script. */ { Tcl_Parse parse; - CONST char *p, *end; + const char *p, *end; int result; p = script; end = p + numBytes; - while (Tcl_ParseCommand((Tcl_Interp *) NULL, p, end - p, 0, &parse) - == TCL_OK) { + while (Tcl_ParseCommand(NULL, p, end - p, 0, &parse) == TCL_OK) { p = parse.commandStart + parse.commandSize; if (p >= end) { break; @@ -2404,7 +2402,7 @@ CommandComplete( int Tcl_CommandComplete( - CONST char *script) /* Script to check. */ + const char *script) /* Script to check. */ { return CommandComplete(script, (int) strlen(script)); } @@ -2432,10 +2430,9 @@ TclObjCommandComplete( Tcl_Obj *objPtr) /* Points to object holding script to * check. */ { - CONST char *script; int length; + const char *script = Tcl_GetStringFromObj(objPtr, &length); - script = TclGetStringFromObj(objPtr, &length); return CommandComplete(script, length); } @@ -2458,11 +2455,11 @@ TclObjCommandComplete( int TclIsLocalScalar( - CONST char *src, + const char *src, int len) { - CONST char *p; - CONST char *lastChar = src + (len - 1); + const char *p; + const char *lastChar = src + (len - 1); for (p=src ; p<=lastChar ; p++) { if ((CHAR_TYPE(*p) != TYPE_NORMAL) && @@ -2476,11 +2473,11 @@ TclIsLocalScalar( return 0; } if (*p == '(') { - if (*lastChar == ')') { /* we have an array element */ + if (*lastChar == ')') { /* We have an array element */ return 0; } } else if (*p == ':') { - if ((p != lastChar) && *(p+1) == ':') { /* qualified name */ + if ((p != lastChar) && *(p+1) == ':') { /* qualified name */ return 0; } } diff --git a/generic/tclPathObj.c b/generic/tclPathObj.c index b86c728..f0aa398 100644 --- a/generic/tclPathObj.c +++ b/generic/tclPathObj.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclPathObj.c,v 1.63 2007/05/02 21:30:36 kennykb Exp $ + * RCS: @(#) $Id: tclPathObj.c,v 1.64 2007/11/18 22:31:09 dkf Exp $ */ #include "tclInt.h" @@ -1332,7 +1332,7 @@ TclFSMakePathRelative( if (interp != NULL) { Tcl_ResetResult(interp); Tcl_AppendResult(interp, "can't find object" - "string representation", (char *) NULL); + "string representation", NULL); } return NULL; } @@ -1454,7 +1454,7 @@ TclFSMakePathFromNormalized( if (interp != NULL) { Tcl_ResetResult(interp); Tcl_AppendResult(interp, "can't find object" - "string representation", (char *) NULL); + "string representation", NULL); } return TCL_ERROR; } @@ -2326,7 +2326,7 @@ SetFsPathFromAny( if (interp) { Tcl_ResetResult(interp); Tcl_AppendResult(interp, "couldn't find HOME environment " - "variable to expand path", (char *) NULL); + "variable to expand path", NULL); } return TCL_ERROR; } @@ -2342,8 +2342,8 @@ SetFsPathFromAny( if (TclpGetUserHome(name+1, &temp) == NULL) { if (interp != NULL) { Tcl_ResetResult(interp); - Tcl_AppendResult(interp, "user \"", (name+1), - "\" doesn't exist", (char *) NULL); + Tcl_AppendResult(interp, "user \"", name+1, + "\" doesn't exist", NULL); } Tcl_DStringFree(&temp); if (split != len) { diff --git a/generic/tclPkg.c b/generic/tclPkg.c index 8d30b08..abc0070 100644 --- a/generic/tclPkg.c +++ b/generic/tclPkg.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclPkg.c,v 1.31 2007/09/19 15:29:21 dgp Exp $ + * RCS: @(#) $Id: tclPkg.c,v 1.32 2007/11/18 22:30:10 dkf Exp $ * * TIP #268. * Heavily rewritten to handle the extend version numbers, and extended @@ -44,8 +44,8 @@ typedef struct PkgAvail { typedef struct Package { char *version; /* Version that has been supplied in this * interpreter via "package provide" - * (malloc'ed). NULL means the package - * doesn't exist in this interpreter yet. */ + * (malloc'ed). NULL means the package doesn't + * exist in this interpreter yet. */ PkgAvail *availPtr; /* First in list of all available versions of * this package. */ ClientData clientData; /* Client data. */ @@ -56,23 +56,23 @@ typedef struct Package { */ static int CheckVersionAndConvert(Tcl_Interp *interp, - CONST char *string, char **internal, int *stable); + const char *string, char **internal, int *stable); static int CompareVersions(char *v1i, char *v2i, int *isMajorPtr); static int CheckRequirement(Tcl_Interp *interp, - CONST char *string); + const char *string); static int CheckAllRequirements(Tcl_Interp *interp, int reqc, - Tcl_Obj *CONST reqv[]); -static int RequirementSatisfied(char *havei, CONST char *req); + Tcl_Obj *const reqv[]); +static int RequirementSatisfied(char *havei, const char *req); static int SomeRequirementSatisfied(char *havei, int reqc, - Tcl_Obj *CONST reqv[]); + Tcl_Obj *const reqv[]); static void AddRequirementsToResult(Tcl_Interp *interp, int reqc, - Tcl_Obj *CONST reqv[]); + Tcl_Obj *const reqv[]); static void AddRequirementsToDString(Tcl_DString *dstring, - int reqc, Tcl_Obj *CONST reqv[]); -static Package * FindPackage(Tcl_Interp *interp, CONST char *name); -static const char * PkgRequireCore(Tcl_Interp *interp, CONST char *name, - int reqc, Tcl_Obj *CONST reqv[], + int reqc, Tcl_Obj *const reqv[]); +static Package * FindPackage(Tcl_Interp *interp, const char *name); +static const char * PkgRequireCore(Tcl_Interp *interp, const char *name, + int reqc, Tcl_Obj *const reqv[], ClientData *clientDataPtr); /* @@ -112,8 +112,8 @@ int Tcl_PkgProvide( Tcl_Interp *interp, /* Interpreter in which package is now * available. */ - CONST char *name, /* Name of package. */ - CONST char *version) /* Version string for package. */ + const char *name, /* Name of package. */ + const char *version) /* Version string for package. */ { return Tcl_PkgProvideEx(interp, name, version, NULL); } @@ -122,8 +122,8 @@ int Tcl_PkgProvideEx( Tcl_Interp *interp, /* Interpreter in which package is now * available. */ - CONST char *name, /* Name of package. */ - CONST char *version, /* Version string for package. */ + const char *name, /* Name of package. */ + const char *version, /* Version string for package. */ ClientData clientData) /* clientdata for this package (normally used * for C callback function table) */ { @@ -188,12 +188,12 @@ Tcl_PkgProvideEx( *---------------------------------------------------------------------- */ -CONST char * +const char * Tcl_PkgRequire( Tcl_Interp *interp, /* Interpreter in which package is now * available. */ - CONST char *name, /* Name of desired package. */ - CONST char *version, /* Version string for desired version; NULL + const char *name, /* Name of desired package. */ + const char *version, /* Version string for desired version; NULL * means use the latest version available. */ int exact) /* Non-zero means that only the particular * version given is acceptable. Zero means use @@ -202,12 +202,12 @@ Tcl_PkgRequire( return Tcl_PkgRequireEx(interp, name, version, exact, NULL); } -CONST char * +const char * Tcl_PkgRequireEx( Tcl_Interp *interp, /* Interpreter in which package is now * available. */ - CONST char *name, /* Name of desired package. */ - CONST char *version, /* Version string for desired version; NULL + const char *name, /* Name of desired package. */ + const char *version, /* Version string for desired version; NULL * means use the latest version available. */ int exact, /* Non-zero means that only the particular * version given is acceptable. Zero means use @@ -291,12 +291,14 @@ Tcl_PkgRequireEx( return NULL; } - /* Translate between old and new API, and defer to the new function. */ + /* + * Translate between old and new API, and defer to the new function. + */ if (version == NULL) { result = PkgRequireCore(interp, name, 0, NULL, clientDataPtr); } else { - if (exact && TCL_OK + if (exact && TCL_OK != CheckVersionAndConvert(interp, version, NULL, NULL)) { return NULL; } @@ -316,10 +318,10 @@ int Tcl_PkgRequireProc( Tcl_Interp *interp, /* Interpreter in which package is now * available. */ - CONST char *name, /* Name of desired package. */ + const char *name, /* Name of desired package. */ int reqc, /* Requirements constraining the desired * version. */ - Tcl_Obj *CONST reqv[], /* 0 means to use the latest version + Tcl_Obj *const reqv[], /* 0 means to use the latest version * available. */ ClientData *clientDataPtr) { @@ -337,10 +339,10 @@ static const char * PkgRequireCore( Tcl_Interp *interp, /* Interpreter in which package is now * available. */ - CONST char *name, /* Name of desired package. */ + const char *name, /* Name of desired package. */ int reqc, /* Requirements constraining the desired * version. */ - Tcl_Obj *CONST reqv[], /* 0 means to use the latest version + Tcl_Obj *const reqv[], /* 0 means to use the latest version * available. */ ClientData *clientDataPtr) { @@ -349,11 +351,9 @@ PkgRequireCore( PkgAvail *availPtr, *bestPtr, *bestStablePtr; char *availVersion, *bestVersion; /* Internal rep. of versions */ - int availStable; - char *script; - int code, satisfies, pass; + int availStable, code, satisfies, pass; + char *script, *pkgVersionI; Tcl_DString command; - char *pkgVersionI; /* * It can take up to three passes to find the package: one pass to run the @@ -368,9 +368,9 @@ PkgRequireCore( break; } - /* - * Check whether we're already attempting to load some version - * of this package (circular dependency detection). + /* + * Check whether we're already attempting to load some version of this + * package (circular dependency detection). */ if (pkgPtr->clientData != NULL) { @@ -408,7 +408,10 @@ PkgRequireCore( if (bestPtr != NULL) { int res = CompareVersions(availVersion, bestVersion, NULL); - /* Note: Use internal reps! */ + /* + * Note: Use internal reps! + */ + if (res <= 0) { /* * The version of the package sought is not as good as the @@ -474,7 +477,7 @@ PkgRequireCore( * will still exist when the script completes. */ - CONST char *versionToProvide = bestPtr->version; + const char *versionToProvide = bestPtr->version; script = bestPtr->script; pkgPtr->clientData = (ClientData) versionToProvide; @@ -494,7 +497,6 @@ PkgRequireCore( " provided", NULL); } else { char *pvi, *vi; - int res; if (CheckVersionAndConvert(interp, pkgPtr->version, &pvi, NULL) != TCL_OK) { @@ -504,10 +506,10 @@ PkgRequireCore( ckfree(pvi); code = TCL_ERROR; } else { - res = CompareVersions(pvi, vi, NULL); + int res = CompareVersions(pvi, vi, NULL); + ckfree(pvi); ckfree(vi); - if (res != 0) { code = TCL_ERROR; Tcl_AppendResult(interp, @@ -520,10 +522,11 @@ PkgRequireCore( } } else if (code != TCL_ERROR) { Tcl_Obj *codePtr = Tcl_NewIntObj(code); + Tcl_ResetResult(interp); - Tcl_AppendResult(interp, "attempt to provide package ", - name, " ", versionToProvide, " failed: " - "bad return code: ", TclGetString(codePtr), NULL); + Tcl_AppendResult(interp, "attempt to provide package ", name, + " ", versionToProvide, " failed: bad return code: ", + TclGetString(codePtr), NULL); TclDecrRefCount(codePtr); code = TCL_ERROR; } @@ -650,12 +653,12 @@ PkgRequireCore( *---------------------------------------------------------------------- */ -CONST char * +const char * Tcl_PkgPresent( Tcl_Interp *interp, /* Interpreter in which package is now * available. */ - CONST char *name, /* Name of desired package. */ - CONST char *version, /* Version string for desired version; NULL + const char *name, /* Name of desired package. */ + const char *version, /* Version string for desired version; NULL * means use the latest version available. */ int exact) /* Non-zero means that only the particular * version given is acceptable. Zero means use @@ -664,12 +667,12 @@ Tcl_PkgPresent( return Tcl_PkgPresentEx(interp, name, version, exact, NULL); } -CONST char * +const char * Tcl_PkgPresentEx( Tcl_Interp *interp, /* Interpreter in which package is now * available. */ - CONST char *name, /* Name of desired package. */ - CONST char *version, /* Version string for desired version; NULL + const char *name, /* Name of desired package. */ + const char *version, /* Version string for desired version; NULL * means use the latest version available. */ int exact, /* Non-zero means that only the particular * version given is acceptable. Zero means use @@ -731,9 +734,9 @@ Tcl_PackageObjCmd( ClientData dummy, /* Not used. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *CONST objv[]) /* Argument objects. */ + Tcl_Obj *const objv[]) /* Argument objects. */ { - static CONST char *pkgOptions[] = { + static const char *pkgOptions[] = { "forget", "ifneeded", "names", "prefer", "present", "provide", "require", "unknown", "vcompare", "versions", "vsatisfies", NULL @@ -750,7 +753,7 @@ Tcl_PackageObjCmd( Tcl_HashEntry *hPtr; Tcl_HashSearch search; Tcl_HashTable *tablePtr; - CONST char *version; + const char *version; char *argv2, *argv3, *argv4, *iva = NULL, *ivb = NULL; if (objc < 2) { @@ -815,7 +818,6 @@ Tcl_PackageObjCmd( for (availPtr = pkgPtr->availPtr, prevPtr = NULL; availPtr != NULL; prevPtr = availPtr, availPtr = availPtr->nextPtr) { - if (CheckVersionAndConvert(interp, availPtr->version, &avi, NULL) != TCL_OK) { ckfree(argv3i); @@ -1007,7 +1009,7 @@ Tcl_PackageObjCmd( break; } case PKG_PREFER: { - static CONST char *pkgPreferOptions[] = { + static const char *pkgPreferOptions[] = { "latest", "stable", NULL }; @@ -1137,7 +1139,7 @@ Tcl_PackageObjCmd( static Package * FindPackage( Tcl_Interp *interp, /* Interpreter to use for package lookup. */ - CONST char *name) /* Name of package to fine. */ + const char *name) /* Name of package to fine. */ { Interp *iPtr = (Interp *) interp; Tcl_HashEntry *hPtr; @@ -1227,13 +1229,13 @@ TclFreePackageInfo( static int CheckVersionAndConvert( Tcl_Interp *interp, /* Used for error reporting. */ - CONST char *string, /* Supposedly a version number, which is + const char *string, /* Supposedly a version number, which is * groups of decimal digits separated by * dots. */ char **internal, /* Internal normalized representation */ int *stable) /* Flag: Version is (un)stable. */ { - CONST char *p = string; + const char *p = string; char prevChar; int hasunstable = 0; /* @@ -1481,7 +1483,10 @@ CompareVersions( if (*s1 != 0) { s1++; } else if (*s2 == 0) { - /* s1, s2 both at the end => identical */ + /* + * s1, s2 both at the end => identical + */ + res = 0; break; } @@ -1520,7 +1525,7 @@ static int CheckAllRequirements( Tcl_Interp *interp, int reqc, /* Requirements to check. */ - Tcl_Obj *CONST reqv[]) + Tcl_Obj *const reqv[]) { int i; @@ -1553,7 +1558,7 @@ CheckAllRequirements( static int CheckRequirement( Tcl_Interp *interp, /* Used for error reporting. */ - CONST char *string) /* Supposedly a requirement. */ + const char *string) /* Supposedly a requirement. */ { /* * Syntax of requirement = version @@ -1566,7 +1571,7 @@ CheckRequirement( dash = strchr(string, '-'); if (dash == NULL) { /* - * no dash found, has to be a simple version. + * No dash found, has to be a simple version. */ return CheckVersionAndConvert(interp, string, NULL, NULL); @@ -1585,7 +1590,8 @@ CheckRequirement( /* * Exactly one dash is present. Copy the string, split at the location of * dash and check that both parts are versions. Note that the max part can - * be empty. + * be empty. Also note that the string allocated with strdup() must be + * freed with free() and not ckfree(). */ DupString(buf, string); @@ -1625,7 +1631,7 @@ AddRequirementsToResult( Tcl_Interp *interp, int reqc, /* Requirements constraining the desired * version. */ - Tcl_Obj *CONST reqv[]) /* 0 means to use the latest version + Tcl_Obj *const reqv[]) /* 0 means to use the latest version * available. */ { if (reqc > 0) { @@ -1666,7 +1672,7 @@ AddRequirementsToDString( Tcl_DString *dsPtr, int reqc, /* Requirements constraining the desired * version. */ - Tcl_Obj *CONST reqv[]) /* 0 means to use the latest version + Tcl_Obj *const reqv[]) /* 0 means to use the latest version * available. */ { if (reqc > 0) { @@ -1706,7 +1712,7 @@ SomeRequirementSatisfied( * requirements. */ int reqc, /* Requirements constraining the desired * version. */ - Tcl_Obj *CONST reqv[]) /* 0 means to use the latest version + Tcl_Obj *const reqv[]) /* 0 means to use the latest version * available. */ { int i; @@ -1741,7 +1747,7 @@ static int RequirementSatisfied( char *havei, /* Version string, of candidate package we * have. */ - CONST char *req) /* Requirement string the candidate has to + const char *req) /* Requirement string the candidate has to * satisfy. */ { /* @@ -1839,16 +1845,16 @@ RequirementSatisfied( *---------------------------------------------------------------------- */ -CONST char * +const char * Tcl_PkgInitStubsCheck( Tcl_Interp *interp, - CONST char * version, + const char * version, int exact) { - CONST char *actualVersion = Tcl_PkgPresent(interp, "Tcl", version, 0); + const char *actualVersion = Tcl_PkgPresent(interp, "Tcl", version, 0); if (exact && actualVersion) { - CONST char *p = version; + const char *p = version; int count = 0; while (*p) { diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c index dc19855..a719556 100755 --- a/generic/tclStrToD.c +++ b/generic/tclStrToD.c @@ -9,12 +9,12 @@ * into strings of digits, and procedures for interconversion among * 'double' and 'mp_int' types. * - * Copyright (c) 2005 by Kevin B. Kenny. All rights reserved. + * Copyright (c) 2005 by Kevin B. Kenny. All rights reserved. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclStrToD.c,v 1.30 2007/04/23 17:34:07 kennykb Exp $ + * RCS: @(#) $Id: tclStrToD.c,v 1.31 2007/11/18 22:30:10 dkf Exp $ * *---------------------------------------------------------------------- */ @@ -146,22 +146,21 @@ static double SafeLdExp(double fraction, int exponent); * * TclParseNumber -- * - * Scans bytes, interpreted as characters in Tcl's internal encoding, - * and parses the longest prefix that is the string representation of - * a number in a format recognized by Tcl. + * Scans bytes, interpreted as characters in Tcl's internal encoding, and + * parses the longest prefix that is the string representation of a + * number in a format recognized by Tcl. * * The arguments bytes, numBytes, and objPtr are the inputs which - * determine the string to be parsed. If bytes is non-NULL, it - * points to the first byte to be scanned. If bytes is NULL, then objPtr - * must be non-NULL, and the string representation of objPtr will be - * scanned (generated first, if necessary). The numBytes argument - * determines the number of bytes to be scanned. If numBytes is - * negative, the first NUL byte encountered will terminate the scan. - * If numBytes is non-negative, then no more than numBytes bytes will - * be scanned. + * determine the string to be parsed. If bytes is non-NULL, it points to + * the first byte to be scanned. If bytes is NULL, then objPtr must be + * non-NULL, and the string representation of objPtr will be scanned + * (generated first, if necessary). The numBytes argument determines the + * number of bytes to be scanned. If numBytes is negative, the first NUL + * byte encountered will terminate the scan. If numBytes is non-negative, + * then no more than numBytes bytes will be scanned. * * The argument flags is an input that controls the numeric formats - * recognized by the parser. The flag bits are: + * recognized by the parser. The flag bits are: * * - TCL_PARSE_INTEGER_ONLY: accept only integer values; reject * strings that denote floating point values (or accept only the @@ -170,70 +169,72 @@ static double SafeLdExp(double fraction, int exponent); * not part of the [scan] command's vocabulary. Use only in * combination with TCL_PARSE_INTEGER_ONLY. * - TCL_PARSE_OCTAL_ONLY: parse only in the octal format, whether - * or not a prefix is present that would lead to octal parsing. Use - * only in combination with TCL_PARSE_INTEGER_ONLY. + * or not a prefix is present that would lead to octal parsing. + * Use only in combination with TCL_PARSE_INTEGER_ONLY. * - TCL_PARSE_HEXADECIMAL_ONLY: parse only in the hexadecimal format, * whether or not a prefix is present that would lead to * hexadecimal parsing. Use only in combination with * TCL_PARSE_INTEGER_ONLY. * - TCL_PARSE_DECIMAL_ONLY: parse only in the decimal format, no - * matter whether a 0 prefix would normally force a different base. + * matter whether a 0 prefix would normally force a different + * base. * - TCL_PARSE_NO_WHITESPACE: reject any leading/trailing whitespace * - * The arguments interp and expected are inputs that control error message - * generation. If interp is NULL, no error message will be generated. - * If interp is non-NULL, then expected must also be non-NULL. When - * TCL_ERROR is returned, an error message will be left in the result - * of interp, and the expected argument will appear in the error message - * as the thing TclParseNumber expected, but failed to find in the string. + * The arguments interp and expected are inputs that control error + * message generation. If interp is NULL, no error message will be + * generated. If interp is non-NULL, then expected must also be non-NULL. + * When TCL_ERROR is returned, an error message will be left in the + * result of interp, and the expected argument will appear in the error + * message as the thing TclParseNumber expected, but failed to find in + * the string. * * The arguments objPtr and endPtrPtr as well as the return code are the * outputs. * * When the parser cannot find any prefix of the string that matches a * format it is looking for, TCL_ERROR is returned and an error message - * may be generated and returned as described above. The contents of - * objPtr will not be changed. If endPtrPtr is non-NULL, a pointer to - * the character in the string that terminated the scan will be written - * to *endPtrPtr. - * - * When the parser determines that the entire string matches a format - * it is looking for, TCL_OK is returned, and if objPtr is non-NULL, - * then the internal rep and Tcl_ObjType of objPtr are set to the - * "canonical" numeric value that matches the scanned string. If - * endPtrPtr is non-NULL, a pointer to the end of the string will be - * written to *endPtrPtr (that is, either bytes+numBytes or a pointer - * to a terminating NUL byte). - * - * When the parser determines that a partial string matches a format - * it is looking for, the value of endPtrPtr determines what happens: + * may be generated and returned as described above. The contents of + * objPtr will not be changed. If endPtrPtr is non-NULL, a pointer to the + * character in the string that terminated the scan will be written to + * *endPtrPtr. + * + * When the parser determines that the entire string matches a format it + * is looking for, TCL_OK is returned, and if objPtr is non-NULL, then + * the internal rep and Tcl_ObjType of objPtr are set to the "canonical" + * numeric value that matches the scanned string. If endPtrPtr is not + * NULL, a pointer to the end of the string will be written to *endPtrPtr + * (that is, either bytes+numBytes or a pointer to a terminating NUL + * byte). + * + * When the parser determines that a partial string matches a format it + * is looking for, the value of endPtrPtr determines what happens: * * - If endPtrPtr is NULL, then TCL_ERROR is returned, with error message * generation as above. * * - If endPtrPtr is non-NULL, then TCL_OK is returned and objPtr - * internals are set as above. Also, a pointer to the first - * character following the parsed numeric string is written - * to *endPtrPtr. + * internals are set as above. Also, a pointer to the first + * character following the parsed numeric string is written to + * *endPtrPtr. * * In some cases where the string being scanned is the string rep of - * objPtr, this routine can leave objPtr in an inconsistent state - * where its string rep and its internal rep do not agree. In these - * cases the internal rep will be in agreement with only some substring - * of the string rep. This might happen if the caller passes in a - * non-NULL bytes value that points somewhere into the string rep. It - * might happen if the caller passes in a numBytes value that limits the - * scan to only a prefix of the string rep. Or it might happen if a - * non-NULL value of endPtrPtr permits a TCL_OK return from only a partial - * string match. It is the responsibility of the caller to detect and - * correct such inconsistencies when they can and do arise. + * objPtr, this routine can leave objPtr in an inconsistent state where + * its string rep and its internal rep do not agree. In these cases the + * internal rep will be in agreement with only some substring of the + * string rep. This might happen if the caller passes in a non-NULL bytes + * value that points somewhere into the string rep. It might happen if + * the caller passes in a numBytes value that limits the scan to only a + * prefix of the string rep. Or it might happen if a non-NULL value of + * endPtrPtr permits a TCL_OK return from only a partial string match. It + * is the responsibility of the caller to detect and correct such + * inconsistencies when they can and do arise. * * Results: * Returns a standard Tcl result. * * Side effects: * The string representaton of objPtr may be generated. - * + * * The internal representation and Tcl_ObjType of objPtr may be changed. * This may involve allocation and/or freeing of memory. * @@ -242,21 +243,23 @@ static double SafeLdExp(double fraction, int exponent); int TclParseNumber( - Tcl_Interp *interp, /* Used for error reporting. May be NULL */ - Tcl_Obj *objPtr, /* Object to receive the internal rep */ - const char *expected, /* Description of the type of number the caller - * expects to be able to parse ("integer", - * "boolean value", etc.). */ - const char *bytes, /* Pointer to the start of the string to scan */ - int numBytes, /* Maximum number of bytes to scan, see above */ + Tcl_Interp *interp, /* Used for error reporting. May be NULL. */ + Tcl_Obj *objPtr, /* Object to receive the internal rep. */ + const char *expected, /* Description of the type of number the + * caller expects to be able to parse + * ("integer", "boolean value", etc.). */ + const char *bytes, /* Pointer to the start of the string to + * scan. */ + int numBytes, /* Maximum number of bytes to scan, see + * above. */ const char **endPtrPtr, /* Place to store pointer to the character - * that terminated the scan */ - int flags) /* Flags governing the parse */ + * that terminated the scan. */ + int flags) /* Flags governing the parse. */ { enum State { - INITIAL, SIGNUM, ZERO, ZERO_X, + INITIAL, SIGNUM, ZERO, ZERO_X, ZERO_O, ZERO_B, BINARY, - HEXADECIMAL, OCTAL, BAD_OCTAL, DECIMAL, + HEXADECIMAL, OCTAL, BAD_OCTAL, DECIMAL, LEADING_RADIX_POINT, FRACTION, EXPONENT_START, EXPONENT_SIGNUM, EXPONENT, sI, sIN, sINF, sINFI, sINFIN, sINFINI, sINFINIT, sINFINITY @@ -306,7 +309,7 @@ TclParseNumber( #define ALL_BITS (~(Tcl_WideUInt)0) #define MOST_BITS (ALL_BITS >> 1) - /* + /* * Initialize bytes to start of the object's string rep if the caller * didn't pass anything else. */ @@ -341,9 +344,9 @@ TclParseNumber( signum = 1; state = SIGNUM; break; - } + } /* FALLTHROUGH */ - + case SIGNUM: /* * Scanned a leading + or -. Acceptable characters are digits, @@ -449,10 +452,11 @@ TclParseNumber( * too large shifts first. */ - if ((octalSignificandWide != 0) - && (((size_t)shift >= CHAR_BIT*sizeof(Tcl_WideUInt)) - || (octalSignificandWide - > (~(Tcl_WideUInt)0 >> shift)))) { + if ((octalSignificandWide != 0) + && (((size_t)shift >= + CHAR_BIT*sizeof(Tcl_WideUInt)) + || (octalSignificandWide > + (~(Tcl_WideUInt)0 >> shift)))) { octalSignificandOverflow = 1; TclBNInitBignumFromWideUInt(&octalSignificandBig, octalSignificandWide); @@ -482,8 +486,7 @@ TclParseNumber( case BAD_OCTAL: if (explicitOctal) { /* - * No forgiveness for bad digits in explicitly octal - * numbers. + * No forgiveness for bad digits in explicitly octal numbers. */ goto endgame; @@ -528,7 +531,7 @@ TclParseNumber( } else if (c == 'E' || c == 'e') { state = EXPONENT_START; break; - } + } #endif goto endgame; @@ -646,8 +649,8 @@ TclParseNumber( } else if (isdigit(UCHAR(c))) { if (objPtr != NULL) { significandOverflow = AccumulateDecimalDigit( - (unsigned)(c - '0'), numTrailZeros, - &significandWide, &significandBig, + (unsigned)(c - '0'), numTrailZeros, + &significandWide, &significandBig, significandOverflow); } numSigDigs += numTrailZeros+1; @@ -665,7 +668,7 @@ TclParseNumber( } goto endgame; - /* + /* * Found a decimal point. If no digits have yet been scanned, E is * not allowed; otherwise, it introduces the exponent. If at least * one digit has been found, we have a possible complete number. @@ -691,8 +694,8 @@ TclParseNumber( ++numDigitsAfterDp; if (objPtr != NULL) { significandOverflow = AccumulateDecimalDigit( - (unsigned)(c-'0'), numTrailZeros, - &significandWide, &significandBig, + (unsigned)(c-'0'), numTrailZeros, + &significandWide, &significandBig, significandOverflow); } if (numSigDigs != 0) { @@ -707,7 +710,7 @@ TclParseNumber( goto endgame; case EXPONENT_START: - /* + /* * Scanned the E at the start of an exponent. Make sure a legal * character follows before using the C library strtol routine, * which allows whitespace. @@ -737,7 +740,7 @@ TclParseNumber( goto endgame; case EXPONENT: - /* + /* * Found an exponent with at least one digit. Accumulate it, * making sure to hard-pin it to LONG_MAX on overflow. */ @@ -765,13 +768,13 @@ TclParseNumber( if (c == 'n' || c == 'N') { state = sIN; break; - } + } goto endgame; case sIN: if (c == 'f' || c == 'F') { state = sINF; break; - } + } goto endgame; case sINF: acceptState = state; @@ -868,23 +871,32 @@ TclParseNumber( acceptLen = len; goto endgame; } - ++p; + ++p; --len; } endgame: if (acceptState == INITIAL) { - /* No numeric string at all found */ + /* + * No numeric string at all found. + */ + status = TCL_ERROR; if (endPtrPtr != NULL) { *endPtrPtr = p; } } else { - /* Back up to the last accepting state in the lexer. */ + /* + * Back up to the last accepting state in the lexer. + */ + p = acceptPoint; len = acceptLen; if (!(flags & TCL_PARSE_NO_WHITESPACE)) { - /* Accept trailing whitespace */ + /* + * Accept trailing whitespace. + */ + while (len != 0 && isspace(UCHAR(*p))) { ++p; --len; @@ -987,7 +999,7 @@ TclParseNumber( } } if (!octalSignificandOverflow) { - if (octalSignificandWide > + if (octalSignificandWide > (Tcl_WideUInt)(((~(unsigned long)0) >> 1) + signum)) { #ifndef NO_WIDE_TYPE if (octalSignificandWide <= (MOST_BITS + signum)) { @@ -1021,7 +1033,7 @@ TclParseNumber( mp_neg(&octalSignificandBig, &octalSignificandBig); } TclSetBignumIntRep(objPtr, &octalSignificandBig); - } + } break; case ZERO: @@ -1034,7 +1046,7 @@ TclParseNumber( } returnInteger: if (!significandOverflow) { - if (significandWide > + if (significandWide > (Tcl_WideUInt)(((~(unsigned long)0) >> 1) + signum)) { #ifndef NO_WIDE_TYPE if (significandWide <= MOST_BITS+signum) { @@ -1194,6 +1206,7 @@ AccumulateDecimalDigit( /* * There's no need to multiply if the multiplicand is zero. */ + *wideRepPtr = digit; return 0; } else if (numZeros >= maxpow10_wide @@ -1202,7 +1215,7 @@ AccumulateDecimalDigit( * Wide multiplication will overflow. Expand the * number to a bignum and fall through into the bignum case. */ - + TclBNInitBignumFromWideUInt (bignumRepPtr, w); } else { /* @@ -1226,7 +1239,7 @@ AccumulateDecimalDigit( bignumRepPtr); mp_add_d(bignumRepPtr, (mp_digit) digit, bignumRepPtr); } else { - /* + /* * More than single digit multiplication. Multiply by the appropriate * small powers of 5, and then shift. Large strings of zeroes are * eaten 256 at a time; this is less efficient than it could be, but @@ -1304,7 +1317,7 @@ MakeLowPrecisionDouble( if (numSigDigs <= DBL_DIG) { if (exponent >= 0) { if (exponent <= mmaxpow) { - /* + /* * The significand is an exact integer, and so is * 10**exponent. The product will be correct to within 1/2 ulp * without special handling. @@ -1315,7 +1328,7 @@ MakeLowPrecisionDouble( } else { int diff = DBL_DIG - numSigDigs; if (exponent-diff <= mmaxpow) { - /* + /* * 10**exponent is not an exact integer, but * 10**(exponent-diff) is exact, and so is * significand*10**diff, so we can still compute the value @@ -1330,7 +1343,7 @@ MakeLowPrecisionDouble( } } else { if (exponent >= -mmaxpow) { - /* + /* * 10**-exponent is an exact integer, and so is the * significand. Compute the result by one division, again with * only one rounding. @@ -1351,7 +1364,7 @@ MakeLowPrecisionDouble( retval = MakeHighPrecisionDouble(0, &significandBig, numSigDigs, exponent); mp_clear(&significandBig); - + /* * Come here to return the computed value. */ @@ -1428,7 +1441,7 @@ MakeHighPrecisionDouble( goto returnValue; } - /* + /* * Develop a first approximation to the significand. It is tempting simply * to force bignum to double, but that will overflow on input numbers like * 1.[string repeat 0 1000]1; while this is a not terribly likely @@ -1448,7 +1461,7 @@ MakeHighPrecisionDouble( retval = tiny; } - /* + /* * Refine the result twice. (The second refinement should be necessary * only if the best approximation is a power of 2 minus 1/2 ulp). */ @@ -1585,7 +1598,7 @@ RefineApproximation( } } - /* + /* * The floating point number is significand*2**binExponent. Compute the * large integer significand*2**(binExponent+M2+1). The 2**-1 bit of the * significand (the most significant) corresponds to the @@ -1610,8 +1623,8 @@ RefineApproximation( mp_mul(&twoMv, pow5+i, &twoMv); } } - - /* + + /* * Collect the decimal significand as a high precision integer. The least * significant bit corresponds to bit M2+exponent+1 so it will need to be * shifted left by that many bits after being multiplied by @@ -1659,7 +1672,7 @@ RefineApproximation( return approxResult; } - /* + /* * Convert the numerator and denominator of the corrector term accurately * to floating point numbers. */ @@ -1752,8 +1765,8 @@ TclDoubleDigits( return 1; } - /* - * Find a large integer r, and integer e, such that + /* + * Find a large integer r, and integer e, such that * v = r * FLT_RADIX**e * and r is as small as possible. Also determine whether the significand * is the smallest possible. @@ -2153,7 +2166,7 @@ TclInitDoubleConversion(void) mantBits = DBL_MANT_DIG * log2FLT_RADIX; d = 1.0; - /* + /* * Initialize a table of powers of ten that can be exactly represented * in a double. */ @@ -2181,10 +2194,10 @@ TclInitDoubleConversion(void) mp_sqr(pow5+i, pow5+i+1); } - /* + /* * Determine the number of decimal digits to the left and right of the * decimal point in the largest and smallest double, the smallest double - * that differs from zero, and the number of mp_digits needed to represent + * that differs from zero, and the number of mp_digits needed to represent * the significand of a double. */ @@ -2197,8 +2210,8 @@ TclInitDoubleConversion(void) log10_DIGIT_MAX = (int) floor(DIGIT_BIT * log(2.) / log(10.)); /* - * Nokia 770's software-emulated floating point is "middle endian": - * the bytes within a 32-bit word are little-endian (like the native + * Nokia 770's software-emulated floating point is "middle endian": the + * bytes within a 32-bit word are little-endian (like the native * integers), but the two words of a 'double' are presented most * significant word first. */ @@ -2255,8 +2268,8 @@ TclFinalizeDoubleConversion(void) * None. * * Side effects: - * Initializes the bignum supplied, and stores the converted number - * in it. + * Initializes the bignum supplied, and stores the converted number in + * it. * *---------------------------------------------------------------------- */ @@ -2557,7 +2570,7 @@ Pow10TimesFrExp( /* * Multiply by 10**exponent */ - + retval = frexp(retval * pow10[exponent&0xf], &j); expt += j; for (i=4; i<9; ++i) { diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index bdfe6f2..c21c22b 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -33,7 +33,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclStringObj.c,v 1.66 2007/11/11 19:32:17 msofer Exp $ */ + * RCS: @(#) $Id: tclStringObj.c,v 1.67 2007/11/18 22:30:10 dkf Exp $ */ #include "tclInt.h" #include "tommath.h" @@ -43,16 +43,16 @@ */ static void AppendUnicodeToUnicodeRep(Tcl_Obj *objPtr, - CONST Tcl_UniChar *unicode, int appendNumChars); + const Tcl_UniChar *unicode, int appendNumChars); static void AppendUnicodeToUtfRep(Tcl_Obj *objPtr, - CONST Tcl_UniChar *unicode, int numChars); + const Tcl_UniChar *unicode, int numChars); static void AppendUtfToUnicodeRep(Tcl_Obj *objPtr, - CONST char *bytes, int numBytes); + const char *bytes, int numBytes); static void AppendUtfToUtfRep(Tcl_Obj *objPtr, - CONST char *bytes, int numBytes); + const char *bytes, int numBytes); static void FillUnicodeRep(Tcl_Obj *objPtr); static void AppendPrintfToObjVA(Tcl_Obj *objPtr, - CONST char *format, va_list argList); + const char *format, va_list argList); static void FreeStringInternalRep(Tcl_Obj *objPtr); static void DupStringInternalRep(Tcl_Obj *objPtr, Tcl_Obj *copyPtr); @@ -183,7 +183,7 @@ typedef struct String { #undef Tcl_NewStringObj Tcl_Obj * Tcl_NewStringObj( - CONST char *bytes, /* Points to the first of the length bytes + const char *bytes, /* Points to the first of the length bytes * used to initialize the new object. */ int length) /* The number of bytes to copy from "bytes" * when initializing the new object. If @@ -195,7 +195,7 @@ Tcl_NewStringObj( #else /* if not TCL_MEM_DEBUG */ Tcl_Obj * Tcl_NewStringObj( - CONST char *bytes, /* Points to the first of the length bytes + const char *bytes, /* Points to the first of the length bytes * used to initialize the new object. */ int length) /* The number of bytes to copy from "bytes" * when initializing the new object. If @@ -244,13 +244,13 @@ Tcl_NewStringObj( #ifdef TCL_MEM_DEBUG Tcl_Obj * Tcl_DbNewStringObj( - CONST char *bytes, /* Points to the first of the length bytes + const char *bytes, /* Points to the first of the length bytes * used to initialize the new object. */ int length, /* The number of bytes to copy from "bytes" * when initializing the new object. If * negative, use bytes up to the first NUL * byte. */ - CONST char *file, /* The name of the source file calling this + const char *file, /* The name of the source file calling this * function; used for debugging. */ int line) /* Line number in the source file; used for * debugging. */ @@ -267,13 +267,13 @@ Tcl_DbNewStringObj( #else /* if not TCL_MEM_DEBUG */ Tcl_Obj * Tcl_DbNewStringObj( - CONST char *bytes, /* Points to the first of the length bytes + const char *bytes, /* Points to the first of the length bytes * used to initialize the new object. */ register int length, /* The number of bytes to copy from "bytes" * when initializing the new object. If * negative, use bytes up to the first NUL * byte. */ - CONST char *file, /* The name of the source file calling this + const char *file, /* The name of the source file calling this * function; used for debugging. */ int line) /* Line number in the source file; used for * debugging. */ @@ -303,7 +303,7 @@ Tcl_DbNewStringObj( Tcl_Obj * Tcl_NewUnicodeObj( - CONST Tcl_UniChar *unicode, /* The unicode string used to initialize the + const Tcl_UniChar *unicode, /* The unicode string used to initialize the * new object. */ int numChars) /* Number of characters in the unicode * string. */ @@ -335,7 +335,7 @@ Tcl_NewUnicodeObj( stringPtr->uallocated = uallocated; stringPtr->hasUnicode = (numChars > 0); stringPtr->allocated = 0; - memcpy((void *) stringPtr->unicode, (void *) unicode, uallocated); + memcpy(stringPtr->unicode, unicode, uallocated); stringPtr->unicode[numChars] = 0; SET_STRING(objPtr, stringPtr); return objPtr; @@ -686,7 +686,7 @@ Tcl_GetRange( void Tcl_SetStringObj( register Tcl_Obj *objPtr, /* Object whose internal rep to init. */ - CONST char *bytes, /* Points to the first of the length bytes + const char *bytes, /* Points to the first of the length bytes * used to initialize the object. */ register int length) /* The number of bytes to copy from "bytes" * when initializing the object. If negative, @@ -761,23 +761,22 @@ Tcl_SetObjLength( if (length > (int) stringPtr->allocated && (objPtr->bytes != NULL || stringPtr->hasUnicode == 0)) { - /* * Not enough space in current string. Reallocate the string space and * free the old string. */ if (objPtr->bytes != tclEmptyStringRep) { - objPtr->bytes = ckrealloc((char *)objPtr->bytes, - (unsigned)(length+1)); + objPtr->bytes = ckrealloc((char *) objPtr->bytes, + (unsigned) (length + 1)); } else { - char *new = ckalloc((unsigned) (length+1)); + char *newBytes = ckalloc((unsigned) (length+1)); + if (objPtr->bytes != NULL && objPtr->length != 0) { - memcpy((void *) new, (void *) objPtr->bytes, - (size_t) objPtr->length); + memcpy(newBytes, objPtr->bytes, (size_t) objPtr->length); Tcl_InvalidateStringRep(objPtr); } - objPtr->bytes = new; + objPtr->bytes = newBytes; } stringPtr->allocated = length; @@ -876,7 +875,7 @@ Tcl_AttemptSetObjLength( if (length > (int) stringPtr->allocated && (objPtr->bytes != NULL || stringPtr->hasUnicode == 0)) { - char *new; + char *newBytes; /* * Not enough space in current string. Reallocate the string space and @@ -884,22 +883,22 @@ Tcl_AttemptSetObjLength( */ if (objPtr->bytes != tclEmptyStringRep) { - new = attemptckrealloc(objPtr->bytes, (unsigned)(length+1)); - if (new == NULL) { + newBytes = attemptckrealloc(objPtr->bytes, + (unsigned)(length + 1)); + if (newBytes == NULL) { return 0; } } else { - new = attemptckalloc((unsigned) (length+1)); - if (new == NULL) { + newBytes = attemptckalloc((unsigned) (length + 1)); + if (newBytes == NULL) { return 0; } if (objPtr->bytes != NULL && objPtr->length != 0) { - memcpy((void *) new, (void *) objPtr->bytes, - (size_t) objPtr->length); + memcpy(newBytes, objPtr->bytes, (size_t) objPtr->length); Tcl_InvalidateStringRep(objPtr); } } - objPtr->bytes = new; + objPtr->bytes = newBytes; stringPtr->allocated = length; /* @@ -974,7 +973,7 @@ Tcl_AttemptSetObjLength( void Tcl_SetUnicodeObj( Tcl_Obj *objPtr, /* The object to set the string of. */ - CONST Tcl_UniChar *unicode, /* The unicode string used to initialize the + const Tcl_UniChar *unicode, /* The unicode string used to initialize the * object. */ int numChars) /* Number of characters in the unicode * string. */ @@ -1008,7 +1007,7 @@ Tcl_SetUnicodeObj( stringPtr->uallocated = uallocated; stringPtr->hasUnicode = (numChars > 0); stringPtr->allocated = 0; - memcpy((void *) stringPtr->unicode, (void *) unicode, uallocated); + memcpy(stringPtr->unicode, unicode, uallocated); stringPtr->unicode[numChars] = 0; SET_STRING(objPtr, stringPtr); @@ -1037,14 +1036,14 @@ Tcl_SetUnicodeObj( void Tcl_AppendLimitedToObj( register Tcl_Obj *objPtr, /* Points to the object to append to. */ - CONST char *bytes, /* Points to the bytes to append to the + const char *bytes, /* Points to the bytes to append to the * object. */ register int length, /* The number of bytes available to be * appended from "bytes". If < 0, then all * bytes up to a NUL byte are available. */ register int limit, /* The maximum number of bytes to append to * the object. */ - CONST char *ellipsis) /* Ellipsis marker string, appended to the + const char *ellipsis) /* Ellipsis marker string, appended to the * object to indicate not all available bytes * at "bytes" were appended. */ { @@ -1118,7 +1117,7 @@ Tcl_AppendLimitedToObj( void Tcl_AppendToObj( register Tcl_Obj *objPtr, /* Points to the object to append to. */ - CONST char *bytes, /* Points to the bytes to append to the + const char *bytes, /* Points to the bytes to append to the * object. */ register int length) /* The number of bytes to append from "bytes". * If < 0, then append all bytes up to NUL @@ -1147,7 +1146,7 @@ Tcl_AppendToObj( void Tcl_AppendUnicodeToObj( register Tcl_Obj *objPtr, /* Points to the object to append to. */ - CONST Tcl_UniChar *unicode, /* The unicode string to append to the + const Tcl_UniChar *unicode, /* The unicode string to append to the * object. */ int length) /* Number of chars in "unicode". */ { @@ -1283,7 +1282,7 @@ Tcl_AppendObjToObj( static void AppendUnicodeToUnicodeRep( Tcl_Obj *objPtr, /* Points to the object to append to. */ - CONST Tcl_UniChar *unicode, /* String to append. */ + const Tcl_UniChar *unicode, /* String to append. */ int appendNumChars) /* Number of chars of "unicode" to append. */ { String *stringPtr, *tmpString; @@ -1334,7 +1333,7 @@ AppendUnicodeToUnicodeRep( * trailing null. */ - memcpy((void*) (stringPtr->unicode + stringPtr->numChars), unicode, + memcpy(stringPtr->unicode + stringPtr->numChars, unicode, appendNumChars * sizeof(Tcl_UniChar)); stringPtr->unicode[numChars] = 0; stringPtr->numChars = numChars; @@ -1362,11 +1361,11 @@ AppendUnicodeToUnicodeRep( static void AppendUnicodeToUtfRep( Tcl_Obj *objPtr, /* Points to the object to append to. */ - CONST Tcl_UniChar *unicode, /* String to convert to UTF. */ + const Tcl_UniChar *unicode, /* String to convert to UTF. */ int numChars) /* Number of chars of "unicode" to convert. */ { Tcl_DString dsPtr; - CONST char *bytes; + const char *bytes; if (numChars < 0) { numChars = 0; @@ -1407,7 +1406,7 @@ AppendUnicodeToUtfRep( static void AppendUtfToUnicodeRep( Tcl_Obj *objPtr, /* Points to the object to append to. */ - CONST char *bytes, /* String to convert to Unicode. */ + const char *bytes, /* String to convert to Unicode. */ int numBytes) /* Number of bytes of "bytes" to convert. */ { Tcl_DString dsPtr; @@ -1448,7 +1447,7 @@ AppendUtfToUnicodeRep( static void AppendUtfToUtfRep( Tcl_Obj *objPtr, /* Points to the object to append to. */ - CONST char *bytes, /* String to append. */ + const char *bytes, /* String to append. */ int numBytes) /* Number of bytes of "bytes" to append. */ { String *stringPtr; @@ -1492,8 +1491,7 @@ AppendUtfToUtfRep( stringPtr->numChars = -1; stringPtr->hasUnicode = 0; - memcpy((void *) (objPtr->bytes + oldLength), (void *) bytes, - (size_t) numBytes); + memcpy(objPtr->bytes + oldLength, bytes, (size_t) numBytes); objPtr->bytes[newLength] = 0; objPtr->length = newLength; } @@ -1636,7 +1634,7 @@ Tcl_AppendStringsToObjVA( */ if (args != static_list) { - ckfree((void *)args); + ckfree((void *) args); } #undef STATIC_LIST_SIZE } @@ -1695,19 +1693,16 @@ int Tcl_AppendFormatToObj( Tcl_Interp *interp, Tcl_Obj *appendObj, - CONST char *format, + const char *format, int objc, - Tcl_Obj *CONST objv[]) + Tcl_Obj *const objv[]) { - CONST char *span = format; - int numBytes = 0; - int objIndex = 0; - int gotXpg = 0, gotSequential = 0; + const char *span = format, *msg; + int numBytes = 0, objIndex = 0, gotXpg = 0, gotSequential = 0; int originalLength; - CONST char *msg; - CONST char *mixedXPG = + static const char *mixedXPG = "cannot mix \"%\" and \"%n$\" conversion specifiers"; - CONST char *badIndex[2] = { + static const char *badIndex[2] = { "not enough arguments for all format specifiers", "\"%n$\" argument index out of range" }; @@ -1930,6 +1925,7 @@ Tcl_AppendFormatToObj( case 'c': { char buf[TCL_UTF_MAX]; int code, length; + if (TclGetIntFromObj(interp, segment, &code) != TCL_OK) { goto error; } @@ -2028,7 +2024,7 @@ Tcl_AppendFormatToObj( case 'd': { int length; Tcl_Obj *pure; - CONST char *bytes; + const char *bytes; if (useShort) { pure = Tcl_NewIntObj((int)(s)); @@ -2143,8 +2139,9 @@ Tcl_AppendFormatToObj( int digitOffset; if (useBig) { - if ((size_t)shiftbytes; Tcl_UniChar *dst; - src = objPtr->bytes; stringPtr = GET_STRING(objPtr); if (stringPtr->numChars == -1) { @@ -2709,8 +2705,7 @@ DupStringInternalRep( STRING_SIZE(srcStringPtr->uallocated)); copyStringPtr->uallocated = srcStringPtr->uallocated; - memcpy((void *) copyStringPtr->unicode, - (void *) srcStringPtr->unicode, + memcpy(copyStringPtr->unicode, srcStringPtr->unicode, (size_t) srcStringPtr->numChars * sizeof(Tcl_UniChar)); copyStringPtr->unicode[srcStringPtr->numChars] = 0; } -- cgit v0.12