Tcl Source Code

Artifact [4af5971415]
Login

Artifact 4af5971415be340e61a55d4d74645551cbc6e79f:

Attachment "1805887.patch" to ticket [1805887fff] added by dgp 2007-10-12 03:58:38.
Index: compat/strtoll.c
===================================================================
RCS file: compat/strtoll.c
diff -N compat/strtoll.c
--- compat/strtoll.c	16 Apr 2007 13:36:34 -0000	1.9
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -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 <ctype.h>
-
-#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;
-}
Index: compat/strtoull.c
===================================================================
RCS file: compat/strtoull.c
diff -N compat/strtoull.c
--- compat/strtoull.c	16 Apr 2007 13:36:34 -0000	1.9
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -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 <ctype.h>
-
-/*
- * 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);
-}
Index: generic/tcl.h
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tcl.h,v
retrieving revision 1.238
diff -u -r1.238 tcl.h
--- generic/tcl.h	2 Oct 2007 21:54:06 -0000	1.238
+++ generic/tcl.h	11 Oct 2007 20:56:04 -0000
@@ -348,8 +348,9 @@
  *	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.)
Index: generic/tclCmdMZ.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclCmdMZ.c,v
retrieving revision 1.154
diff -u -r1.154 tclCmdMZ.c
--- generic/tclCmdMZ.c	12 Aug 2007 21:58:11 -0000	1.154
+++ generic/tclCmdMZ.c	11 Oct 2007 20:56:04 -0000
@@ -1401,7 +1401,7 @@
 	break;
     }
     case STR_IS: {
-	char *end;
+	char *end, *stop;
 	Tcl_UniChar ch;
 
 	/*
@@ -1521,8 +1521,6 @@
 	    chcomp = Tcl_UniCharIsDigit;
 	    break;
 	case STR_IS_DOUBLE: {
-	    char *stop;
-
 	    /* TODO */
 	    if ((objPtr->typePtr == &tclDoubleType) ||
 		    (objPtr->typePtr == &tclIntType) ||
@@ -1549,49 +1547,53 @@
 	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 @@
 	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;
Index: tests/string.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/string.test,v
retrieving revision 1.63
diff -u -r1.63 string.test
--- tests/string.test	8 Jun 2007 20:56:42 -0000	1.63
+++ tests/string.test	11 Oct 2007 20:56:06 -0000
@@ -482,6 +482,9 @@
 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.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}
Index: unix/Makefile.in
===================================================================
RCS file: /cvsroot/tcl/tcl/unix/Makefile.in,v
retrieving revision 1.221
diff -u -r1.221 Makefile.in
--- unix/Makefile.in	17 Sep 2007 16:24:49 -0000	1.221
+++ unix/Makefile.in	11 Oct 2007 20:56:06 -0000
@@ -1501,15 +1501,9 @@
 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
 
Index: unix/configure
===================================================================
RCS file: /cvsroot/tcl/tcl/unix/configure,v
retrieving revision 1.205
diff -u -r1.205 configure
--- unix/configure	2 Oct 2007 18:27:30 -0000	1.205
+++ unix/configure	11 Oct 2007 20:56:06 -0000
@@ -9654,9 +9654,7 @@
 
 
 
-
-
-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
Index: unix/configure.in
===================================================================
RCS file: /cvsroot/tcl/tcl/unix/configure.in,v
retrieving revision 1.163
diff -u -r1.163 configure.in
--- unix/configure.in	2 Oct 2007 18:27:30 -0000	1.163
+++ unix/configure.in	11 Oct 2007 20:56:06 -0000
@@ -151,7 +151,7 @@
 # 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()])])
Index: unix/tclUnixPort.h
===================================================================
RCS file: /cvsroot/tcl/tcl/unix/tclUnixPort.h,v
retrieving revision 1.57
diff -u -r1.57 tclUnixPort.h
--- unix/tclUnixPort.h	7 Aug 2007 05:04:21 -0000	1.57
+++ unix/tclUnixPort.h	11 Oct 2007 20:56:06 -0000
@@ -79,13 +79,6 @@
 #   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 <sys/file.h>
 #ifdef HAVE_SYS_SELECT_H
 #   include <sys/select.h>
Index: win/Makefile.in
===================================================================
RCS file: /cvsroot/tcl/tcl/win/Makefile.in,v
retrieving revision 1.118
diff -u -r1.118 Makefile.in
--- win/Makefile.in	12 Sep 2007 16:43:37 -0000	1.118
+++ win/Makefile.in	11 Oct 2007 20:56:06 -0000
@@ -359,9 +359,6 @@
 	tclWinThrd.$(OBJEXT) \
 	tclWinTime.$(OBJEXT)
 
-COMPAT_OBJS = \
-	strtoll.$(OBJEXT) strtoull.$(OBJEXT)
-
 PIPE_OBJS = stub16.$(OBJEXT)
 
 DDE_OBJS = tclWinDde.$(OBJEXT)
@@ -372,7 +369,7 @@
 
 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]
 
Index: win/makefile.bc
===================================================================
RCS file: /cvsroot/tcl/tcl/win/makefile.bc,v
retrieving revision 1.29
diff -u -r1.29 makefile.bc
--- win/makefile.bc	28 Jun 2007 21:24:58 -0000	1.29
+++ win/makefile.bc	11 Oct 2007 20:56:07 -0000
@@ -193,8 +193,6 @@
 	$(TMPDIR)\regexec.obj \
 	$(TMPDIR)\regfree.obj \
 	$(TMPDIR)\regerror.obj \
-	$(TMPDIR)\strtoll.obj \
-	$(TMPDIR)\strtoull.obj \
 	$(TMPDIR)\tclAlloc.obj \
 	$(TMPDIR)\tclAsync.obj \
 	$(TMPDIR)\tclBasic.obj \
Index: win/makefile.vc
===================================================================
RCS file: /cvsroot/tcl/tcl/win/makefile.vc,v
retrieving revision 1.166
diff -u -r1.166 makefile.vc
--- win/makefile.vc	18 Sep 2007 16:07:51 -0000	1.166
+++ win/makefile.vc	11 Oct 2007 20:56:07 -0000
@@ -252,8 +252,6 @@
 	$(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 \
Index: win/tclWinPort.h
===================================================================
RCS file: /cvsroot/tcl/tcl/win/tclWinPort.h,v
retrieving revision 1.48
diff -u -r1.48 tclWinPort.h
--- win/tclWinPort.h	27 Nov 2005 02:33:50 -0000	1.48
+++ win/tclWinPort.h	11 Oct 2007 20:56:07 -0000
@@ -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 */