diff options
author | tege <tege@gmplib.org> | 1998-05-05 01:41:11 +0200 |
---|---|---|
committer | tege <tege@gmplib.org> | 1998-05-05 01:41:11 +0200 |
commit | 160c3627928a9f81667f44078692590c0fd315ca (patch) | |
tree | 14e9b15486be7f0b1de968b20e95fad758b4bfba /mpz/set_str.c | |
parent | e5ddcd0b5cc0bd7924d64a7d04da1cafe32f8686 (diff) | |
download | gmp-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.c | 13 |
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; |