From 93bc365d590757919a53fea685876fd28d9d06aa Mon Sep 17 00:00:00 2001 From: musil Date: Tue, 21 Nov 2006 14:43:21 +0000 Subject: fixed this bug with MAXPDSTRING memory allocation svn path=/trunk/externals/iemlib/; revision=6357 --- src/iemlib2/stripfilename.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'src/iemlib2/stripfilename.c') diff --git a/src/iemlib2/stripfilename.c b/src/iemlib2/stripfilename.c index 82dc70b..c6e4f2c 100644 --- a/src/iemlib2/stripfilename.c +++ b/src/iemlib2/stripfilename.c @@ -17,34 +17,37 @@ typedef struct _stripfilename { t_object x_obj; int x_nr_char; + char x_mem[MAXPDSTRING]; } t_stripfilename; static void stripfilename_symbol(t_stripfilename *x, t_symbol *s) { - if(x->x_nr_char < 0) + if(x->x_nr_char < 0)/* cuts the string from the back */ { int len = strlen(s->s_name); - char *str=(char *)getbytes((len+2)*sizeof(char)); int i=len + x->x_nr_char; - - strcpy(str, s->s_name); + + if(len > (MAXPDSTRING - 2)) + strncpy(x->x_mem, s->s_name, MAXPDSTRING - 2 - len); + else + strcpy(x->x_mem, s->s_name); if(i < 0) i = 0; - str[i] = 0; - outlet_symbol(x->x_obj.ob_outlet, gensym(str)); - freebytes(str, (len+2)*sizeof(char)); + x->x_mem[i] = 0; + outlet_symbol(x->x_obj.ob_outlet, gensym(x->x_mem)); } - else if(x->x_nr_char > 0) + else if(x->x_nr_char > 0)/* starts the string at this new offset */ { int len = strlen(s->s_name); - char *str=(char *)getbytes((len+2)*sizeof(char)); int i=x->x_nr_char; - - strcpy(str, s->s_name); + + if(len > (MAXPDSTRING - 2)) + strncpy(x->x_mem, s->s_name, MAXPDSTRING - 2 - len); + else + strcpy(x->x_mem, s->s_name); if(i > len) i = len; - outlet_symbol(x->x_obj.ob_outlet, gensym(str+i)); - freebytes(str, (len+2)*sizeof(char)); + outlet_symbol(x->x_obj.ob_outlet, gensym(x->x_mem+i)); } else outlet_symbol(x->x_obj.ob_outlet, s); -- cgit v1.2.1