summaryrefslogtreecommitdiff
path: root/mpz/set_str.c
diff options
context:
space:
mode:
authortege <tege@gmplib.org>1998-05-05 01:41:11 +0200
committertege <tege@gmplib.org>1998-05-05 01:41:11 +0200
commit160c3627928a9f81667f44078692590c0fd315ca (patch)
tree14e9b15486be7f0b1de968b20e95fad758b4bfba /mpz/set_str.c
parente5ddcd0b5cc0bd7924d64a7d04da1cafe32f8686 (diff)
downloadgmp-160c3627928a9f81667f44078692590c0fd315ca.tar.gz
* Skip leading zeros.
* Check for empty string after having skipped leading zeros.
Diffstat (limited to 'mpz/set_str.c')
-rw-r--r--mpz/set_str.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/mpz/set_str.c b/mpz/set_str.c
index 7edfee380..ca6267e0c 100644
--- a/mpz/set_str.c
+++ b/mpz/set_str.c
@@ -105,10 +105,22 @@ mpz_set_str (x, str, base)
}
}
+ /* Skip leading zeros. */
+ while (c == '0')
+ c = *str++;
+ /* Make sure the string does not become empty, mpn_set_str would fail. */
+ if (c == 0)
+ {
+ x->_mp_size = 0;
+ return 0;
+ }
+
TMP_MARK (marker);
str_size = strlen (str - 1);
s = begs = (char *) TMP_ALLOC (str_size + 1);
+ /* Remove spaces from the string and convert the result from ASCII to a
+ byte array. */
for (i = 0; i < str_size; i++)
{
if (!isspace (c))
@@ -131,6 +143,7 @@ mpz_set_str (x, str, base)
if (x->_mp_alloc < xsize)
_mpz_realloc (x, xsize);
+ /* Convert the byte array in base BASE to our bignum format. */
xsize = mpn_set_str (x->_mp_d, (unsigned char *) begs, str_size, base);
x->_mp_size = negative ? -xsize : xsize;