diff options
author | musil <tmusil@users.sourceforge.net> | 2006-11-21 14:43:21 +0000 |
---|---|---|
committer | musil <tmusil@users.sourceforge.net> | 2006-11-21 14:43:21 +0000 |
commit | 93bc365d590757919a53fea685876fd28d9d06aa (patch) | |
tree | b5c15a86854d9c34bbcea88e7aa84a3b6fe26134 /src/iemlib2/stripfilename.c | |
parent | a9b5904826c3981234eda971a3a8043d5c771029 (diff) |
fixed this bug with MAXPDSTRING memory allocation
svn path=/trunk/externals/iemlib/; revision=6357
Diffstat (limited to 'src/iemlib2/stripfilename.c')
-rw-r--r-- | src/iemlib2/stripfilename.c | 29 |
1 files changed, 16 insertions, 13 deletions
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); |