summaryrefslogtreecommitdiff
path: root/src/libfreeswan/ttoul.c
diff options
context:
space:
mode:
authorYves-Alexis Perez <corsac@debian.org>2013-01-02 14:18:20 +0100
committerYves-Alexis Perez <corsac@debian.org>2013-01-02 14:18:20 +0100
commit2ea5b8ab2fa64487af984af2162039596a06015a (patch)
tree58f9a4372d6007b33b1fca63ab18b53aa34b090d /src/libfreeswan/ttoul.c
parent4e331141b8693e5214b82fdd6c3c6f4fa65eafca (diff)
parentc1343b3278cdf99533b7902744d15969f9d6fdc1 (diff)
downloadvyos-strongswan-2ea5b8ab2fa64487af984af2162039596a06015a.tar.gz
vyos-strongswan-2ea5b8ab2fa64487af984af2162039596a06015a.zip
Merge tag 'upstream/5.0.1'
Upstream version 5.0.1
Diffstat (limited to 'src/libfreeswan/ttoul.c')
-rw-r--r--src/libfreeswan/ttoul.c89
1 files changed, 0 insertions, 89 deletions
diff --git a/src/libfreeswan/ttoul.c b/src/libfreeswan/ttoul.c
deleted file mode 100644
index 7524789c4..000000000
--- a/src/libfreeswan/ttoul.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * convert from text form of unsigned long to binary
- * Copyright (C) 2000 Henry Spencer.
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Library General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version. See <http://www.fsf.org/copyleft/lgpl.txt>.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
- * License for more details.
- */
-#include "internal.h"
-#include "freeswan.h"
-
-/*
- - ttoul - convert text substring to unsigned long number
- */
-const char * /* NULL for success, else string literal */
-ttoul(src, srclen, base, resultp)
-const char *src;
-size_t srclen; /* 0 means strlen(src) */
-int base; /* 0 means figure it out */
-unsigned long *resultp;
-{
- const char *stop;
- static char hex[] = "0123456789abcdef";
- static char uchex[] = "0123456789ABCDEF";
- int d;
- char c;
- char *p;
- unsigned long r;
- unsigned long rlimit;
- int dlimit;
-
- if (srclen == 0)
- srclen = strlen(src);
- if (srclen == 0)
- return "empty string";
-
- if (base == 0) {
- if (srclen > 2 && *src == '0' &&
- (*(src+1) == 'x' || *(src+1) == 'X'))
- return ttoul(src+2, srclen-2, 16, resultp);
- if (srclen > 1 && *src == '0')
- return ttoul(src+1, srclen-1, 8, resultp);
- return ttoul(src, srclen, 10, resultp);
- }
- if (base != 8 && base != 10 && base != 16)
- return "unsupported number base";
-
- r = 0;
- stop = src + srclen;
- if (base == 16) {
- while (src < stop) {
- c = *src++;
- p = strchr(hex, c);
- if (p != NULL)
- d = p - hex;
- else {
- p = strchr(uchex, c);
- if (p == NULL)
- return "non-hex digit in hex number";
- d = p - uchex;
- }
- r = (r << 4) | d;
- }
- /* defer length check to catch invalid digits first */
- if (srclen > sizeof(unsigned long) * 2)
- return "hex number too long";
- } else {
- rlimit = ULONG_MAX / base;
- dlimit = (int)(ULONG_MAX - rlimit*base);
- while (src < stop) {
- c = *src++;
- d = c - '0';
- if (d < 0 || d >= base)
- return "non-digit in number";
- if (r > rlimit || (r == rlimit && d > dlimit))
- return "unsigned-long overflow";
- r = r*base + d;
- }
- }
-
- *resultp = r;
- return NULL;
-}