summaryrefslogtreecommitdiffstats
path: root/generic/tclScan.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tclScan.c')
-rw-r--r--generic/tclScan.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/generic/tclScan.c b/generic/tclScan.c
index cccdd7a..e4511bf 100644
--- a/generic/tclScan.c
+++ b/generic/tclScan.c
@@ -379,6 +379,17 @@ ValidateFormat(
*/
switch (ch) {
+ case 'z':
+ case 't':
+ if (sizeof(void *) > sizeof(int)) {
+ flags |= SCAN_LONGER;
+ }
+ format += TclUtfToUniChar(format, &ch);
+ break;
+ case 'L':
+ flags |= SCAN_BIG;
+ format += TclUtfToUniChar(format, &ch);
+ break;
case 'l':
if (*format == 'l') {
flags |= SCAN_BIG;
@@ -387,7 +398,8 @@ ValidateFormat(
break;
}
/* FALLTHRU */
- case 'L':
+ case 'j':
+ case 'q':
flags |= SCAN_LONGER;
/* FALLTHRU */
case 'h':
@@ -593,7 +605,7 @@ Tcl_ScanObjCmd(
const char *format;
int numVars, nconversions, totalVars = -1;
int objIndex, offset, i, result, code;
- long value;
+ int value;
const char *string, *end, *baseString;
char op = 0;
int underflow = 0;
@@ -986,27 +998,15 @@ Tcl_ScanObjCmd(
}
}
} else {
- if (TclGetLongFromObj(NULL, objPtr, &value) != TCL_OK) {
+ if (TclGetIntFromObj(NULL, objPtr, &value) != TCL_OK) {
if (TclGetString(objPtr)[0] == '-') {
- value = LONG_MIN;
+ value = INT_MIN;
} else {
- value = LONG_MAX;
+ value = INT_MAX;
}
}
if ((flags & SCAN_UNSIGNED) && (value < 0)) {
-#ifdef TCL_WIDE_INT_IS_LONG
- mp_int big;
- if (mp_init_u64(&big, (unsigned long)value) != MP_OKAY) {
- Tcl_SetObjResult(interp, Tcl_NewStringObj(
- "insufficient memory to create bignum", -1));
- Tcl_SetErrorCode(interp, "TCL", "MEMORY", (char *)NULL);
- return TCL_ERROR;
- } else {
- Tcl_SetBignumObj(objPtr, &big);
- }
-#else
- Tcl_SetWideIntObj(objPtr, (unsigned long)value);
-#endif
+ Tcl_SetWideIntObj(objPtr, (unsigned int)value);
} else {
TclSetIntObj(objPtr, value);
}