Lines Matching refs:st
178 static int sk_reserve(OPENSSL_STACK *st, int n, int exact) in sk_reserve() argument
184 if (n > max_nodes - st->num) in sk_reserve()
188 num_alloc = st->num + n; in sk_reserve()
193 if (st->data == NULL) { in sk_reserve()
198 if ((st->data = OPENSSL_zalloc(sizeof(void *) * num_alloc)) == NULL) { in sk_reserve()
202 st->num_alloc = num_alloc; in sk_reserve()
207 if (num_alloc <= st->num_alloc) in sk_reserve()
209 num_alloc = compute_growth(num_alloc, st->num_alloc); in sk_reserve()
212 } else if (num_alloc == st->num_alloc) { in sk_reserve()
216 tmpdata = OPENSSL_realloc((void *)st->data, sizeof(void *) * num_alloc); in sk_reserve()
220 st->data = tmpdata; in sk_reserve()
221 st->num_alloc = num_alloc; in sk_reserve()
227 OPENSSL_STACK *st = OPENSSL_zalloc(sizeof(OPENSSL_STACK)); in OPENSSL_sk_new_reserve() local
229 if (st == NULL) in OPENSSL_sk_new_reserve()
232 st->comp = c; in OPENSSL_sk_new_reserve()
235 return st; in OPENSSL_sk_new_reserve()
237 if (!sk_reserve(st, n, 1)) { in OPENSSL_sk_new_reserve()
238 OPENSSL_sk_free(st); in OPENSSL_sk_new_reserve()
242 return st; in OPENSSL_sk_new_reserve()
245 int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n) in OPENSSL_sk_reserve() argument
247 if (st == NULL) in OPENSSL_sk_reserve()
252 return sk_reserve(st, n, 1); in OPENSSL_sk_reserve()
255 int OPENSSL_sk_insert(OPENSSL_STACK *st, const void *data, int loc) in OPENSSL_sk_insert() argument
257 if (st == NULL || st->num == max_nodes) in OPENSSL_sk_insert()
260 if (!sk_reserve(st, 1, 0)) in OPENSSL_sk_insert()
263 if ((loc >= st->num) || (loc < 0)) { in OPENSSL_sk_insert()
264 st->data[st->num] = data; in OPENSSL_sk_insert()
266 memmove(&st->data[loc + 1], &st->data[loc], in OPENSSL_sk_insert()
267 sizeof(st->data[0]) * (st->num - loc)); in OPENSSL_sk_insert()
268 st->data[loc] = data; in OPENSSL_sk_insert()
270 st->num++; in OPENSSL_sk_insert()
271 st->sorted = 0; in OPENSSL_sk_insert()
272 return st->num; in OPENSSL_sk_insert()
275 static ossl_inline void *internal_delete(OPENSSL_STACK *st, int loc) in internal_delete() argument
277 const void *ret = st->data[loc]; in internal_delete()
279 if (loc != st->num - 1) in internal_delete()
280 memmove(&st->data[loc], &st->data[loc + 1], in internal_delete()
281 sizeof(st->data[0]) * (st->num - loc - 1)); in internal_delete()
282 st->num--; in internal_delete()
287 void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p) in OPENSSL_sk_delete_ptr() argument
291 for (i = 0; i < st->num; i++) in OPENSSL_sk_delete_ptr()
292 if (st->data[i] == p) in OPENSSL_sk_delete_ptr()
293 return internal_delete(st, i); in OPENSSL_sk_delete_ptr()
297 void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc) in OPENSSL_sk_delete() argument
299 if (st == NULL || loc < 0 || loc >= st->num) in OPENSSL_sk_delete()
302 return internal_delete(st, loc); in OPENSSL_sk_delete()
305 static int internal_find(OPENSSL_STACK *st, const void *data, in internal_find() argument
311 if (st == NULL || st->num == 0) in internal_find()
314 if (st->comp == NULL) { in internal_find()
315 for (i = 0; i < st->num; i++) in internal_find()
316 if (st->data[i] == data) { in internal_find()
326 if (!st->sorted) { in internal_find()
327 if (st->num > 1) in internal_find()
328 qsort(st->data, st->num, sizeof(void *), st->comp); in internal_find()
329 st->sorted = 1; /* empty or single-element stack is considered sorted */ in internal_find()
335 r = ossl_bsearch(&data, st->data, st->num, sizeof(void *), st->comp, in internal_find()
343 while (p < st->data + st->num) { in internal_find()
344 if (st->comp(&data, p) != 0) in internal_find()
352 return r == NULL ? -1 : (int)((const void **)r - st->data); in internal_find()
355 int OPENSSL_sk_find(OPENSSL_STACK *st, const void *data) in OPENSSL_sk_find() argument
357 return internal_find(st, data, OSSL_BSEARCH_FIRST_VALUE_ON_MATCH, NULL); in OPENSSL_sk_find()
360 int OPENSSL_sk_find_ex(OPENSSL_STACK *st, const void *data) in OPENSSL_sk_find_ex() argument
362 return internal_find(st, data, OSSL_BSEARCH_VALUE_ON_NOMATCH, NULL); in OPENSSL_sk_find_ex()
365 int OPENSSL_sk_find_all(OPENSSL_STACK *st, const void *data, int *pnum) in OPENSSL_sk_find_all() argument
367 return internal_find(st, data, OSSL_BSEARCH_FIRST_VALUE_ON_MATCH, pnum); in OPENSSL_sk_find_all()
370 int OPENSSL_sk_push(OPENSSL_STACK *st, const void *data) in OPENSSL_sk_push() argument
372 if (st == NULL) in OPENSSL_sk_push()
374 return OPENSSL_sk_insert(st, data, st->num); in OPENSSL_sk_push()
377 int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data) in OPENSSL_sk_unshift() argument
379 return OPENSSL_sk_insert(st, data, 0); in OPENSSL_sk_unshift()
382 void *OPENSSL_sk_shift(OPENSSL_STACK *st) in OPENSSL_sk_shift() argument
384 if (st == NULL || st->num == 0) in OPENSSL_sk_shift()
386 return internal_delete(st, 0); in OPENSSL_sk_shift()
389 void *OPENSSL_sk_pop(OPENSSL_STACK *st) in OPENSSL_sk_pop() argument
391 if (st == NULL || st->num == 0) in OPENSSL_sk_pop()
393 return internal_delete(st, st->num - 1); in OPENSSL_sk_pop()
396 void OPENSSL_sk_zero(OPENSSL_STACK *st) in OPENSSL_sk_zero() argument
398 if (st == NULL || st->num == 0) in OPENSSL_sk_zero()
400 memset(st->data, 0, sizeof(*st->data) * st->num); in OPENSSL_sk_zero()
401 st->num = 0; in OPENSSL_sk_zero()
404 void OPENSSL_sk_pop_free(OPENSSL_STACK *st, OPENSSL_sk_freefunc func) in OPENSSL_sk_pop_free() argument
408 if (st == NULL) in OPENSSL_sk_pop_free()
410 for (i = 0; i < st->num; i++) in OPENSSL_sk_pop_free()
411 if (st->data[i] != NULL) in OPENSSL_sk_pop_free()
412 func((char *)st->data[i]); in OPENSSL_sk_pop_free()
413 OPENSSL_sk_free(st); in OPENSSL_sk_pop_free()
416 void OPENSSL_sk_free(OPENSSL_STACK *st) in OPENSSL_sk_free() argument
418 if (st == NULL) in OPENSSL_sk_free()
420 OPENSSL_free(st->data); in OPENSSL_sk_free()
421 OPENSSL_free(st); in OPENSSL_sk_free()
424 int OPENSSL_sk_num(const OPENSSL_STACK *st) in OPENSSL_sk_num() argument
426 return st == NULL ? -1 : st->num; in OPENSSL_sk_num()
429 void *OPENSSL_sk_value(const OPENSSL_STACK *st, int i) in OPENSSL_sk_value() argument
431 if (st == NULL || i < 0 || i >= st->num) in OPENSSL_sk_value()
433 return (void *)st->data[i]; in OPENSSL_sk_value()
436 void *OPENSSL_sk_set(OPENSSL_STACK *st, int i, const void *data) in OPENSSL_sk_set() argument
438 if (st == NULL || i < 0 || i >= st->num) in OPENSSL_sk_set()
440 st->data[i] = data; in OPENSSL_sk_set()
441 st->sorted = 0; in OPENSSL_sk_set()
442 return (void *)st->data[i]; in OPENSSL_sk_set()
445 void OPENSSL_sk_sort(OPENSSL_STACK *st) in OPENSSL_sk_sort() argument
447 if (st != NULL && !st->sorted && st->comp != NULL) { in OPENSSL_sk_sort()
448 if (st->num > 1) in OPENSSL_sk_sort()
449 qsort(st->data, st->num, sizeof(void *), st->comp); in OPENSSL_sk_sort()
450 st->sorted = 1; /* empty or single-element stack is considered sorted */ in OPENSSL_sk_sort()
454 int OPENSSL_sk_is_sorted(const OPENSSL_STACK *st) in OPENSSL_sk_is_sorted() argument
456 return st == NULL ? 1 : st->sorted; in OPENSSL_sk_is_sorted()