提交 fbb7b33b 编写于 作者: A Andy Polyakov

stack/stack.c: various cleanups.

Reviewed-by: NPaul Dale <paul.dale@oracle.com>
Reviewed-by: NRichard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/4455)
上级 c8b749c3
...@@ -46,9 +46,6 @@ OPENSSL_STACK *OPENSSL_sk_dup(const OPENSSL_STACK *sk) ...@@ -46,9 +46,6 @@ OPENSSL_STACK *OPENSSL_sk_dup(const OPENSSL_STACK *sk)
{ {
OPENSSL_STACK *ret; OPENSSL_STACK *ret;
if (sk->num < 0)
return NULL;
if ((ret = OPENSSL_malloc(sizeof(*ret))) == NULL) if ((ret = OPENSSL_malloc(sizeof(*ret))) == NULL)
return NULL; return NULL;
...@@ -78,9 +75,6 @@ OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *sk, ...@@ -78,9 +75,6 @@ OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *sk,
OPENSSL_STACK *ret; OPENSSL_STACK *ret;
int i; int i;
if (sk->num < 0)
return NULL;
if ((ret = OPENSSL_malloc(sizeof(*ret))) == NULL) if ((ret = OPENSSL_malloc(sizeof(*ret))) == NULL)
return NULL; return NULL;
...@@ -211,7 +205,7 @@ static int sk_reserve(OPENSSL_STACK *st, int n, int exact) ...@@ -211,7 +205,7 @@ static int sk_reserve(OPENSSL_STACK *st, int n, int exact)
int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n) int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n)
{ {
if (st == NULL || st->num < 0) if (st == NULL)
return 0; return 0;
if (n < 0) if (n < 0)
...@@ -221,7 +215,7 @@ int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n) ...@@ -221,7 +215,7 @@ int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n)
int OPENSSL_sk_insert(OPENSSL_STACK *st, const void *data, int loc) int OPENSSL_sk_insert(OPENSSL_STACK *st, const void *data, int loc)
{ {
if (st == NULL || st->num < 0 || st->num == max_nodes) if (st == NULL || st->num == max_nodes)
return 0; return 0;
if (!sk_reserve(st, 1, 0)) if (!sk_reserve(st, 1, 0))
...@@ -281,17 +275,21 @@ static int internal_find(OPENSSL_STACK *st, const void *data, ...@@ -281,17 +275,21 @@ static int internal_find(OPENSSL_STACK *st, const void *data,
if (st->comp == NULL) { if (st->comp == NULL) {
for (i = 0; i < st->num; i++) for (i = 0; i < st->num; i++)
if (st->data[i] == data) if (st->data[i] == data)
return (i); return i;
return (-1); return -1;
}
if (!st->sorted) {
if (st->num > 1)
qsort(st->data, st->num, sizeof(void *), st->comp);
st->sorted = 1; /* empty or single-element stack is considered sorted */
} }
OPENSSL_sk_sort(st);
if (data == NULL) if (data == NULL)
return (-1); return -1;
r = OBJ_bsearch_ex_(&data, st->data, st->num, sizeof(void *), st->comp, r = OBJ_bsearch_ex_(&data, st->data, st->num, sizeof(void *), st->comp,
ret_val_options); ret_val_options);
if (r == NULL)
return (-1); return r == NULL ? -1 : (int)((const void **)r - st->data);
return (int)((const void **)r - st->data);
} }
int OPENSSL_sk_find(OPENSSL_STACK *st, const void *data) int OPENSSL_sk_find(OPENSSL_STACK *st, const void *data)
...@@ -313,32 +311,26 @@ int OPENSSL_sk_push(OPENSSL_STACK *st, const void *data) ...@@ -313,32 +311,26 @@ int OPENSSL_sk_push(OPENSSL_STACK *st, const void *data)
int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data) int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data)
{ {
return (OPENSSL_sk_insert(st, data, 0)); return OPENSSL_sk_insert(st, data, 0);
} }
void *OPENSSL_sk_shift(OPENSSL_STACK *st) void *OPENSSL_sk_shift(OPENSSL_STACK *st)
{ {
if (st == NULL) if (st == NULL || st->num == 0)
return NULL;
if (st->num <= 0)
return NULL; return NULL;
return internal_delete(st, 0); return internal_delete(st, 0);
} }
void *OPENSSL_sk_pop(OPENSSL_STACK *st) void *OPENSSL_sk_pop(OPENSSL_STACK *st)
{ {
if (st == NULL) if (st == NULL || st->num == 0)
return NULL;
if (st->num <= 0)
return NULL; return NULL;
return internal_delete(st, st->num - 1); return internal_delete(st, st->num - 1);
} }
void OPENSSL_sk_zero(OPENSSL_STACK *st) void OPENSSL_sk_zero(OPENSSL_STACK *st)
{ {
if (st == NULL) if (st == NULL || st->num == 0)
return;
if (st->num <= 0)
return; return;
memset(st->data, 0, sizeof(*st->data) * st->num); memset(st->data, 0, sizeof(*st->data) * st->num);
st->num = 0; st->num = 0;
...@@ -366,9 +358,7 @@ void OPENSSL_sk_free(OPENSSL_STACK *st) ...@@ -366,9 +358,7 @@ void OPENSSL_sk_free(OPENSSL_STACK *st)
int OPENSSL_sk_num(const OPENSSL_STACK *st) int OPENSSL_sk_num(const OPENSSL_STACK *st)
{ {
if (st == NULL) return st == NULL ? -1 : st->num;
return -1;
return st->num;
} }
void *OPENSSL_sk_value(const OPENSSL_STACK *st, int i) void *OPENSSL_sk_value(const OPENSSL_STACK *st, int i)
...@@ -383,21 +373,20 @@ void *OPENSSL_sk_set(OPENSSL_STACK *st, int i, const void *data) ...@@ -383,21 +373,20 @@ void *OPENSSL_sk_set(OPENSSL_STACK *st, int i, const void *data)
if (st == NULL || i < 0 || i >= st->num) if (st == NULL || i < 0 || i >= st->num)
return NULL; return NULL;
st->data[i] = data; st->data[i] = data;
st->sorted = 0;
return (void *)st->data[i]; return (void *)st->data[i];
} }
void OPENSSL_sk_sort(OPENSSL_STACK *st) void OPENSSL_sk_sort(OPENSSL_STACK *st)
{ {
if (st && !st->sorted && st->comp != NULL) { if (st != NULL && !st->sorted && st->comp != NULL) {
if (st->data != NULL) if (st->num > 1)
qsort(st->data, st->num, sizeof(void *), st->comp); qsort(st->data, st->num, sizeof(void *), st->comp);
st->sorted = 1; st->sorted = 1; /* empty or single-element stack is considered sorted */
} }
} }
int OPENSSL_sk_is_sorted(const OPENSSL_STACK *st) int OPENSSL_sk_is_sorted(const OPENSSL_STACK *st)
{ {
if (st == NULL) return st == NULL ? 1 : st->sorted;
return 1;
return st->sorted;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册