|
|
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.