if no comparison function set make sk_sort no op
[openssl.git] / crypto / stack / stack.c
index c395d58230a35012724ff0b1110ada4160b6883d..d486f335b2ebec07c9bfef6e2a9890ddfc61a434 100644 (file)
@@ -1,4 +1,3 @@
-/* crypto/stack/stack.c */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -56,7 +55,7 @@
  * [including the GNU Public Licence.]
  */
 #include <stdio.h>
-#include "cryptlib.h"
+#include "internal/cryptlib.h"
 #include <openssl/stack.h>
 #include <openssl/objects.h>
 
@@ -71,8 +70,6 @@ struct stack_st {
 #undef MIN_NODES
 #define MIN_NODES       4
 
-const char STACK_version[] = "Stack" OPENSSL_VERSION_PTEXT;
-
 #include <errno.h>
 
 int (*sk_set_cmp_func(_STACK *sk, int (*c) (const void *, const void *)))
@@ -152,19 +149,15 @@ _STACK *sk_new_null(void)
 _STACK *sk_new(int (*c) (const void *, const void *))
 {
     _STACK *ret;
-    int i;
 
-    if ((ret = OPENSSL_malloc(sizeof(_STACK))) == NULL)
+    if ((ret = OPENSSL_zalloc(sizeof(_STACK))) == NULL)
         goto err;
-    if ((ret->data = OPENSSL_malloc(sizeof(*ret->data) * MIN_NODES)) == NULL)
+    if ((ret->data = OPENSSL_zalloc(sizeof(*ret->data) * MIN_NODES)) == NULL)
         goto err;
-    for (i = 0; i < MIN_NODES; i++)
-        ret->data[i] = NULL;
     ret->comp = c;
     ret->num_alloc = MIN_NODES;
-    ret->num = 0;
-    ret->sorted = 0;
     return (ret);
+
  err:
     OPENSSL_free(ret);
     return (NULL);
@@ -343,7 +336,7 @@ void *sk_set(_STACK *st, int i, void *value)
 
 void sk_sort(_STACK *st)
 {
-    if (st && !st->sorted) {
+    if (st && !st->sorted && st->comp != NULL) {
         int (*comp_func) (const void *, const void *);
 
         /*