|
|
1.1 root 1: #include <errno.h>
2: #include <ctype.h>
3:
4: #define T_LONG_MAX (long)(~(unsigned long)0>>1)
5: #define T_LONG_MIN (~T_LONG_MAX)
6: #define POS 0
7: extern unsigned long strtoul();
8:
9: long
10: strtol(iptr, endptr, base)
11: char *iptr;
12: register char **endptr;
13: {
14: register char *nptr = iptr;
15: register sign = POS;
16: register long result;
17:
18: if(endptr)
19: *endptr = iptr;
20: while(isspace(*nptr))
21: nptr++;
22: switch(*nptr) {
23: case '-':
24: sign = !POS;
25: case '+':
26: nptr++;
27: }
28: if(!isalnum(*nptr))
29: return 0;
30: result = (long)strtoul(nptr, &iptr, base);
31: if(endptr && iptr!=nptr)
32: *endptr = iptr;
33: if(result < 0) {
34: if(sign==POS || result!=T_LONG_MIN)
35: errno = ERANGE;
36: return sign==POS? T_LONG_MAX: T_LONG_MIN;
37: }
38: return sign==POS? result: -result;
39: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.