bss_dgram.c,d1_lib.c: make it compile with mingw.
[oweals/openssl.git] / crypto / bn / bn_word.c
index bc5905fef4279e644ae4f2090ad6e7a5f4bd0f8d..de83a15b99c53c0da9c07b1619153b9240359e18 100644 (file)
@@ -69,6 +69,9 @@ BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w)
 #endif
        int i;
 
+       if (w == 0)
+               return (BN_ULONG)-1;
+
        bn_check_top(a);
        w&=BN_MASK2;
        for (i=a->top-1; i>=0; i--)
@@ -94,7 +97,7 @@ BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w)
 
        if (!w)
                /* actually this an error (division by zero) */
-               return 0;
+               return (BN_ULONG)-1;
        if (a->top == 0)
                return 0;
 
@@ -102,7 +105,7 @@ BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w)
        j = BN_BITS2 - BN_num_bits_word(w);
        w <<= j;
        if (!BN_lshift(a, a, j))
-               return 0;
+               return (BN_ULONG)-1;
 
        for (i=a->top-1; i>=0; i--)
                {
@@ -141,26 +144,17 @@ int BN_add_word(BIGNUM *a, BN_ULONG w)
                        a->neg=!(a->neg);
                return(i);
                }
-       /* Only expand (and risk failing) if it's possibly necessary */
-       if (((BN_ULONG)(a->d[a->top - 1] + 1) == 0) &&
-                       (bn_wexpand(a,a->top+1) == NULL))
-               return(0);
-       i=0;
-       for (;;)
+       for (i=0;w!=0 && i<a->top;i++)
                {
-               if (i >= a->top)
-                       l=w;
-               else
-                       l=(a->d[i]+w)&BN_MASK2;
-               a->d[i]=l;
-               if (w > l)
-                       w=1;
-               else
-                       break;
-               i++;
+               a->d[i] = l = (a->d[i]+w)&BN_MASK2;
+               w = (w>l)?1:0;
                }
-       if (i >= a->top)
+       if (w && i==a->top)
+               {
+               if (bn_wexpand(a,a->top+1) == NULL) return 0;
                a->top++;
+               a->d[i]=w;
+               }
        bn_check_top(a);
        return(1);
        }