return 1;
}
+static ossl_inline int cmp_with_thunk(const OPENSSL_STACK *st, const void *a, const void *b)
+{
+ return (st->cmp_thunk == NULL) ? st->comp(a, b) : st->cmp_thunk(st->comp, a, b);
+}
+
OPENSSL_STACK *OPENSSL_sk_new_reserve(OPENSSL_sk_compfunc c, int n)
{
OPENSSL_STACK *st = OPENSSL_zalloc(sizeof(OPENSSL_STACK));
if (st->sorted && st->num > 1) {
if (st->comp != NULL) {
if (loc > 0) {
- cmp_ret = (st->cmp_thunk == NULL) ? st->comp(&st->data[loc - 1], &st->data[loc]) : st->cmp_thunk(st->comp, &st->data[loc - 1], &st->data[loc]);
+ cmp_ret = cmp_with_thunk(st, &st->data[loc - 1], &st->data[loc]);
if (cmp_ret > 0)
st->sorted = 0;
}
if (loc < st->num - 1) {
- cmp_ret = (st->cmp_thunk == NULL) ? st->comp(&st->data[loc + 1], &st->data[loc]) : st->cmp_thunk(st->comp, &st->data[loc + 1], &st->data[loc]);
+ cmp_ret = cmp_with_thunk(st, &st->data[loc + 1], &st->data[loc]);
if (cmp_ret < 0)
st->sorted = 0;
}
int res = -1;
for (i = 0; i < st->num; i++) {
- cmp_ret = (st->cmp_thunk == NULL) ? st->comp(&data, st->data + i) : st->cmp_thunk(st->comp, &data, st->data + i);
+ cmp_ret = cmp_with_thunk(st, &data, st->data + i);
if (cmp_ret == 0) {
if (res == -1)
res = i;
const void **p = (const void **)r;
while (p < st->data + st->num) {
- cmp_ret = st->cmp_thunk == NULL ? st->comp(&data, p) : st->cmp_thunk(st->comp, &data, p);
+ cmp_ret = cmp_with_thunk(st, &data, p);
if (cmp_ret != 0)
break;
++*pnum;