summaryrefslogtreecommitdiffstats
path: root/generic/tclCmdMZ.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2003-04-11 20:50:45 (GMT)
committerdgp <dgp@users.sourceforge.net>2003-04-11 20:50:45 (GMT)
commit1e3d8de94601b1efb0a694e0f756a0beeeded462 (patch)
tree262c9158ed0ab2883ffc3d0c5a9cbc70da00545c /generic/tclCmdMZ.c
parent092f06de8fa11aaa44b5d6d0a127ca0d0f87703d (diff)
downloadtcl-1e3d8de94601b1efb0a694e0f756a0beeeded462.zip
tcl-1e3d8de94601b1efb0a694e0f756a0beeeded462.tar.gz
tcl-1e3d8de94601b1efb0a694e0f756a0beeeded462.tar.bz2
* generic/tclCmdMZ.c (Tcl_StringObjCmd,STR_IS_INT): Corrected
inconsistent results of [string is integer] observed on systems where sizeof(long) != sizeof(int). [Bug 718878] * tests/string.test: Added tests for Bug 718878. * doc/string.n: Clarified that [string is integer] accepts 32-bit integers.
Diffstat (limited to 'generic/tclCmdMZ.c')
-rw-r--r--generic/tclCmdMZ.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c
index 508cfa0..21b439c 100644
--- a/generic/tclCmdMZ.c
+++ b/generic/tclCmdMZ.c
@@ -14,7 +14,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclCmdMZ.c,v 1.85 2003/04/11 15:59:52 vincentdarley Exp $
+ * RCS: @(#) $Id: tclCmdMZ.c,v 1.86 2003/04/11 20:50:47 dgp Exp $
*/
#include "tclInt.h"
@@ -1659,23 +1659,20 @@ Tcl_StringObjCmd(dummy, interp, objc, objv)
break;
case STR_IS_INT: {
char *stop;
+ long int l = 0;
- if ((objPtr->typePtr == &tclIntType) ||
- (Tcl_GetInt(NULL, string1, &i) == TCL_OK)) {
+ if (TCL_OK == Tcl_GetIntFromObj(NULL, objPtr, &i)) {
break;
}
/*
* Like STR_IS_DOUBLE, but we use strtoul.
- * Since Tcl_GetInt already failed, we set result to 0.
+ * Since Tcl_GetIntFromObj already failed,
+ * we set result to 0.
*/
result = 0;
errno = 0;
-#ifdef TCL_WIDE_INT_IS_LONG
- strtoul(string1, &stop, 0); /* INTL: Tcl source. */
-#else
- strtoull(string1, &stop, 0); /* INTL: Tcl source. */
-#endif
- if (errno == ERANGE) {
+ l = strtol(string1, &stop, 0); /* INTL: Tcl source. */
+ if ((errno == ERANGE) || (l > INT_MAX) || (l < INT_MIN)) {
/*
* if (errno == ERANGE), then it was an over/underflow
* problem, but in this method, we only want to know
@@ -1683,6 +1680,7 @@ Tcl_StringObjCmd(dummy, interp, objc, objv)
* the failVarObj to the string length.
*/
failat = -1;
+
} else if (stop == string1) {
/*
* In this case, nothing like a number was found