Commit 7d14fd029c7c2b07c84ad69dc73f966a0d2a16f0

Steffen Jaeckel 2010-06-02T15:09:36

+ allow mp_shrink to shrink initialized, but empty MPI's

diff --git a/bn_mp_shrink.c b/bn_mp_shrink.c
index b9e47dd..8b5075a 100644
--- a/bn_mp_shrink.c
+++ b/bn_mp_shrink.c
@@ -19,12 +19,17 @@
 int mp_shrink (mp_int * a)
 {
   mp_digit *tmp;
-  if (a->alloc != a->used && a->used > 0) {
-    if ((tmp = OPT_CAST(mp_digit) XREALLOC (a->dp, sizeof (mp_digit) * a->used)) == NULL) {
+  int used = 1;
+  
+  if(a->used > 0)
+    used = a->used;
+  
+  if (a->alloc != used) {
+    if ((tmp = OPT_CAST(mp_digit) XREALLOC (a->dp, sizeof (mp_digit) * used)) == NULL) {
       return MP_MEM;
     }
     a->dp    = tmp;
-    a->alloc = a->used;
+    a->alloc = used;
   }
   return MP_OKAY;
 }
diff --git a/pre_gen/mpi.c b/pre_gen/mpi.c
index df89d0c..167b951 100644
--- a/pre_gen/mpi.c
+++ b/pre_gen/mpi.c
@@ -7217,12 +7217,17 @@ int mp_set_int (mp_int * a, unsigned long b)
 int mp_shrink (mp_int * a)
 {
   mp_digit *tmp;
-  if (a->alloc != a->used && a->used > 0) {
-    if ((tmp = OPT_CAST(mp_digit) XREALLOC (a->dp, sizeof (mp_digit) * a->used)) == NULL) {
+  int used = 1;
+  
+  if(a->used > 0)
+    used = a->used;
+  
+  if (a->alloc != used) {
+    if ((tmp = OPT_CAST(mp_digit) XREALLOC (a->dp, sizeof (mp_digit) * used)) == NULL) {
       return MP_MEM;
     }
     a->dp    = tmp;
-    a->alloc = a->used;
+    a->alloc = used;
   }
   return MP_OKAY;
 }