xref: /freebsd/contrib/libfido2/src/types.c (revision 06c3fb27)
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
11 fido_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
22 fido_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
35 fido_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
44 fido_algo_free(fido_algo_t *a)
45 {
46 	free(a->type);
47 	a->type = NULL;
48 	a->cose = 0;
49 }
50 
51 void
52 fido_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
63 fido_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
76 fido_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