diff options
Diffstat (limited to 'generic/tclClockFmt.c')
| -rw-r--r-- | generic/tclClockFmt.c | 91 |
1 files changed, 49 insertions, 42 deletions
diff --git a/generic/tclClockFmt.c b/generic/tclClockFmt.c index 140ecdd..a50b43f 100644 --- a/generic/tclClockFmt.c +++ b/generic/tclClockFmt.c @@ -249,7 +249,7 @@ Clock_itoaw( val /= 10; *p-- = '0' + c; } while (val > 0); - /* fulling with pad-char */ + /* filling with pad-char */ while (p >= buf) { *p-- = padchar; } @@ -290,7 +290,7 @@ Clock_itoaw( if (padchar != '0') { *p-- = '-'; } - /* fulling with pad-char */ + /* filling with pad-char */ while (p >= buf + 1) { *p-- = padchar; } @@ -347,7 +347,7 @@ Clock_witoaw( val /= 10; *p-- = '0' + c; } while (val > 0); - /* fulling with pad-char */ + /* filling with pad-char */ while (p >= buf) { *p-- = padchar; } @@ -398,7 +398,7 @@ Clock_witoaw( if (padchar != '0') { *p-- = '-'; } - /* fulling with pad-char */ + /* filling with pad-char */ while (p >= buf + 1) { *p-- = padchar; } @@ -2140,16 +2140,13 @@ EstimateTokenCount( return ++tokcnt; } -#define AllocTokenInChain(tok, chain, tokCnt, type) \ - if (++(tok) >= (chain) + (tokCnt)) { \ - chain = (type)Tcl_AttemptRealloc((char *)(chain), \ +#define AllocTokenInChain(tok, chain, tokCnt, type) \ + if (++(tok) >= (chain) + (tokCnt)) { \ + chain = (type)Tcl_Realloc((char *)(chain), \ (tokCnt + CLOCK_MIN_TOK_CHAIN_BLOCK_SIZE) * sizeof(*(tok))); \ - if ((chain) == NULL) { \ - goto done; \ - } \ - (tok) = (chain) + (tokCnt); \ - (tokCnt) += CLOCK_MIN_TOK_CHAIN_BLOCK_SIZE; \ - } \ + (tok) = (chain) + (tokCnt); \ + (tokCnt) += CLOCK_MIN_TOK_CHAIN_BLOCK_SIZE; \ + } \ memset(tok, 0, sizeof(*(tok))); /* @@ -2282,7 +2279,7 @@ ClockGetOrParseScanFormat( continue; } default: - if (*p == ' ' || isspace(UCHAR(*p))) { + if (isspace(UCHAR(*p))) { tok->map = &ScnSpaceTokenMap; tok->tokWord.start = p++; while (p < e && isspace(UCHAR(*p))) { @@ -2296,28 +2293,33 @@ ClockGetOrParseScanFormat( tokCnt++; continue; } - word_tok: - { - ClockScanToken *wordTok = tok; - - if (tok > scnTok && (tok - 1)->map == &ScnWordTokenMap) { - wordTok = tok - 1; - } - /* new word token */ - if (wordTok == tok) { + word_tok: + { + /* try continue with previous word token */ + ClockScanToken *wordTok = tok - 1; + + if (wordTok < scnTok || wordTok->map != &ScnWordTokenMap) { + /* start with new word token */ + wordTok = tok; wordTok->tokWord.start = p; wordTok->map = &ScnWordTokenMap; + } + + do { + if (isspace(UCHAR(*p))) { + fss->scnSpaceCount++; + } + p = Tcl_UtfNext(p); + } while (p < e && *p != '%'); + wordTok->tokWord.end = p; + + if (wordTok == tok) { AllocTokenInChain(tok, scnTok, fss->scnTokC, ClockScanToken *); tokCnt++; } - if (isspace(UCHAR(*p))) { - fss->scnSpaceCount++; } - p = Tcl_UtfNext(p); - wordTok->tokWord.end = p; break; } - } } /* calculate end distance value for each tokens */ @@ -2349,9 +2351,8 @@ ClockGetOrParseScanFormat( fss->scnTok = scnTok; fss->scnTokC = tokCnt; } - done: - Tcl_MutexUnlock(&ClockFmtMutex); + Tcl_MutexUnlock(&ClockFmtMutex); return fss; } @@ -3335,23 +3336,29 @@ ClockGetOrParseFmtFormat( continue; } default: - word_tok: { - ClockFormatToken *wordTok = tok; - - if (tok > fmtTok && (tok - 1)->map == &FmtWordTokenMap) { - wordTok = tok - 1; - } - if (wordTok == tok) { + word_tok: + { + /* try continue with previous word token */ + ClockFormatToken *wordTok = tok - 1; + + if (wordTok < fmtTok || wordTok->map != &FmtWordTokenMap) { + /* start with new word token */ + wordTok = tok; wordTok->tokWord.start = p; wordTok->map = &FmtWordTokenMap; + } + do { + p = Tcl_UtfNext(p); + } while (p < e && *p != '%'); + wordTok->tokWord.end = p; + + if (wordTok == tok) { AllocTokenInChain(tok, fmtTok, fss->fmtTokC, ClockFormatToken *); tokCnt++; } - p = Tcl_UtfNext(p); - wordTok->tokWord.end = p; + } break; } - } } /* correct count of real used tokens and free mem if desired @@ -3367,7 +3374,7 @@ ClockGetOrParseFmtFormat( fss->fmtTok = fmtTok; fss->fmtTokC = tokCnt; } - done: + Tcl_MutexUnlock(&ClockFmtMutex); return fss; } @@ -3560,7 +3567,7 @@ ClockFrmScnClearCaches(void) } void -ClockFrmScnFinalize() +ClockFrmScnFinalize(void) { if (!initialized) { return; |
