aboutsummaryrefslogtreecommitdiff
path: root/src/iemlib2/stripfilename.c
diff options
context:
space:
mode:
authormusil <tmusil@users.sourceforge.net>2006-11-21 14:43:21 +0000
committermusil <tmusil@users.sourceforge.net>2006-11-21 14:43:21 +0000
commit93bc365d590757919a53fea685876fd28d9d06aa (patch)
treeb5c15a86854d9c34bbcea88e7aa84a3b6fe26134 /src/iemlib2/stripfilename.c
parenta9b5904826c3981234eda971a3a8043d5c771029 (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.c29
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);