Change functions to ANSI C.
[openssl.git] / crypto / stack / stack.c
index 712089ef3179d5b7742aaec83aed01666bd7421d..f0e59218117b26499aae62680cbee789573b8d41 100644 (file)
@@ -1,5 +1,5 @@
 /* crypto/stack/stack.c */
-/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
  * This package is an SSL implementation written
@@ -72,7 +72,7 @@
 #undef MIN_NODES
 #define MIN_NODES      4
 
-char *STACK_version="STACK part of SSLeay 0.8.1b 29-Jun-1998";
+const char *STACK_version="Stack" OPENSSL_VERSION_PTEXT;
 
 #ifndef NOPROTO
 #define        FP_ICC  (int (*)(const void *,const void *))
@@ -82,17 +82,18 @@ char *STACK_version="STACK part of SSLeay 0.8.1b 29-Jun-1998";
 
 #include <errno.h>
 
-void sk_set_cmp_func(sk,c)
-STACK *sk;
-int (*c)();
+int (*sk_set_cmp_func(STACK *sk, int (*c)()))(void)
        {
+       int (*old)()=sk->comp;
+
        if (sk->comp != c)
                sk->sorted=0;
        sk->comp=c;
+
+       return old;
        }
 
-STACK *sk_dup(sk)
-STACK *sk;
+STACK *sk_dup(STACK *sk)
        {
        STACK *ret;
        char **s;
@@ -113,8 +114,7 @@ err:
        return(NULL);
        }
 
-STACK *sk_new(c)
-int (*c)();
+STACK *sk_new(int (*c)())
        {
        STACK *ret;
        int i;
@@ -136,10 +136,7 @@ err0:
        return(NULL);
        }
 
-int sk_insert(st,data,loc)
-STACK *st;
-char *data;
-int loc;
+int sk_insert(STACK *st, char *data, int loc)
        {
        char **s;
 
@@ -161,7 +158,7 @@ int loc;
 
                f=(char **)st->data;
                t=(char **)&(st->data[1]);
-               for (i=st->num; i>loc; i--)
+               for (i=st->num; i>=loc; i--)
                        t[i]=f[i];
                        
 #ifdef undef /* no memmove on sunos :-( */
@@ -176,9 +173,7 @@ int loc;
        return(st->num);
        }
 
-char *sk_delete_ptr(st,p)
-STACK *st;
-char *p;
+char *sk_delete_ptr(STACK *st, char *p)
        {
        int i;
 
@@ -188,26 +183,30 @@ char *p;
        return(NULL);
        }
 
-char *sk_delete(st,loc)
-STACK *st;
-int loc;
+char *sk_delete(STACK *st, int loc)
        {
        char *ret;
+       int i,j;
 
        if ((st->num == 0) || (loc < 0) || (loc >= st->num)) return(NULL);
 
        ret=st->data[loc];
        if (loc != st->num-1)
-               memcpy( &(st->data[loc]),
-                       &(st->data[loc+1]),
-                       sizeof(char *)*(st->num-loc-1));
+               {
+               j=st->num-1;
+               for (i=loc; i<j; i++)
+                       st->data[i]=st->data[i+1];
+               /* In theory memcpy is not safe for this
+                * memcpy( &(st->data[loc]),
+                *      &(st->data[loc+1]),
+                *      sizeof(char *)*(st->num-loc-1));
+                */
+               }
        st->num--;
        return(ret);
        }
 
-int sk_find(st,data)
-STACK *st;
-char *data;
+int sk_find(STACK *st, char *data)
        {
        char **r;
        int i;
@@ -237,38 +236,31 @@ char *data;
        return(i);
        }
 
-int sk_push(st,data)
-STACK *st;
-char *data;
+int sk_push(STACK *st, char *data)
        {
        return(sk_insert(st,data,st->num));
        }
 
-int sk_unshift(st,data)
-STACK *st;
-char *data;
+int sk_unshift(STACK *st, char *data)
        {
        return(sk_insert(st,data,0));
        }
 
-char *sk_shift(st)
-STACK *st;
+char *sk_shift(STACK *st)
        {
        if (st == NULL) return(NULL);
        if (st->num <= 0) return(NULL);
        return(sk_delete(st,0));
        }
 
-char *sk_pop(st)
-STACK *st;
+char *sk_pop(STACK *st)
        {
        if (st == NULL) return(NULL);
        if (st->num <= 0) return(NULL);
        return(sk_delete(st,st->num-1));
        }
 
-void sk_zero(st)
-STACK *st;
+void sk_zero(STACK *st)
        {
        if (st == NULL) return;
        if (st->num <= 0) return;
@@ -276,9 +268,7 @@ STACK *st;
        st->num=0;
        }
 
-void sk_pop_free(st,func)
-STACK *st;
-void (*func)();
+void sk_pop_free(STACK *st, void (*func)())
        {
        int i;
 
@@ -289,8 +279,7 @@ void (*func)();
        sk_free(st);
        }
 
-void sk_free(st)
-STACK *st;
+void sk_free(STACK *st)
        {
        if (st == NULL) return;
        if (st->data != NULL) Free((char *)st->data);