Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/tcl8.5.2/compat/strtol.c @ 25

Last change on this file since 25 was 25, checked in by landauf, 16 years ago

added tcl to libs

File size: 1.9 KB
Line 
1/*
2 * strtol.c --
3 *
4 *      Source code for the "strtol" library procedure.
5 *
6 * Copyright (c) 1988 The Regents of the University of California.
7 * Copyright (c) 1994 Sun Microsystems, Inc.
8 *
9 * See the file "license.terms" for information on usage and redistribution of
10 * this file, and for a DISCLAIMER OF ALL WARRANTIES.
11 *
12 * RCS: @(#) $Id: strtol.c,v 1.6 2007/04/16 13:36:34 dkf Exp $
13 */
14
15#include <ctype.h>
16#include "tclInt.h"
17
18/*
19 *----------------------------------------------------------------------
20 *
21 * strtol --
22 *
23 *      Convert an ASCII string into an integer.
24 *
25 * Results:
26 *      The return value is the integer equivalent of string. If endPtr is
27 *      non-NULL, then *endPtr is filled in with the character after the last
28 *      one that was part of the integer. If string doesn't contain a valid
29 *      integer value, then zero is returned and *endPtr is set to string.
30 *
31 * Side effects:
32 *      None.
33 *
34 *----------------------------------------------------------------------
35 */
36
37long int
38strtol(
39    CONST char *string,         /* String of ASCII digits, possibly preceded
40                                 * by white space. For bases greater than 10,
41                                 * either lower- or upper-case digits may be
42                                 * used. */
43    char **endPtr,              /* Where to store address of terminating
44                                 * character, or NULL. */
45    int base)                   /* Base for conversion. Must be less than 37.
46                                 * If 0, then the base is chosen from the
47                                 * leading characters of string: "0x" means
48                                 * hex, "0" means octal, anything else means
49                                 * decimal. */
50{
51    register CONST char *p;
52    long result;
53
54    /*
55     * Skip any leading blanks.
56     */
57
58    p = string;
59    while (isspace(UCHAR(*p))) {
60        p += 1;
61    }
62
63    /*
64     * Check for a sign.
65     */
66
67    if (*p == '-') {
68        p += 1;
69        result = -(strtoul(p, endPtr, base));
70    } else {
71        if (*p == '+') {
72            p += 1;
73        }
74        result = strtoul(p, endPtr, base);
75    }
76    if ((result == 0) && (endPtr != 0) && (*endPtr == p)) {
77        *endPtr = (char *) string;
78    }
79    return result;
80}
Note: See TracBrowser for help on using the repository browser.