summaryrefslogtreecommitdiffstats
path: root/generic/tclClockFmt.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tclClockFmt.c')
-rw-r--r--generic/tclClockFmt.c91
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;