Modify the X509 V3 extension lookup code.
[oweals/openssl.git] / crypto / stack / stack.c
index 242337a391f30cdb67ba328a0f62ae8789089196..8b9671388484d767f49f9691b80b261cc598b219 100644 (file)
@@ -135,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,
@@ -183,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)
@@ -206,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)
                {
@@ -214,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);
@@ -281,3 +280,32 @@ void sk_free(STACK *st)
        Free((char *)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;
+       }
+    }