return old;
}
+static void free_with_thunk(OPENSSL_STACK *sk, OPENSSL_sk_freefunc free_func, const void *data)
+{
+ if (data == NULL)
+ return;
+ if (sk->free_thunk != NULL)
+ sk->free_thunk(free_func, (void *)data);
+ else
+ free_func((void *)data);
+}
+
static OPENSSL_STACK *internal_copy(const OPENSSL_STACK *sk,
OPENSSL_sk_copyfunc copy_func,
OPENSSL_sk_freefunc free_func)
continue;
if ((ret->data[i] = copy_func(sk->data[i])) == NULL) {
while (--i >= 0)
- if (ret->data[i] != NULL)
- free_func((void *)ret->data[i]);
+ free_with_thunk(ret, free_func, ret->data[i]);
goto err;
}
}
if (st == NULL)
return;
- for (i = 0; i < st->num; i++) {
- if (st->data[i] != NULL) {
- if (st->free_thunk != NULL)
- st->free_thunk(func, (void *)st->data[i]);
- else
- func((void *)st->data[i]);
- }
- }
+ for (i = 0; i < st->num; i++)
+ free_with_thunk(st, func, st->data[i]);
+
OPENSSL_sk_free(st);
}