* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
-
-/*-
- * 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 searched item.
- *
- * 1.1 eay - Take from netdb and added to SSLeay
- *
- * 1.0 eay - First version 29/07/92
- */
#include <stdio.h>
#include "cryptlib.h"
#include <openssl/stack.h>
#include <openssl/objects.h>
+struct stack_st {
+ int num;
+ char **data;
+ int sorted;
+ int num_alloc;
+ int (*comp) (const void *, const void *);
+};
+
#undef MIN_NODES
#define MIN_NODES 4
if ((ret = sk_new(sk->comp)) == NULL)
goto err;
- s = (char **)OPENSSL_realloc((char *)ret->data,
- (unsigned int)sizeof(char *) *
- sk->num_alloc);
+ s = OPENSSL_realloc((char *)ret->data,
+ (unsigned int)sizeof(char *) * sk->num_alloc);
if (s == NULL)
goto err;
ret->data = s;
ret->comp = sk->comp;
return (ret);
err:
- if (ret)
- sk_free(ret);
+ sk_free(ret);
return (NULL);
}
ret->sorted = sk->sorted;
ret->num = sk->num;
ret->num_alloc = sk->num > MIN_NODES ? sk->num : MIN_NODES;
- ret->data = OPENSSL_malloc(sizeof(char *) * ret->num_alloc);
+ ret->data = OPENSSL_malloc(sizeof(*ret->data) * ret->num_alloc);
if (ret->data == NULL) {
OPENSSL_free(ret);
return NULL;
if ((ret = OPENSSL_malloc(sizeof(_STACK))) == NULL)
goto err;
- if ((ret->data = OPENSSL_malloc(sizeof(char *) * MIN_NODES)) == NULL)
+ if ((ret->data = OPENSSL_malloc(sizeof(*ret->data) * MIN_NODES)) == NULL)
goto err;
for (i = 0; i < MIN_NODES; i++)
ret->data[i] = NULL;
ret->sorted = 0;
return (ret);
err:
- if (ret)
- OPENSSL_free(ret);
+ OPENSSL_free(ret);
return (NULL);
}
if ((loc >= (int)st->num) || (loc < 0))
st->data[st->num] = data;
else {
- int i;
- char **f, **t;
-
- f = st->data;
- t = &(st->data[1]);
- for (i = st->num; i >= loc; i--)
- t[i] = f[i];
-
-#ifdef undef /* no memmove on sunos :-( */
memmove(&(st->data[loc + 1]),
&(st->data[loc]), sizeof(char *) * (st->num - loc));
-#endif
st->data[loc] = data;
}
st->num++;
return;
if (st->num <= 0)
return;
- memset((char *)st->data, 0, sizeof(st->data) * st->num);
+ memset(st->data, 0, sizeof(*st->data) * st->num);
st->num = 0;
}
{
if (st == NULL)
return;
- if (st->data != NULL)
- OPENSSL_free(st->data);
+ OPENSSL_free(st->data);
OPENSSL_free(st);
}