From c994d97950e234a9da0fa599a662ab5287ec0889 Mon Sep 17 00:00:00 2001 From: Jonathan Wilkes <jon.w.wilkes@gmail.com> Date: Wed, 18 Sep 2019 22:42:34 -0400 Subject: [PATCH] quick fixes to keep cxc/mean~ from crashing when dsp is turned on --- externals/cxc/mean~.c | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/externals/cxc/mean~.c b/externals/cxc/mean~.c index cc17df4e6..b4e79b1b2 100644 --- a/externals/cxc/mean~.c +++ b/externals/cxc/mean~.c @@ -67,9 +67,16 @@ static void cxmean_mean(t_cxmean *x) cnt = 0; if(!(a = (t_garray *)pd_findbyclass(x->x_arrayname,garray_class))) { - pd_error(x, "%s: no such table", x->x_arrayname->s_name); + pd_error(x, "mean: %s: no such table", x->x_arrayname->s_name); + x->x_vec = 0; + return; + } + else if (!garray_getfloatarray(a,&x->x_nsampsintab,&x->x_vec)) + { + error("%s: bad template for mean", x->x_arrayname->s_name); + x->x_vec = 0; + return; } - garray_getfloatarray(a,&x->x_nsampsintab,&x->x_vec); fp = x->x_vec; @@ -168,8 +175,15 @@ static void cxavgdev_float(t_cxavgdev *x, t_float f) cnt = 0; if(!(a = (t_garray *)pd_findbyclass(x->x_arrayname,garray_class))) { pd_error(x, "%s: no such table", x->x_arrayname->s_name); + x->x_vec = 0; + return; + } + else if (!garray_getfloatarray(a,&x->x_nsampsintab,&x->x_vec)) + { + error("%s: bad template for mean", x->x_arrayname->s_name); + x->x_vec = 0; + return; } - garray_getfloatarray(a,&x->x_nsampsintab,&x->x_vec); fp = x->x_vec; @@ -347,6 +361,14 @@ static t_int *mean_tilde_perform(t_int *w) int n = (int)(w[2]); t_float xz = 0.; fp = x->x_vec; + + /* If array doesn't exist just make it zero */ + if (!fp) + { + x->x_mean = 0; + return (w+3); + } + while(n--) { xz += abs(*fp++); //post("cxc/mean.c: %d : %f : %f",n,xz,fp); @@ -354,7 +376,6 @@ static t_int *mean_tilde_perform(t_int *w) x->x_mean = (t_float)(xz / n); //post("cxc/mean.c: %f",xz); return (w+3); - //return 0; } static void mean_tilde_set(t_mean_tilde *x, t_symbol *s) @@ -400,8 +421,15 @@ static void mean_tilde_mean(t_mean_tilde *x) cnt = 0; if(!(a = (t_garray *)pd_findbyclass(x->x_arrayname,garray_class))) { pd_error(x, "%s: no such table", x->x_arrayname->s_name); + x->x_vec = 0; + return; + } + else if (!garray_getfloatarray(a,&x->x_nsampsintab,&x->x_vec)) + { + error("%s: bad template for mean", x->x_arrayname->s_name); + x->x_vec = 0; + return; } - garray_getfloatarray(a,&x->x_nsampsintab,&x->x_vec); fp = x->x_vec; -- GitLab