1 /* 2 * Copyright (c) 2018-2022 Yubico AB. All rights reserved. 3 * Use of this source code is governed by a BSD-style 4 * license that can be found in the LICENSE file. 5 * SPDX-License-Identifier: BSD-2-Clause 6 */ 7 8 #include "fido.h" 9 10 void fido_str_array_free(fido_str_array_t * sa)11fido_str_array_free(fido_str_array_t *sa) 12 { 13 for (size_t i = 0; i < sa->len; i++) 14 free(sa->ptr[i]); 15 16 free(sa->ptr); 17 sa->ptr = NULL; 18 sa->len = 0; 19 } 20 21 void fido_opt_array_free(fido_opt_array_t * oa)22fido_opt_array_free(fido_opt_array_t *oa) 23 { 24 for (size_t i = 0; i < oa->len; i++) 25 free(oa->name[i]); 26 27 free(oa->name); 28 free(oa->value); 29 oa->name = NULL; 30 oa->value = NULL; 31 oa->len = 0; 32 } 33 34 void fido_byte_array_free(fido_byte_array_t * ba)35fido_byte_array_free(fido_byte_array_t *ba) 36 { 37 free(ba->ptr); 38 39 ba->ptr = NULL; 40 ba->len = 0; 41 } 42 43 void fido_algo_free(fido_algo_t * a)44fido_algo_free(fido_algo_t *a) 45 { 46 free(a->type); 47 a->type = NULL; 48 a->cose = 0; 49 } 50 51 void fido_algo_array_free(fido_algo_array_t * aa)52fido_algo_array_free(fido_algo_array_t *aa) 53 { 54 for (size_t i = 0; i < aa->len; i++) 55 fido_algo_free(&aa->ptr[i]); 56 57 free(aa->ptr); 58 aa->ptr = NULL; 59 aa->len = 0; 60 } 61 62 void fido_cert_array_free(fido_cert_array_t * ca)63fido_cert_array_free(fido_cert_array_t *ca) 64 { 65 for (size_t i = 0; i < ca->len; i++) 66 free(ca->name[i]); 67 68 free(ca->name); 69 free(ca->value); 70 ca->name = NULL; 71 ca->value = NULL; 72 ca->len = 0; 73 } 74 75 int fido_str_array_pack(fido_str_array_t * sa,const char * const * v,size_t n)76fido_str_array_pack(fido_str_array_t *sa, const char * const *v, size_t n) 77 { 78 if ((sa->ptr = calloc(n, sizeof(char *))) == NULL) { 79 fido_log_debug("%s: calloc", __func__); 80 return -1; 81 } 82 for (size_t i = 0; i < n; i++) { 83 if ((sa->ptr[i] = strdup(v[i])) == NULL) { 84 fido_log_debug("%s: strdup", __func__); 85 return -1; 86 } 87 sa->len++; 88 } 89 90 return 0; 91 } 92