From a5410fb3a1a9a28c9d7261e9f2e96518f557de36 Mon Sep 17 00:00:00 2001 From: dgp Date: Thu, 11 Oct 2007 21:34:59 +0000 Subject: * generic/tclCmdMZ.c: Correct [string is (wide)integer] failure * tests/string.test: to report correct failindex values for non-decimal integer strings. [Bug 1805887]. * compat/strtoll.c (removed): The routines strtoll() and strtoull() * compat/strtoull.c (removed): are no longer called by the Tcl source * generic/tcl.h: code. (Their functionality has been replaced * unix/Makefile.in: by TclParseNumber().) Remove outdated comments * unix/configure.in: and mountains of configury autogoo that * unix/tclUnixPort.h: allegedly support the mythical systems where * win/Makefile.in: these routines might not have been available. * win/makefile.bc: * win/makefile.vc: * win/tclWinPort.h: * unix/configure: autoconf-2.59 --- ChangeLog | 19 ++++ compat/strtoll.c | 107 ---------------------- compat/strtoull.c | 255 ----------------------------------------------------- generic/tcl.h | 7 +- generic/tclCmdMZ.c | 117 ++++++++---------------- tests/string.test | 8 +- unix/Makefile.in | 8 +- unix/configure | 4 +- unix/configure.in | 4 +- unix/tclUnixPort.h | 9 +- win/Makefile.in | 7 +- win/makefile.bc | 2 - win/makefile.vc | 4 +- win/tclWinPort.h | 9 +- 14 files changed, 78 insertions(+), 482 deletions(-) delete mode 100644 compat/strtoll.c delete mode 100644 compat/strtoull.c diff --git a/ChangeLog b/ChangeLog index 5aeea76..328c5d0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ +2007-10-11 Don Porter + + * generic/tclCmdMZ.c: Correct [string is (wide)integer] failure + * tests/string.test: to report correct failindex values for + non-decimal integer strings. [Bug 1805887]. + + * compat/strtoll.c (removed): The routines strtoll() and strtoull() + * compat/strtoull.c (removed): are no longer called by the Tcl source + * generic/tcl.h: code. (Their functionality has been replaced + * unix/Makefile.in: by TclParseNumber().) Remove outdated comments + * unix/configure.in: and mountains of configury autogoo that + * unix/tclUnixPort.h: allegedly support the mythical systems where + * win/Makefile.in: these routines might not have been available. + * win/makefile.bc: + * win/makefile.vc: + * win/tclWinPort.h: + + * unix/configure: autoconf-2.59 + 2007-10-11 Miguel Sofer * generic/tclObj.c: remove superfluous #include of tclCompile.h diff --git a/compat/strtoll.c b/compat/strtoll.c deleted file mode 100644 index ce1c8a1..0000000 --- a/compat/strtoll.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - * strtoll.c -- - * - * Source code for the "strtoll" library procedure. - * - * Copyright (c) 1988 The Regents of the University of California. - * Copyright (c) 1994 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - * RCS: @(#) $Id: strtoll.c,v 1.9 2007/04/16 13:36:34 dkf Exp $ - */ - -#include "tclInt.h" -#include - -#define TCL_WIDEINT_MAX (((Tcl_WideUInt)Tcl_LongAsWide(-1))>>1) - - -/* - *---------------------------------------------------------------------- - * - * strtoll -- - * - * Convert an ASCII string into an integer. - * - * Results: - * The return value is the integer equivalent of string. If endPtr is - * non-NULL, then *endPtr is filled in with the character after the last - * one that was part of the integer. If string doesn't contain a valid - * integer value, then zero is returned and *endPtr is set to string. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -#if TCL_WIDE_INT_IS_LONG -long long -#else -Tcl_WideInt -#endif -strtoll( - CONST char *string, /* String of ASCII digits, possibly preceded - * by white space. For bases greater than 10, - * either lower- or upper-case digits may be - * used. */ - char **endPtr, /* Where to store address of terminating - * character, or NULL. */ - int base) /* Base for conversion. Must be less than 37. - * If 0, then the base is chosen from the - * leading characters of string: "0x" means - * hex, "0" means octal, anything else means - * decimal. */ -{ - register CONST char *p; - Tcl_WideInt result = Tcl_LongAsWide(0); - Tcl_WideUInt uwResult; - - /* - * Skip any leading blanks. - */ - - p = string; - while (isspace(UCHAR(*p))) { - p += 1; - } - - /* - * Check for a sign. - */ - - errno = 0; - if (*p == '-') { - p += 1; - uwResult = strtoull(p, endPtr, base); - if (errno != ERANGE) { - if (uwResult > TCL_WIDEINT_MAX+1) { - errno = ERANGE; - return Tcl_LongAsWide(-1); - } else if (uwResult > TCL_WIDEINT_MAX) { - return ~((Tcl_WideInt)TCL_WIDEINT_MAX); - } else { - result = -((Tcl_WideInt) uwResult); - } - } - } else { - if (*p == '+') { - p += 1; - } - uwResult = strtoull(p, endPtr, base); - if (errno != ERANGE) { - if (uwResult > TCL_WIDEINT_MAX) { - errno = ERANGE; - return Tcl_LongAsWide(-1); - } else { - result = uwResult; - } - } - } - if ((result == 0) && (endPtr != 0) && (*endPtr == p)) { - *endPtr = (char *) string; - } - return result; -} diff --git a/compat/strtoull.c b/compat/strtoull.c deleted file mode 100644 index b31567f..0000000 --- a/compat/strtoull.c +++ /dev/null @@ -1,255 +0,0 @@ -/* - * strtoull.c -- - * - * Source code for the "strtoull" library procedure. - * - * Copyright (c) 1988 The Regents of the University of California. - * Copyright (c) 1994 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - * RCS: @(#) $Id: strtoull.c,v 1.9 2007/04/16 13:36:34 dkf Exp $ - */ - -#include "tclInt.h" -#include - -/* - * The table below is used to convert from ASCII digits to a numerical - * equivalent. It maps from '0' through 'z' to integers (100 for non-digit - * characters). - */ - -static char cvtIn[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* '0' - '9' */ - 100, 100, 100, 100, 100, 100, 100, /* punctuation */ - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, /* 'A' - 'Z' */ - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, - 100, 100, 100, 100, 100, 100, /* punctuation */ - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, /* 'a' - 'z' */ - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35}; - - -/* - *---------------------------------------------------------------------- - * - * strtoull -- - * - * Convert an ASCII string into an integer. - * - * Results: - * The return value is the integer equivalent of string. If endPtr is - * non-NULL, then *endPtr is filled in with the character after the last - * one that was part of the integer. If string doesn't contain a valid - * integer value, then zero is returned and *endPtr is set to string. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -#if TCL_WIDE_INT_IS_LONG -unsigned long long -#else -Tcl_WideUInt -#endif -strtoull( - CONST char *string, /* String of ASCII digits, possibly preceded - * by white space. For bases greater than 10, - * either lower- or upper-case digits may be - * used. */ - char **endPtr, /* Where to store address of terminating - * character, or NULL. */ - int base) /* Base for conversion. Must be less than 37. - * If 0, then the base is chosen from the - * leading characters of string: "0x" means - * hex, "0" means octal, anything else means - * decimal. */ -{ - register CONST char *p; - register Tcl_WideUInt result = 0; - register unsigned digit; - register Tcl_WideUInt shifted; - int anyDigits = 0, negative = 0; - - /* - * Skip any leading blanks. - */ - - p = string; - while (isspace(UCHAR(*p))) { /* INTL: locale-dependent */ - p += 1; - } - - /* - * Check for a sign. - */ - - if (*p == '-') { - p += 1; - negative = 1; - } else { - if (*p == '+') { - p += 1; - } - } - - /* - * If no base was provided, pick one from the leading characters of the - * string. - */ - - if (base == 0) { - if (*p == '0') { - p += 1; - if (*p == 'x' || *p == 'X') { - p += 1; - base = 16; - } else { - /* - * Must set anyDigits here, otherwise "0" produces a "no - * digits" error. - */ - - anyDigits = 1; - base = 8; - } - } else { - base = 10; - } - } else if (base == 16) { - /* - * Skip a leading "0x" from hex numbers. - */ - - if ((p[0] == '0') && (p[1] == 'x' || *p == 'X')) { - p += 2; - } - } - - /* - * Sorry this code is so messy, but speed seems important. Do different - * things for base 8, 10, 16, and other. - */ - - if (base == 8) { - for ( ; ; p += 1) { - digit = *p - '0'; - if (digit > 7) { - break; - } - shifted = result << 3; - if ((shifted >> 3) != result) { - goto overflow; - } - result = shifted + digit; - if ( result < shifted ) { - goto overflow; - } - anyDigits = 1; - } - } else if (base == 10) { - for ( ; ; p += 1) { - digit = *p - '0'; - if (digit > 9) { - break; - } - shifted = 10 * result; - if ((shifted / 10) != result) { - goto overflow; - } - result = shifted + digit; - if ( result < shifted ) { - goto overflow; - } - anyDigits = 1; - } - } else if (base == 16) { - for ( ; ; p += 1) { - digit = *p - '0'; - if (digit > ('z' - '0')) { - break; - } - digit = cvtIn[digit]; - if (digit > 15) { - break; - } - shifted = result << 4; - if ((shifted >> 4) != result) { - goto overflow; - } - result = shifted + digit; - if ( result < shifted ) { - goto overflow; - } - anyDigits = 1; - } - } else if ( base >= 2 && base <= 36 ) { - for ( ; ; p += 1) { - digit = *p - '0'; - if (digit > ('z' - '0')) { - break; - } - digit = cvtIn[digit]; - if (digit >= (unsigned) base) { - break; - } - shifted = result * base; - if ((shifted/base) != result) { - goto overflow; - } - result = shifted + digit; - if ( result < shifted ) { - goto overflow; - } - anyDigits = 1; - } - } - - /* - * Negate if we found a '-' earlier. - */ - - if (negative) { - result = (Tcl_WideUInt)(-((Tcl_WideInt)result)); - } - - /* - * See if there were any digits at all. - */ - - if (!anyDigits) { - p = string; - } - - if (endPtr != 0) { - *endPtr = (char *) p; - } - - return result; - - /* - * On overflow generate the right output - */ - - overflow: - errno = ERANGE; - if (endPtr != 0) { - for ( ; ; p += 1) { - digit = *p - '0'; - if (digit > ('z' - '0')) { - break; - } - digit = cvtIn[digit]; - if (digit >= (unsigned) base) { - break; - } - } - *endPtr = (char *) p; - } - return (Tcl_WideUInt)Tcl_LongAsWide(-1); -} diff --git a/generic/tcl.h b/generic/tcl.h index 4914058..af2454d 100644 --- a/generic/tcl.h +++ b/generic/tcl.h @@ -13,7 +13,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tcl.h,v 1.238 2007/10/02 21:54:06 hobbs Exp $ + * RCS: @(#) $Id: tcl.h,v 1.239 2007/10/11 21:35:00 dgp Exp $ */ #ifndef _TCL @@ -348,8 +348,9 @@ typedef long LONG; * longVal == Tcl_WideAsLong(Tcl_LongAsWide(longVal)) * * Note on converting between Tcl_WideInt and strings. This implementation (in - * tclObj.c) depends on the functions strtoull() and sprintf(...,"%" - * TCL_LL_MODIFIER "d",...). TCL_LL_MODIFIER_SIZE is the length of the + * tclObj.c) depends on the function and + * sprintf(...,"%" TCL_LL_MODIFIER "d",...). + * TCL_LL_MODIFIER_SIZE is the length of the * modifier string, which is "ll" on most 32-bit Unix systems. It has to be * split up like this to allow for the more complex formats sometimes needed * (e.g. in the format(n) command.) diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c index 7da20c5..c241cf3 100644 --- a/generic/tclCmdMZ.c +++ b/generic/tclCmdMZ.c @@ -15,7 +15,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.154 2007/08/12 21:58:11 msofer Exp $ + * RCS: @(#) $Id: tclCmdMZ.c,v 1.155 2007/10/11 21:35:00 dgp Exp $ */ #include "tclInt.h" @@ -1401,7 +1401,7 @@ Tcl_StringObjCmd( break; } case STR_IS: { - char *end; + char *end, *stop; Tcl_UniChar ch; /* @@ -1521,8 +1521,6 @@ Tcl_StringObjCmd( chcomp = Tcl_UniCharIsDigit; break; case STR_IS_DOUBLE: { - char *stop; - /* TODO */ if ((objPtr->typePtr == &tclDoubleType) || (objPtr->typePtr == &tclIntType) || @@ -1549,49 +1547,53 @@ Tcl_StringObjCmd( case STR_IS_GRAPH: chcomp = Tcl_UniCharIsGraph; break; - case STR_IS_INT: { - char *stop; - long int l = 0; - - if (TCL_OK == Tcl_GetIntFromObj(NULL, objPtr, &i)) { + case STR_IS_INT: + case STR_IS_WIDE: + if ((((enum isOptions) index) == STR_IS_INT) + && (TCL_OK == Tcl_GetIntFromObj(NULL, objPtr, &i))) { + break; + } + if ((((enum isOptions) index) == STR_IS_WIDE) + && (TCL_OK == Tcl_GetWideIntFromObj(NULL, objPtr, &w))) { break; } - - /* - * Like STR_IS_DOUBLE, but we use strtoul. Since Tcl_GetIntFromObj - * already failed, we set result to 0. - */ result = 0; - errno = 0; - l = strtol(string1, &stop, 0); /* INTL: Tcl source. */ - if ((errno == ERANGE) || (l > INT_MAX) || (l < INT_MIN)) { - /* - * if (errno == ERANGE) or the long value won't fit in an int, - * then it was an over/underflow problem, but in this method, - * we only want to know yes or no, so bad flow returns 0 - * (false) and sets the failVarObj to the string length. - */ - failat = -1; - } else if (stop == string1) { + if (failVarObj == NULL) { /* - * In this case, nothing like a number was found + * Don't bother computing the failure point if we're not + * going to return it. */ - - failat = 0; + break; + } + if (TclParseNumber(NULL, objPtr, NULL, NULL, -1, + (const char **) &stop, TCL_PARSE_INTEGER_ONLY) == TCL_OK) { + if (stop == end) { + /* + * Entire string parses as an integer, but rejected by + * Tcl_Get(Wide)IntFromObj() so we must have overflowed + * the target type, and our convention is to return + * failure at index -1 in that situation. + */ + failat = -1; + } else { + /* + * Some prefix parsed as an integer, but not the whole + * string, so return failure index as the point where + * parsing stopped. Clear out the internal rep, since + * keeping it would leave *objPtr in an inconsistent + * state. + */ + failat = stop - string1; + TclFreeIntRep(objPtr); + objPtr->typePtr = NULL; + } } else { - /* - * Assume we sucked up one char per byte and then we go onto - * SPACE, since we are allowed trailing whitespace. - */ - - failat = stop - string1; - string1 = stop; - chcomp = Tcl_UniCharIsSpace; + /* No prefix is a valid integer. Fail at beginning. */ + failat = 0; } break; - } case STR_IS_LIST: /* * We ignore the strictness here, since empty strings are always @@ -1661,47 +1663,6 @@ Tcl_StringObjCmd( case STR_IS_UPPER: chcomp = Tcl_UniCharIsUpper; break; - case STR_IS_WIDE: { - char *stop; - - if (TCL_OK == Tcl_GetWideIntFromObj(NULL, objPtr, &w)) { - break; - } - - /* - * Like STR_IS_DOUBLE, but we use strtoll. Since - * Tcl_GetWideIntFromObj already failed, we set result to 0. - */ - - result = 0; - errno = 0; - w = strtoll(string1, &stop, 0); /* INTL: Tcl source. */ - if (errno == ERANGE) { - /* - * If (errno == ERANGE), then it was an over/underflow - * problem, but in this method, we only want to know yes or - * no, so bad flow returns 0 (false) and sets the failVarObj - * to the string length. - */ - - failat = -1; - } else if (stop == string1) { - /* - * In this case, nothing like a number was found - */ - failat = 0; - } else { - /* - * Assume we sucked up one char per byte and then we go onto - * SPACE, since we are allowed trailing whitespace. - */ - - failat = stop - string1; - string1 = stop; - chcomp = Tcl_UniCharIsSpace; - } - break; - } case STR_IS_WORD: chcomp = Tcl_UniCharIsWordChar; break; diff --git a/tests/string.test b/tests/string.test index 4723dbc..e408048 100644 --- a/tests/string.test +++ b/tests/string.test @@ -12,7 +12,7 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: string.test,v 1.63 2007/06/08 20:56:42 dkf Exp $ +# RCS: @(#) $Id: string.test,v 1.64 2007/10/11 21:35:01 dgp Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest @@ -482,6 +482,9 @@ test string-6.57 {string is integer, false} { test string-6.58 {string is integer, false on bad octal} { list [string is integer -fail var 036963] $var } {0 3} +test string-6.58.1 {string is integer, false on bad octal} { + list [string is integer -fail var 0o36963] $var +} {0 4} test string-6.59 {string is integer, false on bad hex} { list [string is integer -fail var 0X345XYZ] $var } {0 5} @@ -649,6 +652,9 @@ test string-6.104 {string is wideinteger, false} { test string-6.105 {string is wideinteger, false on bad octal} { list [string is wideinteger -fail var 036963] $var } {0 3} +test string-6.105.1 {string is wideinteger, false on bad octal} { + list [string is wideinteger -fail var 0o36963] $var +} {0 4} test string-6.106 {string is wideinteger, false on bad hex} { list [string is wideinteger -fail var 0X345XYZ] $var } {0 5} diff --git a/unix/Makefile.in b/unix/Makefile.in index 9fdff53..5dd78a1 100644 --- a/unix/Makefile.in +++ b/unix/Makefile.in @@ -4,7 +4,7 @@ # "./configure", which is a configuration script generated by the "autoconf" # program (constructs like "@foo@" will get replaced in the actual Makefile. # -# RCS: @(#) $Id: Makefile.in,v 1.221 2007/09/17 16:24:49 dgp Exp $ +# RCS: @(#) $Id: Makefile.in,v 1.222 2007/10/11 21:35:01 dgp Exp $ VERSION = @TCL_VERSION@ MAJOR_VERSION = @TCL_MAJOR_VERSION@ @@ -1501,15 +1501,9 @@ strtod.o: $(COMPAT_DIR)/strtod.c strtol.o: $(COMPAT_DIR)/strtol.c $(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/strtol.c -strtoll.o: $(COMPAT_DIR)/strtoll.c - $(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/strtoll.c - strtoul.o: $(COMPAT_DIR)/strtoul.c $(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/strtoul.c -strtoull.o: $(COMPAT_DIR)/strtoull.c - $(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/strtoull.c - tmpnam.o: $(COMPAT_DIR)/tmpnam.c $(CC) -c $(STUB_CC_SWITCHES) $(COMPAT_DIR)/tmpnam.c diff --git a/unix/configure b/unix/configure index 93cda08..629e4df 100755 --- a/unix/configure +++ b/unix/configure @@ -9654,9 +9654,7 @@ done - - -for ac_func in opendir strtol strtoll strtoull tmpnam waitpid +for ac_func in opendir strtol tmpnam waitpid do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 diff --git a/unix/configure.in b/unix/configure.in index 603abef..2ce4f9e 100644 --- a/unix/configure.in +++ b/unix/configure.in @@ -3,7 +3,7 @@ dnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Tcl installation dnl to configure the system for the local environment. # -# RCS: @(#) $Id: configure.in,v 1.163 2007/10/02 18:27:30 dgp Exp $ +# RCS: @(#) $Id: configure.in,v 1.164 2007/10/11 21:35:02 dgp Exp $ AC_INIT([tcl],[8.5]) AC_PREREQ(2.59) @@ -151,7 +151,7 @@ AC_CHECK_FUNCS(getcwd, , [AC_DEFINE(USEGETWD, 1, [Is getcwd Posix-compliant?])]) # Nb: if getcwd uses popen and pwd(1) (like SunOS 4) we should really # define USEGETWD even if the posix getcwd exists. Add a test ? -AC_REPLACE_FUNCS(opendir strtol strtoll strtoull tmpnam waitpid) +AC_REPLACE_FUNCS(opendir strtol tmpnam waitpid) AC_CHECK_FUNC(strerror, , [AC_DEFINE(NO_STRERROR, 1, [Do we have strerror()])]) AC_CHECK_FUNC(getwd, , [AC_DEFINE(NO_GETWD, 1, [Do we have getwd()])]) AC_CHECK_FUNC(wait3, , [AC_DEFINE(NO_WAIT3, 1, [Do we have wait3()])]) diff --git a/unix/tclUnixPort.h b/unix/tclUnixPort.h index cf0d810..baa17f9 100644 --- a/unix/tclUnixPort.h +++ b/unix/tclUnixPort.h @@ -19,7 +19,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclUnixPort.h,v 1.57 2007/08/07 05:04:21 das Exp $ + * RCS: @(#) $Id: tclUnixPort.h,v 1.58 2007/10/11 21:35:03 dgp Exp $ */ #ifndef _TCLUNIXPORT @@ -79,13 +79,6 @@ typedef off_t Tcl_SeekOffset; # define TclOSlstat lstat #endif -#if !HAVE_STRTOLL && defined(TCL_WIDE_INT_TYPE) && !TCL_WIDE_INT_IS_LONG -EXTERN Tcl_WideInt strtoll _ANSI_ARGS_((CONST char *string, - char **endPtr, int base)); -EXTERN Tcl_WideUInt strtoull _ANSI_ARGS_((CONST char *string, - char **endPtr, int base)); -#endif - #include #ifdef HAVE_SYS_SELECT_H # include diff --git a/win/Makefile.in b/win/Makefile.in index 7cc8e80..065bc57 100644 --- a/win/Makefile.in +++ b/win/Makefile.in @@ -4,7 +4,7 @@ # "./configure", which is a configuration script generated by the "autoconf" # program (constructs like "@foo@" will get replaced in the actual Makefile. # -# RCS: @(#) $Id: Makefile.in,v 1.118 2007/09/12 16:43:37 dgp Exp $ +# RCS: @(#) $Id: Makefile.in,v 1.119 2007/10/11 21:35:03 dgp Exp $ VERSION = @TCL_VERSION@ @@ -359,9 +359,6 @@ WIN_OBJS = \ tclWinThrd.$(OBJEXT) \ tclWinTime.$(OBJEXT) -COMPAT_OBJS = \ - strtoll.$(OBJEXT) strtoull.$(OBJEXT) - PIPE_OBJS = stub16.$(OBJEXT) DDE_OBJS = tclWinDde.$(OBJEXT) @@ -372,7 +369,7 @@ STUB_OBJS = tclStubLib.$(OBJEXT) TCLSH_OBJS = tclAppInit.$(OBJEXT) -TCL_OBJS = ${GENERIC_OBJS} $(TOMMATH_OBJS) ${WIN_OBJS} ${COMPAT_OBJS} +TCL_OBJS = ${GENERIC_OBJS} $(TOMMATH_OBJS) ${WIN_OBJS} TCL_DOCS = "$(ROOT_DIR_NATIVE)"/doc/*.[13n] diff --git a/win/makefile.bc b/win/makefile.bc index 97846d6..f750555 100644 --- a/win/makefile.bc +++ b/win/makefile.bc @@ -193,8 +193,6 @@ TCLOBJS = \ $(TMPDIR)\regexec.obj \ $(TMPDIR)\regfree.obj \ $(TMPDIR)\regerror.obj \ - $(TMPDIR)\strtoll.obj \ - $(TMPDIR)\strtoull.obj \ $(TMPDIR)\tclAlloc.obj \ $(TMPDIR)\tclAsync.obj \ $(TMPDIR)\tclBasic.obj \ diff --git a/win/makefile.vc b/win/makefile.vc index c6e1038..d3b9778 100644 --- a/win/makefile.vc +++ b/win/makefile.vc @@ -12,7 +12,7 @@ # Copyright (c) 2001-2004 David Gravereaux. # #------------------------------------------------------------------------------ -# RCS: @(#) $Id: makefile.vc,v 1.166 2007/09/18 16:07:51 dgp Exp $ +# RCS: @(#) $Id: makefile.vc,v 1.167 2007/10/11 21:35:03 dgp Exp $ #------------------------------------------------------------------------------ # Check to see we are configured to build with MSVC (MSDEVDIR or MSVCDIR) @@ -252,8 +252,6 @@ TCLOBJS = \ $(TMP_DIR)\regerror.obj \ $(TMP_DIR)\regexec.obj \ $(TMP_DIR)\regfree.obj \ - $(TMP_DIR)\strtoll.obj \ - $(TMP_DIR)\strtoull.obj \ $(TMP_DIR)\tclAlloc.obj \ $(TMP_DIR)\tclAsync.obj \ $(TMP_DIR)\tclBasic.obj \ diff --git a/win/tclWinPort.h b/win/tclWinPort.h index b1765dd..ae17a5e 100644 --- a/win/tclWinPort.h +++ b/win/tclWinPort.h @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinPort.h,v 1.48 2005/11/27 02:33:50 das Exp $ + * RCS: @(#) $Id: tclWinPort.h,v 1.49 2007/10/11 21:35:03 dgp Exp $ */ #ifndef _TCLWINPORT @@ -520,13 +520,6 @@ #define TclpExit exit -#ifdef TCL_WIDE_INT_TYPE -MODULE_SCOPE Tcl_WideInt strtoll _ANSI_ARGS_((CONST char *string, - char **endPtr, int base)); -MODULE_SCOPE Tcl_WideUInt strtoull _ANSI_ARGS_((CONST char *string, - char **endPtr, int base)); -#endif /* TCL_WIDE_INT_TYPE */ - #ifndef INVALID_SET_FILE_POINTER #define INVALID_SET_FILE_POINTER 0xFFFFFFFF #endif /* INVALID_SET_FILE_POINTER */ -- cgit v0.12