Update of /cvsroot/pure-data/externals/grill/flext/source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12604/source
Modified Files: flatom.cpp Log Message: fixed faulty assertion fixed buggy memory deallocation for AtomListStatic
Index: flatom.cpp =================================================================== RCS file: /cvsroot/pure-data/externals/grill/flext/source/flatom.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** flatom.cpp 12 Dec 2005 00:18:21 -0000 1.15 --- flatom.cpp 14 Mar 2006 17:13:44 -0000 1.16 *************** *** 62,78 **** { if(lst) { ! if(cnt == sz) return; // no change
t_atom *l; if(sz) { l = new t_atom[sz]; ! if(keepix >= 0) // keep contents ! CopyAtoms(keeplen >= 0?keeplen:(cnt > sz?sz:cnt),l+keepto,lst+keepix); } else l = NULL;
! delete[] lst; lst = l,cnt = sz; } --- 62,91 ---- { if(lst) { ! if(cnt == sz) { ! if(keepix != keepto) { ! int c = keeplen >= 0?keeplen:cnt; ! FLEXT_ASSERT(c+keepto <= cnt); ! FLEXT_ASSERT(c+keepix <= cnt); ! CopyAtoms(c,lst+keepto,lst+keepix); ! } ! ! return; // no change ! }
t_atom *l; if(sz) { l = new t_atom[sz]; ! if(keepix >= 0) { // keep contents ! int c = keeplen >= 0?keeplen:(cnt > sz?sz:cnt); ! FLEXT_ASSERT(c+keepto <= sz); ! FLEXT_ASSERT(c+keepix <= cnt); ! CopyAtoms(c,l+keepto,lst+keepix); ! } } else l = NULL;
! Free(); lst = l,cnt = sz; } *************** *** 123,131 **** void flext::AtomListStaticBase::Alloc(int sz,int keepix,int keeplen,int keepto) { ! if(sz < precnt) { if(lst != predata && lst) { ! if(keepix >= 0) // keep contents ! CopyAtoms(keeplen >= 0?keeplen:(cnt > sz?sz:cnt),predata+keepto,lst+keepix); AtomList::Free(); } --- 136,154 ---- void flext::AtomListStaticBase::Alloc(int sz,int keepix,int keeplen,int keepto) { ! if(sz <= precnt) { ! // small enough for pre-allocated space ! if(lst != predata && lst) { ! // currently allocated memory is larger than what we need ! ! if(keepix >= 0) { // keep contents ! int c = keeplen >= 0?keeplen:(cnt > sz?sz:cnt); ! FLEXT_ASSERT(c+keepto <= precnt); ! FLEXT_ASSERT(c+keepix <= cnt); ! CopyAtoms(c,predata+keepto,lst+keepix); ! } ! ! // free allocated memory AtomList::Free(); }