1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- /*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
- /* $Header$ */
- #include <stdlib.h>
- #include <ctype.h>
- long int
- strtol(register const char *p, char **pp, int base)
- {
- register long val, v;
- register int c;
- int sign = 1;
- if (pp) *pp = p;
- while (isspace(*p)) p++;
- c = *p;
- switch (c) {
- case '-':
- sign = -1;
- /* fallthrough */
- case '+':
- p++;
- }
- /* this is bizare */
- if (base==16 && *p=='0' && (*(p+1)=='x' || *(p+1)=='X'))
- p += 2;
- while (isdigit(c = *p++) || isalpha(c)) {
- if (isalpha(c))
- v = 10 + (isupper(c) ? c - 'A' : c - 'a');
- else
- v = c - '0';
- if (v >= base) {
- p--;
- break;
- }
- val = (val * base) + v;
- }
- if (pp) *pp = p-1;
- return sign * val;
- }
- unsigned long int
- strtoul(register const char *p, char **pp, int base)
- {
- return (unsigned long)strtol(p, pp, base);
- }
|