[PD-cvs] externals/zexy/src fwriteln.c,1.7,1.8
Franz Zotter
fzotter at users.sourceforge.net
Sun Sep 23 12:54:59 CEST 2007
Update of /cvsroot/pure-data/externals/zexy/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29320
Modified Files:
fwriteln.c
Log Message:
corrected the segmentation fault error in fwriteln. (string length was too short by 1 byte)
Index: fwriteln.c
===================================================================
RCS file: /cvsroot/pure-data/externals/zexy/src/fwriteln.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** fwriteln.c 29 Aug 2007 14:36:17 -0000 1.7
--- fwriteln.c 23 Sep 2007 10:54:56 -0000 1.8
***************
*** 56,71 ****
x->x_file=0;
if(x->x_filename)
! freebytes(x->x_filename, sizeof(char)*MAXPDSTRING);
x->x_filename=0;
if(x->x_textbuf)
! freebytes(x->x_textbuf, sizeof(char)*MAXPDSTRING);
x->x_textbuf=0;
}
static void fwriteln_open (t_fwriteln *x, t_symbol *s, t_symbol*type)
{
! char filename[MAXPDSTRING];
! sys_bashfilename (s->s_name, filename);
! filename[MAXPDSTRING-1]=0;
fwriteln_close (x);
--- 56,81 ----
x->x_file=0;
if(x->x_filename)
! free(x->x_filename);
x->x_filename=0;
if(x->x_textbuf)
! freebytes(x->x_textbuf, MAXPDSTRING + 1);
x->x_textbuf=0;
}
+ static void string_copy(const char* const from, char** to)
+ {
+ if (*to = malloc(strlen(from) + 1)) {
+ strcpy(*to, from);
+ }
+ }
+
static void fwriteln_open (t_fwriteln *x, t_symbol *s, t_symbol*type)
{
! char* filename;
!
! string_copy(s->s_name, &filename);
!
! sys_bashfilename (filename, filename);
!
fwriteln_close (x);
***************
*** 82,90 ****
if (!(x->x_file=fopen(filename, "w"))) {
pd_error(x, "failed to open %128s",filename);
return;
}
! x->x_filename=(char*)getbytes(sizeof(char)*strlen(filename));
! strcpy(x->x_filename,filename);
! x->x_textbuf = (char *) getbytes (MAXPDSTRING * sizeof(char));
}
--- 92,101 ----
if (!(x->x_file=fopen(filename, "w"))) {
pd_error(x, "failed to open %128s",filename);
+ free(filename);
return;
}
! string_copy(filename, &x->x_filename);
! free(filename);
! x->x_textbuf = (char *) getbytes (MAXPDSTRING + 1);
}
More information about the Pd-cvs
mailing list