From 9b8ab99648518dc38fce2b85658a6217aa886bb0 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 20 Sep 2012 21:02:43 +0000 Subject: make sure argument respects limit on number of floats to average, fixes #3552251 svn path=/trunk/externals/markex/; revision=16258 --- average-help.pd | 2 +- average.c | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/average-help.pd b/average-help.pd index 38acd12..667bb4b 100644 --- a/average-help.pd +++ b/average-help.pd @@ -7,7 +7,7 @@ #X msg 247 164 reset 5; #X msg 345 168 clear; #X text 89 408 The initial argument is the number to average together. -The default is 10 numbers.; +The default is 10 numbers, the maximum is 100 numbers; #X obj 421 231 average 20; #X text 139 23 [average]; #X text 81 371 [average] together a series of numbers.; diff --git a/average.c b/average.c index e13f45e..dc7711b 100644 --- a/average.c +++ b/average.c @@ -11,12 +11,14 @@ /* instance structure */ static t_class *average_class; +#define MAX_NUMBERS 100 + typedef struct _average { t_object x_obj; /* obligatory object header */ int a_total; /* number of numbers to average */ int a_whichNum; /* which number are pointing at */ - float a_numbers[100]; /* numbers to average, 100 maximum */ + float a_numbers[MAX_NUMBERS]; /* numbers to average */ t_outlet *t_out1; /* the outlet */ } t_average; @@ -47,13 +49,13 @@ void average_total(t_average *x, t_floatarg n) void average_reset(t_average *x, t_floatarg newVal) { int n; - for (n=0; n < 100; n ++) x->a_numbers[n] = newVal; + for (n=0; n < MAX_NUMBERS; n ++) x->a_numbers[n] = newVal; } void average_clear(t_average *x) { int n; - for ( n = 0; n < 100; n ++) x->a_numbers[n] = 0.0f; + for ( n = 0; n < MAX_NUMBERS; n ++) x->a_numbers[n] = 0.0f; } void *average_new(t_floatarg f) /* init vals in struc */ @@ -64,6 +66,11 @@ void *average_new(t_floatarg f) /* init vals in struc */ average_clear(x); if (f) x->a_total = (int)f; else x->a_total = 10; + if (x->a_total > MAX_NUMBERS) { + logpost(x, 2, "[average]: argument set max numbers greater than %i, setting to %i", + MAX_NUMBERS, MAX_NUMBERS); + x->a_total = MAX_NUMBERS; + } x->a_whichNum = 0; return (x); } -- cgit v1.2.1