1 /**
2 r_data.c
3
4
5 Copyright (C) 2002-2003, Network Resonance, Inc.
6 Copyright (C) 2006, Network Resonance, Inc.
7 All Rights Reserved
8
9 Redistribution and use in source and binary forms, with or without
10 modification, are permitted provided that the following conditions
11 are met:
12
13 1. Redistributions of source code must retain the above copyright
14 notice, this list of conditions and the following disclaimer.
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 3. Neither the name of Network Resonance, Inc. nor the name of any
19 contributors to this software may be used to endorse or promote
20 products derived from this software without specific prior written
21 permission.
22
23 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
24 AND 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 COPYRIGHT OWNER OR CONTRIBUTORS BE
27 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 POSSIBILITY OF SUCH DAMAGE.
34
35
36 */
37
38 /**
39 r_data.c
40
41
42 Copyright (C) 1999-2000 RTFM, Inc.
43 All Rights Reserved
44
45 This package is a SSLv3/TLS protocol analyzer written by Eric Rescorla
46 <ekr@rtfm.com> and licensed by RTFM, Inc.
47
48 Redistribution and use in source and binary forms, with or without
49 modification, are permitted provided that the following conditions
50 are met:
51 1. Redistributions of source code must retain the above copyright
52 notice, this list of conditions and the following disclaimer.
53 2. Redistributions in binary form must reproduce the above copyright
54 notice, this list of conditions and the following disclaimer in the
55 documentation and/or other materials provided with the distribution.
56 3. All advertising materials mentioning features or use of this software
57 must display the following acknowledgement:
58
59 This product includes software developed by Eric Rescorla for
60 RTFM, Inc.
61
62 4. Neither the name of RTFM, Inc. nor the name of Eric Rescorla may be
63 used to endorse or promote products derived from this
64 software without specific prior written permission.
65
66 THIS SOFTWARE IS PROVIDED BY ERIC RESCORLA AND RTFM, INC. ``AS IS'' AND
67 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
68 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
69 ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
70 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
71 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
72 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
73 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
74 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
75 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY SUCH DAMAGE.
76
77 $Id: r_data.c,v 1.2 2006/08/16 19:39:17 adamcain Exp $
78
79 ekr@rtfm.com Tue Aug 17 15:39:50 1999
80 */
81
82 #include <string.h>
83 #include <r_common.h>
84 #include <r_data.h>
85 #include <string.h>
86
r_data_create(dp,d,l)87 int r_data_create(dp,d,l)
88 Data **dp;
89 const UCHAR *d;
90 size_t l;
91 {
92 Data *d_=0;
93 int _status;
94
95 if(!(d_=(Data *)RCALLOC(sizeof(Data))))
96 ABORT(R_NO_MEMORY);
97 if(!(d_->data=(UCHAR *)RMALLOC(l)))
98 ABORT(R_NO_MEMORY);
99
100 if (d) {
101 memcpy(d_->data,d,l);
102 }
103 d_->len=l;
104
105 *dp=d_;
106
107 _status=0;
108 abort:
109 if(_status)
110 r_data_destroy(&d_);
111
112 return(_status);
113 }
114
115
r_data_alloc_mem(d,l)116 int r_data_alloc_mem(d,l)
117 Data *d;
118 size_t l;
119 {
120 int _status;
121
122 if(!(d->data=(UCHAR *)RMALLOC(l)))
123 ABORT(R_NO_MEMORY);
124 d->len=l;
125
126 _status=0;
127 abort:
128 return(_status);
129 }
130
r_data_alloc(dp,l)131 int r_data_alloc(dp,l)
132 Data **dp;
133 size_t l;
134 {
135 Data *d_=0;
136 int _status;
137
138 if(!(d_=(Data *)RCALLOC(sizeof(Data))))
139 ABORT(R_NO_MEMORY);
140 if(!(d_->data=(UCHAR *)RCALLOC(l)))
141 ABORT(R_NO_MEMORY);
142
143 d_->len=l;
144
145 *dp=d_;
146 _status=0;
147 abort:
148 if(_status)
149 r_data_destroy(&d_);
150
151 return(_status);
152 }
153
r_data_make(dp,d,l)154 int r_data_make(dp,d,l)
155 Data *dp;
156 const UCHAR *d;
157 size_t l;
158 {
159 if(!(dp->data=(UCHAR *)RMALLOC(l)))
160 ERETURN(R_NO_MEMORY);
161
162 memcpy(dp->data,d,l);
163 dp->len=l;
164
165 return(0);
166 }
167
r_data_destroy(dp)168 int r_data_destroy(dp)
169 Data **dp;
170 {
171 if(!dp || !*dp)
172 return(0);
173
174 if((*dp)->data)
175 RFREE((*dp)->data);
176
177 RFREE(*dp);
178 *dp=0;
179
180 return(0);
181 }
182
r_data_destroy_v(v)183 int r_data_destroy_v(v)
184 void *v;
185 {
186 Data *d;
187
188 if(!v)
189 return(0);
190
191 d=(Data *)v;
192 r_data_zfree(d);
193
194 RFREE(d);
195
196 return(0);
197 }
198
r_data_destroy_vp(v)199 int r_data_destroy_vp(v)
200 void **v;
201 {
202 Data *d;
203
204 if(!v || !*v)
205 return(0);
206
207 d=(Data *)*v;
208 r_data_zfree(d);
209
210 *v=0;
211 RFREE(d);
212
213 return(0);
214 }
215
r_data_copy(dst,src)216 int r_data_copy(dst,src)
217 Data *dst;
218 Data *src;
219 {
220 if(!(dst->data=(UCHAR *)RMALLOC(src->len)))
221 ERETURN(R_NO_MEMORY);
222 memcpy(dst->data,src->data,dst->len=src->len);
223 return(0);
224 }
225
r_data_zfree(d)226 int r_data_zfree(d)
227 Data *d;
228 {
229 if(!d)
230 return(0);
231 if(!d->data)
232 return(0);
233 memset(d->data,0,d->len);
234 RFREE(d->data);
235 return(0);
236 }
237
r_data_compare(d1,d2)238 int r_data_compare(d1,d2)
239 Data *d1;
240 Data *d2;
241 {
242 if(d1->len<d2->len)
243 return(-1);
244 if(d2->len<d1->len)
245 return(-1);
246 return(memcmp(d1->data,d2->data,d1->len));
247 }
248
249