From b333ef639ebe536c79bd62836f0a001972f7b465 Mon Sep 17 00:00:00 2001
From: Fredrik Noring <noring@nocrew.org>
Date: Fri, 9 Jun 2000 18:57:19 +0200
Subject: [PATCH] Fix for + in string->int convesion.

Rev: src/modules/Gmp/mpz_glue.c:1.77
---
 src/modules/Gmp/mpz_glue.c | 38 ++++++++++++++++++++++----------------
 1 file changed, 22 insertions(+), 16 deletions(-)

diff --git a/src/modules/Gmp/mpz_glue.c b/src/modules/Gmp/mpz_glue.c
index ef1fb6bbc1..d15e2e74f5 100644
--- a/src/modules/Gmp/mpz_glue.c
+++ b/src/modules/Gmp/mpz_glue.c
@@ -4,7 +4,7 @@
 ||| See the files COPYING and DISCLAIMER for more information.
 \*/
 #include "global.h"
-RCSID("$Id: mpz_glue.c,v 1.76 2000/04/25 23:30:39 marcus Exp $");
+RCSID("$Id: mpz_glue.c,v 1.77 2000/06/09 16:57:19 noring Exp $");
 #include "gmp_machine.h"
 
 #if defined(HAVE_GMP2_GMP_H) && defined(HAVE_LIBGMP2)
@@ -91,31 +91,37 @@ static void get_mpz_from_digits(MP_INT *tmp,
   if(!base || ((base >= 2) && (base <= 36)))
   {
     int offset = 0;
-    
-    /* We need to fix the case with binary 0b101... and -0b101... numbers. */
-    if(base == 0 && digits->len > 2)
+    int neg = 0;
+
+    if(digits->len > 1)
     {
-      if(INDEX_CHARP(digits->str, 0, digits->size_shift) == '-')
+      if(INDEX_CHARP(digits->str, 0, digits->size_shift) == '+')
 	offset += 1;
-      if((INDEX_CHARP(digits->str, offset, digits->size_shift) == '0') &&
-	 ((INDEX_CHARP(digits->str, offset+1, digits->size_shift) == 'b') ||
-	  (INDEX_CHARP(digits->str, offset+1, digits->size_shift) == 'B')))
+      else if(INDEX_CHARP(digits->str, 0, digits->size_shift) == '-')
       {
-	offset += 2;
-	base = 2;
+	offset += 1;
+	neg = 1;
+      }
+
+      /* We need to fix the case with binary
+	 0b101... and -0b101... numbers. */
+      if(!base && digits->len > 2)
+      {
+	if((INDEX_CHARP(digits->str, offset, digits->size_shift) == '0') &&
+	   ((INDEX_CHARP(digits->str, offset+1, digits->size_shift) == 'b') ||
+	    (INDEX_CHARP(digits->str, offset+1, digits->size_shift) == 'B')))
+	{
+	  offset += 2;
+	  base = 2;
+	}
       }
-      else
-	offset = 0;
     }
 
     if (mpz_set_str(tmp, digits->str + offset, base))
       error("invalid digits, cannot convert to mpz\n");
 
-    if(offset == 3)
-    {
-      /* This means a negative binary number. */
+    if(neg)
       mpz_neg(tmp, tmp);
-    }
   }
   else if(base == 256)
   {
-- 
GitLab