Line data Source code
1 : /*
2 : * Copyright (c) 1997 - 2006 Kungliga Tekniska Högskolan
3 : * (Royal Institute of Technology, Stockholm, Sweden).
4 : * All rights reserved.
5 : *
6 : * Portions Copyright (c) 2009 Apple Inc. All rights reserved.
7 : *
8 : * Redistribution and use in source and binary forms, with or without
9 : * modification, are permitted provided that the following conditions
10 : * are met:
11 : *
12 : * 1. Redistributions of source code must retain the above copyright
13 : * notice, this list of conditions and the following disclaimer.
14 : *
15 : * 2. Redistributions in binary form must reproduce the above copyright
16 : * notice, this list of conditions and the following disclaimer in the
17 : * documentation and/or other materials provided with the distribution.
18 : *
19 : * 3. Neither the name of the Institute nor the names of its contributors
20 : * may be used to endorse or promote products derived from this software
21 : * without specific prior written permission.
22 : *
23 : * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
24 : * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 : * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 : * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
27 : * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 : * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 : * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 : * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 : * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 : * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 : * SUCH DAMAGE.
34 : */
35 :
36 : #include "der_locl.h"
37 :
38 : RCSID("$Id$");
39 :
40 : int
41 7491497 : der_copy_general_string (const heim_general_string *from,
42 : heim_general_string *to)
43 : {
44 7491497 : *to = strdup(*from);
45 7491497 : if(*to == NULL)
46 0 : return ENOMEM;
47 7491497 : return 0;
48 : }
49 :
50 : int
51 0 : der_copy_integer (const int *from, int *to)
52 : {
53 0 : *to = *from;
54 0 : return 0;
55 : }
56 :
57 : int
58 0 : der_copy_unsigned (const unsigned *from, unsigned *to)
59 : {
60 0 : *to = *from;
61 0 : return 0;
62 : }
63 :
64 : int
65 0 : der_copy_generalized_time (const time_t *from, time_t *to)
66 : {
67 0 : *to = *from;
68 0 : return 0;
69 : }
70 :
71 : int
72 0 : der_copy_utctime (const time_t *from, time_t *to)
73 : {
74 0 : *to = *from;
75 0 : return 0;
76 : }
77 :
78 : int
79 3496 : der_copy_utf8string (const heim_utf8_string *from, heim_utf8_string *to)
80 : {
81 3496 : return der_copy_general_string(from, to);
82 : }
83 :
84 : int
85 1500 : der_copy_printable_string (const heim_printable_string *from,
86 : heim_printable_string *to)
87 : {
88 1500 : to->length = from->length;
89 1500 : to->data = malloc(to->length + 1);
90 1500 : if(to->data == NULL)
91 0 : return ENOMEM;
92 1564 : memcpy(to->data, from->data, to->length);
93 1500 : ((char *)to->data)[to->length] = '\0';
94 1500 : return 0;
95 : }
96 :
97 : int
98 750 : der_copy_ia5_string (const heim_ia5_string *from,
99 : heim_ia5_string *to)
100 : {
101 750 : return der_copy_printable_string(from, to);
102 : }
103 :
104 : int
105 0 : der_copy_bmp_string (const heim_bmp_string *from, heim_bmp_string *to)
106 : {
107 0 : to->length = from->length;
108 0 : to->data = malloc(to->length * sizeof(to->data[0]));
109 0 : if(to->length != 0 && to->data == NULL)
110 0 : return ENOMEM;
111 0 : memcpy(to->data, from->data, to->length * sizeof(to->data[0]));
112 0 : return 0;
113 : }
114 :
115 : int
116 0 : der_copy_universal_string (const heim_universal_string *from,
117 : heim_universal_string *to)
118 : {
119 0 : to->length = from->length;
120 0 : to->data = malloc(to->length * sizeof(to->data[0]));
121 0 : if(to->length != 0 && to->data == NULL)
122 0 : return ENOMEM;
123 0 : memcpy(to->data, from->data, to->length * sizeof(to->data[0]));
124 0 : return 0;
125 : }
126 :
127 : int
128 0 : der_copy_visible_string (const heim_visible_string *from,
129 : heim_visible_string *to)
130 : {
131 0 : return der_copy_general_string(from, to);
132 : }
133 :
134 : int
135 4666689 : der_copy_octet_string (const heim_octet_string *from, heim_octet_string *to)
136 : {
137 4666689 : to->length = from->length;
138 4666689 : to->data = malloc(to->length);
139 4666689 : if(to->length != 0 && to->data == NULL)
140 0 : return ENOMEM;
141 4792861 : memcpy(to->data, from->data, to->length);
142 4666689 : return 0;
143 : }
144 :
145 : int
146 886 : der_copy_heim_integer (const heim_integer *from, heim_integer *to)
147 : {
148 886 : to->length = from->length;
149 886 : to->data = malloc(to->length);
150 886 : if(to->length != 0 && to->data == NULL)
151 0 : return ENOMEM;
152 950 : memcpy(to->data, from->data, to->length);
153 886 : to->negative = from->negative;
154 886 : return 0;
155 : }
156 :
157 : int
158 10404 : der_copy_oid (const heim_oid *from, heim_oid *to)
159 : {
160 10404 : to->length = from->length;
161 10404 : to->components = malloc(to->length * sizeof(*to->components));
162 10404 : if (to->length != 0 && to->components == NULL)
163 0 : return ENOMEM;
164 10828 : memcpy(to->components, from->components,
165 9980 : to->length * sizeof(*to->components));
166 10404 : return 0;
167 : }
168 :
169 : int
170 496 : der_copy_bit_string (const heim_bit_string *from, heim_bit_string *to)
171 : {
172 : size_t len;
173 :
174 496 : len = (from->length + 7) / 8;
175 496 : to->length = from->length;
176 496 : to->data = malloc(len);
177 496 : if(len != 0 && to->data == NULL)
178 0 : return ENOMEM;
179 528 : memcpy(to->data, from->data, len);
180 496 : return 0;
181 : }
|