diff options
Diffstat (limited to 'contrib/cvs/lib/strtoul.c')
-rw-r--r-- | contrib/cvs/lib/strtoul.c | 100 |
1 files changed, 0 insertions, 100 deletions
diff --git a/contrib/cvs/lib/strtoul.c b/contrib/cvs/lib/strtoul.c deleted file mode 100644 index 7d42c210f67c..000000000000 --- a/contrib/cvs/lib/strtoul.c +++ /dev/null @@ -1,100 +0,0 @@ -/* - * strtol : convert a string to long. - * - * Andy Wilson, 2-Oct-89. - */ - -#include <errno.h> -#include <ctype.h> -#include <stdio.h> - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifndef ULONG_MAX -#define ULONG_MAX ((unsigned long)(~0L)) /* 0xFFFFFFFF */ -#endif - -extern int errno; - -unsigned long -strtoul(s, ptr, base) - const char *s; char **ptr; int base; -{ - unsigned long total = 0; - unsigned digit; - const char *start=s; - int did_conversion=0; - int overflow = 0; - int negate = 0; - unsigned long maxdiv, maxrem; - - if (s==NULL) - { - errno = ERANGE; - if (!ptr) - *ptr = (char *)start; - return 0L; - } - - while (isspace(*s)) - s++; - if (*s == '+') - s++; - else if (*s == '-') - s++, negate = 1; - if (base==0 || base==16) /* the 'base==16' is for handling 0x */ - { - int tmp; - - /* - * try to infer base from the string - */ - if (*s != '0') - tmp = 10; /* doesn't start with 0 - assume decimal */ - else if (s[1] == 'X' || s[1] == 'x') - tmp = 16, s += 2; /* starts with 0x or 0X - hence hex */ - else - tmp = 8; /* starts with 0 - hence octal */ - if (base==0) - base = (int)tmp; - } - - maxdiv = ULONG_MAX / base; - maxrem = ULONG_MAX % base; - - while ((digit = *s) != '\0') - { - if (digit >= '0' && digit < ('0'+base)) - digit -= '0'; - else - if (base > 10) - { - if (digit >= 'a' && digit < ('a'+(base-10))) - digit = digit - 'a' + 10; - else if (digit >= 'A' && digit < ('A'+(base-10))) - digit = digit - 'A' + 10; - else - break; - } - else - break; - did_conversion = 1; - if (total > maxdiv - || (total == maxdiv && digit > maxrem)) - overflow = 1; - total = (total * base) + digit; - s++; - } - if (overflow) - { - errno = ERANGE; - if (ptr != NULL) - *ptr = (char *)s; - return (ULONG_MAX); - } - if (ptr != NULL) - *ptr = (char *) ((did_conversion) ? (char *)s : (char *)start); - return negate ? -total : total; -} |