diff options
author | dgp <dgp@users.sourceforge.net> | 2007-10-11 21:34:59 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2007-10-11 21:34:59 (GMT) |
commit | a5410fb3a1a9a28c9d7261e9f2e96518f557de36 (patch) | |
tree | 9c7e9a92ddeeade771662fa39dbd533371b09288 /compat/strtoll.c | |
parent | 9db323e98ffbbcc1293e10187377516b6fea0b58 (diff) | |
download | tcl-a5410fb3a1a9a28c9d7261e9f2e96518f557de36.zip tcl-a5410fb3a1a9a28c9d7261e9f2e96518f557de36.tar.gz tcl-a5410fb3a1a9a28c9d7261e9f2e96518f557de36.tar.bz2 |
* 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
Diffstat (limited to 'compat/strtoll.c')
-rw-r--r-- | compat/strtoll.c | 107 |
1 files changed, 0 insertions, 107 deletions
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 <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; -} |