[PD-cvs] externals/iemlib/src/iemlib2 mergefilename.c, 1.8, 1.9 splitfilename.c, 1.9, 1.10 stripfilename.c, 1.5, 1.6

musil tmusil at users.sourceforge.net
Tue Nov 21 15:43:24 CET 2006


Update of /cvsroot/pure-data/externals/iemlib/src/iemlib2
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11217/iemlib/src/iemlib2

Modified Files:
	mergefilename.c splitfilename.c stripfilename.c 
Log Message:
fixed this bug with MAXPDSTRING memory allocation

Index: mergefilename.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iemlib/src/iemlib2/mergefilename.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** mergefilename.c	9 Nov 2006 18:48:30 -0000	1.8
--- mergefilename.c	21 Nov 2006 14:43:21 -0000	1.9
***************
*** 21,25 ****
    t_object x_obj;
    char     x_sep[2];
!   char     x_mem[MAXPDSTRING];  /* miller WHY ???? */
  } t_mergefilename;
  
--- 21,25 ----
    t_object x_obj;
    char     x_sep[2];
!   char     x_mem[MAXPDSTRING];
  } t_mergefilename;
  

Index: stripfilename.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iemlib/src/iemlib2/stripfilename.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** stripfilename.c	7 Nov 2006 17:11:40 -0000	1.5
--- stripfilename.c	21 Nov 2006 14:43:21 -0000	1.6
***************
*** 18,49 ****
    t_object x_obj;
    int      x_nr_char;
  } t_stripfilename;
  
  static void stripfilename_symbol(t_stripfilename *x, t_symbol *s)
  {
!   if(x->x_nr_char < 0)
    {
      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(i < 0)
        i = 0;
!     str[i] = 0;
!     outlet_symbol(x->x_obj.ob_outlet, gensym(str));
!     freebytes(str, (len+2)*sizeof(char));
    }
!   else if(x->x_nr_char > 0)
    {
      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(i > len)
        i = len;
!     outlet_symbol(x->x_obj.ob_outlet, gensym(str+i));
!     freebytes(str, (len+2)*sizeof(char));
    }
    else
--- 18,52 ----
    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)/* cuts the string from the back */
    {
      int len = strlen(s->s_name);
      int i=len + x->x_nr_char;
! 
!     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;
!     x->x_mem[i] = 0;
!     outlet_symbol(x->x_obj.ob_outlet, gensym(x->x_mem));
    }
!   else if(x->x_nr_char > 0)/* starts the string at this new offset */
    {
      int len = strlen(s->s_name);
      int i=x->x_nr_char;
! 
!     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(x->x_mem+i));
    }
    else

Index: splitfilename.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iemlib/src/iemlib2/splitfilename.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** splitfilename.c	7 Nov 2006 17:11:40 -0000	1.9
--- splitfilename.c	21 Nov 2006 14:43:21 -0000	1.10
***************
*** 21,25 ****
    t_object x_obj;
    char     x_sep[2];
!   char     *x_mem;
    t_int    x_size;
    t_outlet *x_outpath;
--- 21,25 ----
    t_object x_obj;
    char     x_sep[2];
!   char     x_mem[MAXPDSTRING];
    t_int    x_size;
    t_outlet *x_outpath;
***************
*** 78,88 ****
      {
        char *sep_ptr=x->x_mem;
!       
!       if(length > x->x_size)
!       {
!         x->x_mem = (char *)resizebytes(x->x_mem, x->x_size*sizeof(char), (length+100)*sizeof(char));
!         x->x_size = length + 100;
!       }
!       strcpy(x->x_mem, s->s_name);
        sep_ptr = strrchr(x->x_mem, x->x_sep[0]);/* points to the leftest separator-char-index of string */
        if((!sep_ptr) || ((sep_ptr - x->x_mem) < 0) || ((sep_ptr - x->x_mem) >= length))
--- 78,87 ----
      {
        char *sep_ptr=x->x_mem;
! 
!       if(length > (MAXPDSTRING - 2))
!         strncpy(x->x_mem, s->s_name, MAXPDSTRING - 2 - length);
!       else
!         strcpy(x->x_mem, s->s_name);
! 
        sep_ptr = strrchr(x->x_mem, x->x_sep[0]);/* points to the leftest separator-char-index of string */
        if((!sep_ptr) || ((sep_ptr - x->x_mem) < 0) || ((sep_ptr - x->x_mem) >= length))
***************
*** 107,115 ****
  }
  
- static void splitfilename_free(t_splitfilename *x)
- {
-   freebytes(x->x_mem, x->x_size*sizeof(char));
- }
- 
  static void *splitfilename_new(t_symbol *s, int ac, t_atom *av)
  {
--- 106,109 ----
***************
*** 122,127 ****
    else
      splitfilename_separator(x, s, ac, av);
-   x->x_size = 400;
-   x->x_mem = (char *)getbytes(x->x_size*sizeof(char));
    x->x_outpath = (t_outlet *)outlet_new(&x->x_obj, &s_symbol);
    x->x_outfile = (t_outlet *)outlet_new(&x->x_obj, &s_symbol);
--- 116,119 ----





More information about the Pd-cvs mailing list