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
2929 bool dirty ;
3030 long in_count, in_used ;
3131 long out_count, out_gen ;
32− float last_value [] ;
32+ float *last_value ;
3333 } ZOH_DATA ;
3434
3535 /*----------------------------------------------------------------------------------------
@@ -151,7 +151,8 @@ zoh_get_description (int src_enum) · 115 unmodified lines
151151
152152 enum SRC_ERR
153153 zoh_set_converter (SRC_STATE *state, int src_enum)
154−{ ZOH_DATA *priv = NULL ;
154+{
155+ ZOH_DATA *priv = NULL ;
155156
156157 if (src_enum != SRC_ZERO_ORDER_HOLD)
157158 return SRC_ERR_BAD_CONVERTER ;
@@ -159,13 +160,24 @@ zoh_set_converter (SRC_STATE *state, int src_enum) · 1 unmodified line
159160 zoh_close (state) ;
160161
161162 if (state->private_data == NULL)
162− { priv = ZERO_ALLOC (ZOH_DATA, sizeof (*priv) + state->channels * sizeof (float)) ;
163− state->private_data = priv ;
164− } ;
163+ {
164+ priv = ZERO_ALLOC (ZOH_DATA, sizeof (*priv)) ;
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+ }
165175
166176 if (priv == NULL)
167177 return SRC_ERR_MALLOC_FAILED ;
168178
179+ state->private_data = priv ;
180+
169181 priv->zoh_magic_marker = ZOH_MAGIC_MARKER ;
170182
171183 state->const_process = zoh_vari_process ;
@@ -191,7 +203,7 @@ zoh_reset (SRC_STATE *state) · 19 unmodified lines
191203 return ;
192204
193205 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) ;
195207
196208 return ;
197209 } /* zoh_reset */
@@ -204,12 +216,18 @@ zoh_copy (SRC_STATE *from, SRC_STATE *to) · 6 unmodified lines
204216
205217 ZOH_DATA *to_priv = NULL ;
206218 ZOH_DATA* from_priv = (ZOH_DATA*) from->private_data ;
207− size_t private_size = sizeof (*to_priv) + from->channels * sizeof (float) ;
208219
209− if ((to_priv = ZERO_ALLOC (ZOH_DATA, private_size)) == NULL)
220+ if ((to_priv = ZERO_ALLOC (ZOH_DATA, sizeof (ZOH_DATA))) == NULL)
210221 return SRC_ERR_MALLOC_FAILED ;
211222
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+
213231 to->private_data = to_priv ;
214232
215233 return SRC_ERR_NO_ERROR ;
@@ -220,10 +238,15 @@ zoh_close (SRC_STATE *state) · 4 unmodified lines
220238 {
221239 if (state)
222240 {
223− if (state->private_data)
241+ ZOH_DATA *zoh = (ZOH_DATA *) state->private_data ;
242+ if (zoh)
224243 {
225− free (state->private_data) ;
226− state->private_data = NULL ;
244+ if (zoh->last_value)
245+ { free (zoh->last_value) ;
246+ zoh->last_value = NULL ;
247+ } ;
248+ free (zoh) ;
249+ zoh = NULL ;
227250 }
228251 }
229252 } /* 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