patches/gmp/4.2.2/100-mpf_set_str.patch
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Thu Dec 27 12:53:32 2012 +0100 (2012-12-27)
changeset 3153 f6740f9e42de
parent 466 7f9bbf94b0bb
permissions -rw-r--r--
scripts/addToolsVersion: handle elf2flt

The one was missing from the list.

It is very improbable that we ever need it, as elf2flt does no release,
and we always get it from CVS head. But for the sake of consistency, we
just add it.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
     1 Original patch from http://gmplib.org/patches/mpf_set_str.c.diff
     2 Re-diffed to match crosstool-NG conventions.
     3 
     4 diff -dur gmp-4.2.2.orig/mpf/set_str.c gmp-4.2.2/mpf/set_str.c
     5 --- gmp-4.2.2.orig/mpf/set_str.c	2007-08-30 20:31:40.000000000 +0200
     6 +++ gmp-4.2.2/mpf/set_str.c	2008-01-28 23:05:29.000000000 +0100
     7 @@ -271,8 +271,29 @@
     8        }
     9  
    10      if (expptr != 0)
    11 -      /* FIXME: Should do some error checking here.  */
    12 -      exp_in_base = strtol (expptr, (char **) 0, exp_base);
    13 +      {
    14 +	/* Scan and convert the exponent, in base exp_base.  */
    15 +	long dig, neg = -(long) ('-' == expptr[0]);
    16 +	expptr -= neg;			/* conditional increment */
    17 +	c = (unsigned char) *expptr++;
    18 +	dig = digit_value[c];
    19 +	if (dig >= exp_base)
    20 +	  {
    21 +	    TMP_FREE;
    22 +	    return -1;
    23 +	  }
    24 +	exp_in_base = dig;
    25 +	c = (unsigned char) *expptr++;
    26 +	dig = digit_value[c];
    27 +	while (dig < exp_base)
    28 +	  {
    29 +	    exp_in_base = exp_in_base * exp_base;
    30 +	    exp_in_base += dig;
    31 +	    c = (unsigned char) *expptr++;
    32 +	    dig = digit_value[c];
    33 +	  }
    34 +	exp_in_base = (exp_in_base ^ neg) - neg; /* conditional negation */
    35 +      }
    36      else
    37        exp_in_base = 0;
    38      if (dotpos != 0)