test_mont was exercising 100-bit multiplication modulus X*I-bit, where
[openssl.git] / crypto / stack / stack.c
index 5cd28e1f18383780f5a08247c3df9ec5cddb4465..58e9126339b6fef47cf135d2e52a5327c8ad929d 100644 (file)
@@ -59,7 +59,7 @@
 /* Code for stacks
  * Author - Eric Young v 1.0
  * 1.2 eay 12-Mar-97 - Modified sk_find so that it _DOES_ return the
- *                     lowest index for the seached item.
+ *                     lowest index for the searched item.
  *
  * 1.1 eay - Take from netdb and added to SSLeay
  *
 
 const char *STACK_version="Stack" OPENSSL_VERSION_PTEXT;
 
-#ifndef NOPROTO
 #define        FP_ICC  (int (*)(const void *,const void *))
-#else
-#define FP_ICC
-#endif
-
 #include <errno.h>
 
 int (*sk_set_cmp_func(STACK *sk, int (*c)()))(void)
@@ -131,7 +126,7 @@ STACK *sk_new(int (*c)())
        ret->sorted=0;
        return(ret);
 err1:
-       Free((char *)ret);
+       Free(ret);
 err0:
        return(NULL);
        }
@@ -140,6 +135,7 @@ int sk_insert(STACK *st, char *data, int loc)
        {
        char **s;
 
+       if(st == NULL) return 0;
        if (st->num_alloc <= st->num+1)
                {
                s=(char **)Realloc((char *)st->data,
@@ -188,7 +184,8 @@ char *sk_delete(STACK *st, int loc)
        char *ret;
        int i,j;
 
-       if ((st->num == 0) || (loc < 0) || (loc >= st->num)) return(NULL);
+       if ((st == NULL) || (st->num == 0) || (loc < 0)
+                                        || (loc >= st->num)) return(NULL);
 
        ret=st->data[loc];
        if (loc != st->num-1)
@@ -211,6 +208,7 @@ int sk_find(STACK *st, char *data)
        char **r;
        int i;
        int (*comp_func)();
+       if(st == NULL) return -1;
 
        if (st->comp == NULL)
                {
@@ -219,13 +217,9 @@ int sk_find(STACK *st, char *data)
                                return(i);
                return(-1);
                }
-       comp_func=(int (*)())st->comp;
-       if (!st->sorted)
-               {
-               qsort((char *)st->data,st->num,sizeof(char *),FP_ICC comp_func);
-               st->sorted=1;
-               }
+       sk_sort(st);
        if (data == NULL) return(-1);
+       comp_func=(int (*)())st->comp;
        r=(char **)bsearch(&data,(char *)st->data,
                st->num,sizeof(char *),FP_ICC comp_func);
        if (r == NULL) return(-1);
@@ -282,7 +276,36 @@ void sk_pop_free(STACK *st, void (*func)())
 void sk_free(STACK *st)
        {
        if (st == NULL) return;
-       if (st->data != NULL) Free((char *)st->data);
-       Free((char *)st);
+       if (st->data != NULL) Free(st->data);
+       Free(st);
        }
 
+int sk_num(STACK *st)
+{
+       if(st == NULL) return -1;
+       return st->num;
+}
+
+char *sk_value(STACK *st, int i)
+{
+       if(st == NULL) return NULL;
+       return st->data[i];
+}
+
+char *sk_set(STACK *st, int i, char *value)
+{
+       if(st == NULL) return NULL;
+       return (st->data[i] = value);
+}
+
+void sk_sort(STACK *st)
+    {
+    if (!st->sorted)
+       {
+       int (*comp_func)();
+
+       comp_func=(int (*)())st->comp;
+       qsort(st->data,st->num,sizeof(char *),FP_ICC comp_func);
+       st->sorted=1;
+       }
+    }