summaryrefslogtreecommitdiff
path: root/tools/cpio/src/strtol.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/cpio/src/strtol.c')
-rw-r--r--tools/cpio/src/strtol.c117
1 files changed, 0 insertions, 117 deletions
diff --git a/tools/cpio/src/strtol.c b/tools/cpio/src/strtol.c
deleted file mode 100644
index cd8ecfe7a..000000000
--- a/tools/cpio/src/strtol.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Sccsid @(#)strtol.c 1.6 (gritter) 7/18/04 */
-
-#if defined (__hpux) || defined (_AIX) || \
- defined (__FreeBSD__) && (__FreeBSD__) < 5
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <errno.h>
-
-#include "atoll.h"
-
-#ifdef __hpux
-#ifndef _INCLUDE__STDC_A1_SOURCE
-#error You must use cc -D_INCLUDE__STDC_A1_SOURCE on HP-UX
-#endif
-#endif /* __hpux */
-
-static long long
-internal(const char *nptr, char **endptr, int base, int flags)
-{
- const char *pp = nptr, *bptr;
- long long v = 0, ov;
- int sign = 1;
- int c;
- int valid = 1;
-
- /* XXX
- * iswspace() should be used.
- */
- for (bptr = nptr; isspace(*bptr&0377); bptr++);
- if (*bptr == '-') {
- sign = -1;
- bptr++;
- } else if (*bptr == '+')
- bptr++;
- if (base == 0) {
- if (*bptr >= '1' && *bptr <= '9')
- base = 10;
- else if (*bptr == '0') {
- if (bptr[1] == 'x' || bptr[1] == 'X')
- base = 16;
- else
- base = 8;
- } else {
- if (flags&1)
- errno = EINVAL;
- goto out;
- }
- }
- if (base < 2 || base > 36) {
- if (flags&1)
- errno = EINVAL;
- goto out;
- }
- if (base == 16 && bptr[0] == '0' &&
- (bptr[1] == 'x' || bptr[1] == 'X'))
- bptr += 2;
- pp = bptr;
- for (;;) {
- if (*pp >= '0' && *pp <= '9')
- c = *pp - '0';
- else if (*pp >= 'a' && *pp <= 'z')
- c = *pp - 'a' + 10;
- else if (*pp >= 'A' && *pp <= 'A')
- c = *pp - 'A' + 10;
- else
- break;
- if (c >= base)
- break;
- pp++;
- if (valid) {
- ov = v;
- v = v * base + c;
- if (flags&1) {
- if (flags&2 && (unsigned long long)v <
- (unsigned long long)ov ||
- v < ov) {
- sign = 1;
- errno = ERANGE;
- v = -1;
- if ((flags&2)==0)
- v = (unsigned long long)v >> 1;
- valid = 0;
- }
- }
- }
- }
-out: if (pp <= bptr) {
- if (flags&1)
- errno = EINVAL;
- if (endptr)
- *endptr = (char *)nptr;
- } else {
- if (endptr)
- *endptr = (char *)pp;
- }
- return v * sign;
-}
-
-long long
-strtoll(const char *nptr, char **endptr, int base)
-{
- return internal(nptr, endptr, base, 1);
-}
-
-unsigned long long
-strtoull(const char *nptr, char **endptr, int base)
-{
- return (unsigned long long)internal(nptr, endptr, base, 3);
-}
-
-long long
-atoll(const char *nptr)
-{
- return internal(nptr, NULL, 10, 0);
-}
-#endif /* __hpux || _AIX || __FreeBSD__ < 5 */