|
|
1.1 root 1: /*
2: * strtol.c --
3: *
4: * Source code for the "strtol" library procedure.
5: *
6: * Copyright 1988 Regents of the University of California
7: * Permission to use, copy, modify, and distribute this
8: * software and its documentation for any purpose and without
9: * fee is hereby granted, provided that the above copyright
10: * notice appear in all copies. The University of California
11: * makes no representations about the suitability of this
12: * software for any purpose. It is provided "as is" without
13: * express or implied warranty.
14: */
15:
16: #ifndef lint
17: static char rcsid[] = "$Header: /sprite/src/lib/c/stdlib/RCS/strtol.c,v 1.4 89/03/22 00:47:30 rab Exp $ SPRITE (Berkeley)";
18: #endif /* not lint */
19:
20: #include <stdlib.h>
21: #include <ctype.h>
22:
23:
24: /*
25: *----------------------------------------------------------------------
26: *
27: * strtol --
28: *
29: * Convert an ASCII string into an integer.
30: *
31: * Results:
32: * The return value is the integer equivalent of string. If endPtr
33: * is non-NULL, then *endPtr is filled in with the character
34: * after the last one that was part of the integer. If string
35: * doesn't contain a valid integer value, then zero is returned
36: * and *endPtr is set to string.
37: *
38: * Side effects:
39: * None.
40: *
41: *----------------------------------------------------------------------
42: */
43:
44: long int
45: strtol(string, endPtr, base)
46: char *string; /* String of ASCII digits, possibly
47: * preceded by white space. For bases
48: * greater than 10, either lower- or
49: * upper-case digits may be used.
50: */
51: char **endPtr; /* Where to store address of terminating
52: * character, or NULL. */
53: int base; /* Base for conversion. Must be less
54: * than 37. If 0, then the base is chosen
55: * from the leading characters of string:
56: * "0x" means hex, "0" means octal, anything
57: * else means decimal.
58: */
59: {
60: register char *p;
61: int result;
62:
63: /*
64: * Skip any leading blanks.
65: */
66:
67: p = string;
68: while (isspace(*p)) {
69: p += 1;
70: }
71:
72: /*
73: * Check for a sign.
74: */
75:
76: if (*p == '-') {
77: p += 1;
78: result = -(strtoul(p, endPtr, base));
79: } else {
80: if (*p == '+') {
81: p += 1;
82: }
83: result = strtoul(p, endPtr, base);
84: }
85: if ((result == 0) && (endPtr != 0) && (*endPtr == p)) {
86: *endPtr = string;
87: }
88: return result;
89: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.