History

Reduce usage of flexible array fields

evpobr committed 6 years ago

Commit 36dfd681 parent 8a83ad33 files · +94 −32Browse files

Showing the changes to src/src_zoh.c (1 of 3 files). Show all

Unified · Split

src/src_zoh.c+35−12
@@ -29,7 +29,7 @@ typedef struct · 28 unmodified lines
29 bool dirty ;29 bool dirty ;
30 long in_count, in_used ;30 long in_count, in_used ;
31 long out_count, out_gen ;31 long out_count, out_gen ;
32 float last_value [] ;32 float *last_value ;
33} ZOH_DATA ;33} ZOH_DATA ;
34 34
35/*----------------------------------------------------------------------------------------35/*----------------------------------------------------------------------------------------
@@ -151,7 +151,8 @@ zoh_get_description (int src_enum) · 115 unmodified lines
151 151
152enum SRC_ERR152enum SRC_ERR
153zoh_set_converter (SRC_STATE *state, int src_enum)153zoh_set_converter (SRC_STATE *state, int src_enum)
154{ ZOH_DATA *priv = NULL ;154{
155 ZOH_DATA *priv = NULL ;
155 156
156 if (src_enum != SRC_ZERO_ORDER_HOLD)157 if (src_enum != SRC_ZERO_ORDER_HOLD)
157 return SRC_ERR_BAD_CONVERTER ;158 return SRC_ERR_BAD_CONVERTER ;
@@ -159,13 +160,24 @@ zoh_set_converter (SRC_STATE *state, int src_enum) · 1 unmodified line
159 zoh_close (state) ;160 zoh_close (state) ;
160 161
161 if (state->private_data == NULL)162 if (state->private_data == NULL)
162 { priv = ZERO_ALLOC (ZOH_DATA, sizeof (*priv) + state->channels * sizeof (float)) ;163 {
163 state->private_data = priv ;164 priv = ZERO_ALLOC (ZOH_DATA, sizeof (*priv)) ;
164 } ;165 if (priv)
166 {
167 priv->last_value = calloc (state->channels, sizeof (float)) ;
168 if (!priv->last_value)
169 {
170 free (priv) ;
171 priv = NULL ;
172 }
173 }
174 }
165 175
166 if (priv == NULL)176 if (priv == NULL)
167 return SRC_ERR_MALLOC_FAILED ;177 return SRC_ERR_MALLOC_FAILED ;
168 178
179 state->private_data = priv ;
180
169 priv->zoh_magic_marker = ZOH_MAGIC_MARKER ;181 priv->zoh_magic_marker = ZOH_MAGIC_MARKER ;
170 182
171 state->const_process = zoh_vari_process ;183 state->const_process = zoh_vari_process ;
@@ -191,7 +203,7 @@ zoh_reset (SRC_STATE *state) · 19 unmodified lines
191 return ;203 return ;
192 204
193 priv->dirty = false ;205 priv->dirty = false ;
194 memset (priv->last_value, 0, sizeof (priv->last_value [0]) * state->channels) ;206 memset (priv->last_value, 0, sizeof (float) * state->channels) ;
195 207
196 return ;208 return ;
197} /* zoh_reset */209} /* zoh_reset */
@@ -204,12 +216,18 @@ zoh_copy (SRC_STATE *from, SRC_STATE *to) · 6 unmodified lines
204 216
205 ZOH_DATA *to_priv = NULL ;217 ZOH_DATA *to_priv = NULL ;
206 ZOH_DATA* from_priv = (ZOH_DATA*) from->private_data ;218 ZOH_DATA* from_priv = (ZOH_DATA*) from->private_data ;
207 size_t private_size = sizeof (*to_priv) + from->channels * sizeof (float) ;
208 219
209 if ((to_priv = ZERO_ALLOC (ZOH_DATA, private_size)) == NULL)220 if ((to_priv = ZERO_ALLOC (ZOH_DATA, sizeof (ZOH_DATA))) == NULL)
210 return SRC_ERR_MALLOC_FAILED ;221 return SRC_ERR_MALLOC_FAILED ;
211 222
212 memcpy (to_priv, from_priv, private_size) ;223 memcpy (to_priv, from_priv, sizeof (ZOH_DATA)) ;
224 to_priv->last_value = malloc (sizeof (float) * from->channels) ;
225 if (!to_priv->last_value)
226 { free (to_priv) ;
227 return SRC_ERR_MALLOC_FAILED ;
228 } ;
229 memcpy (to_priv->last_value, from_priv->last_value, sizeof (float) * from->channels) ;
230
213 to->private_data = to_priv ;231 to->private_data = to_priv ;
214 232
215 return SRC_ERR_NO_ERROR ;233 return SRC_ERR_NO_ERROR ;
@@ -220,10 +238,15 @@ zoh_close (SRC_STATE *state) · 4 unmodified lines
220{238{
221 if (state)239 if (state)
222 {240 {
223 if (state->private_data)241 ZOH_DATA *zoh = (ZOH_DATA *) state->private_data ;
242 if (zoh)
224 {243 {
225 free (state->private_data) ;244 if (zoh->last_value)
226 state->private_data = NULL ;245 { free (zoh->last_value) ;
246 zoh->last_value = NULL ;
247 } ;
248 free (zoh) ;
249 zoh = NULL ;
227 }250 }
228 }251 }
229} /* zoh_close */252} /* zoh_close */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t