diff options
author | Paul Yang <yang.yang@baishancloud.com> | 2017-10-20 01:42:39 +0800 |
---|---|---|
committer | Pauli <paul.dale@oracle.com> | 2017-10-26 09:35:36 +1000 |
commit | 3ceab379fbaaf11b2adee0fb2a93c517272ee6c3 (patch) | |
tree | a1c7b3f6fedd09b9afca618c8cecaf941e062096 /crypto/stack/stack.c | |
parent | 82d89ef72515ad3d78c0160641faf30b8b024dda (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/stack.c')
-rw-r--r-- | crypto/stack/stack.c | 28 |
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) |