summaryrefslogtreecommitdiffstats
path: root/crypto/stack
diff options
context:
space:
mode:
authorPaul Yang <yang.yang@baishancloud.com>2017-10-20 01:42:39 +0800
committerPauli <paul.dale@oracle.com>2017-10-26 09:35:36 +1000
commit3ceab379fbaaf11b2adee0fb2a93c517272ee6c3 (patch)
treea1c7b3f6fedd09b9afca618c8cecaf941e062096 /crypto/stack
parent82d89ef72515ad3d78c0160641faf30b8b024dda (diff)
Add sk_TYPE_new_reserve() function
This is a combination of sk_new and sk_reserve, to make it more convenient to allocate a new stack with reserved memory and comaprison function (if any). Reviewed-by: Paul Dale <paul.dale@oracle.com> Reviewed-by: Andy Polyakov <appro@openssl.org> Reviewed-by: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/4559)
Diffstat (limited to 'crypto/stack')
-rw-r--r--crypto/stack/stack.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/crypto/stack/stack.c b/crypto/stack/stack.c
index 559085a7b8..fc755e36b6 100644
--- a/crypto/stack/stack.c
+++ b/crypto/stack/stack.c
@@ -111,16 +111,12 @@ OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *sk,
OPENSSL_STACK *OPENSSL_sk_new_null(void)
{
- return OPENSSL_zalloc(sizeof(OPENSSL_STACK));
+ return OPENSSL_sk_new_reserve(NULL, 0);
}
OPENSSL_STACK *OPENSSL_sk_new(OPENSSL_sk_compfunc c)
{
- OPENSSL_STACK *ret = OPENSSL_sk_new_null();
-
- if (ret != NULL)
- ret->comp = c;
- return ret;
+ return OPENSSL_sk_new_reserve(c, 0);
}
/*
@@ -203,6 +199,26 @@ static int sk_reserve(OPENSSL_STACK *st, int n, int exact)
return 1;
}
+OPENSSL_STACK *OPENSSL_sk_new_reserve(OPENSSL_sk_compfunc c, int n)
+{
+ OPENSSL_STACK *st = OPENSSL_zalloc(sizeof(OPENSSL_STACK));
+
+ if (st == NULL)
+ return NULL;
+
+ st->comp = c;
+
+ if (n <= 0)
+ return st;
+
+ if (!sk_reserve(st, n, 1)) {
+ OPENSSL_sk_free(st);
+ return NULL;
+ }
+
+ return st;
+}
+
int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n)
{
if (st == NULL)