summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2012-12-23 08:17:17 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2012-12-23 08:17:17 (GMT)
commit42c352d6258bc3ec26c19183c29b5a4ac4301a81 (patch)
tree904a5c784012083beffa88301ce90c0d9ca69bc6
parenta40590fd31db326000458a35d4bff19a8f7a3b4d (diff)
downloadtcl-42c352d6258bc3ec26c19183c29b5a4ac4301a81.zip
tcl-42c352d6258bc3ec26c19183c29b5a4ac4301a81.tar.gz
tcl-42c352d6258bc3ec26c19183c29b5a4ac4301a81.tar.bz2
Change back to using an isDigit function. We simply don't need to make any
(formally non-portable) assumptions about what happens when an unsigned zero is decremented, and the code isn't in a performance-critical area. Remark by jan.nijtmans: The macro is perfectly portable! Not portable is the exact result of the substraction ('\xB0' - '0' might give 0x80 on some platforms and 0xffffff80 on others), but comparing <= 9 always gives the correct result. We are only checking for digits here! The macro correctly inlines with any compiler, so it's better anyway. Remark by dkf: But it's less clear. In this code, that's more important than a teeny bit of speed from inlining in a non-critical location.
-rw-r--r--generic/tclStubLib.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/generic/tclStubLib.c b/generic/tclStubLib.c
index f61e0ca..859cbf9 100644
--- a/generic/tclStubLib.c
+++ b/generic/tclStubLib.c
@@ -24,10 +24,13 @@ const TclIntStubs *tclIntStubsPtr = NULL;
const TclIntPlatStubs *tclIntPlatStubsPtr = NULL;
/*
- * Use our own ISDIGIT to avoid linking to libc on windows
+ * Use our own isDigit to avoid linking to libc on windows
*/
-#define ISDIGIT(c) (((unsigned)((c)-'0')) <= 9)
+static int isDigit(const int c)
+{
+ return (c >= '0' && c <= '9');
+}
/*
*----------------------------------------------------------------------
@@ -79,7 +82,7 @@ Tcl_InitStubs(
int count = 0;
while (*p) {
- count += !ISDIGIT(*p++);
+ count += !isDigit(*p++);
}
if (count == 1) {
const char *q = actualVersion;
@@ -88,7 +91,7 @@ Tcl_InitStubs(
while (*p && (*p == *q)) {
p++; q++;
}
- if (*p || ISDIGIT(*q)) {
+ if (*p || isDigit(*q)) {
/* Construct error message */
stubsPtr->tcl_PkgRequireEx(interp, "Tcl", version, 1, NULL);
return NULL;