Update of /cvsroot/easycalc/easycalc/mlib
In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv29295
Modified Files:
slist.c
Log Message:
Replaced calls to stack_get_val2() with two calls to stack_get_val() and
changed the clean-up in case of error to avoid memory leaks in the original
code.
Index: slist.c
===================================================================
RCS file: /cvsroot/easycalc/easycalc/mlib/slist.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -C2 -d -r1.35 -r1.36
*** slist.c 25 Sep 2006 23:59:45 -0000 1.35
--- slist.c 28 Sep 2006 13:36:31 -0000 1.36
***************
*** 463,469 ****
char *result;
! err = stack_get_val2(stack,&lstx,&lsty,list);
if (err)
return err;
if (!list_real(lstx) || !list_real(lsty) ||
--- 463,474 ----
char *result;
! err = stack_get_val(stack,&lsty,list);
if (err)
return err;
+ err = stack_get_val(stack,&lstx,list);
+ if (err) {
+ list_delete(lsty);
+ return err;
+ }
if (!list_real(lstx) || !list_real(lsty) ||
***************
*** 871,878 ****
return err;
! err = stack_get_val2(stack,&b,&a,list);
! if (err){
list_delete(x);
! return err;}
/* the first A coefficient can´t be 0 */
--- 876,890 ----
return err;
! err = stack_get_val(stack,&a,list);
! if (err) {
list_delete(x);
! return err;
! }
! err = stack_get_val(stack,&b,list);
! if (err) {
! list_delete(x);
! list_delete(a);
! return err;
! }
/* the first A coefficient can´t be 0 */
***************
*** 1021,1028 ****
CError err;
! err = stack_get_val2(stack,&lst1,&lst2,list);
if (err)
return err;
!
switch (func->num) {
--- 1033,1044 ----
CError err;
! err = stack_get_val(stack,&lst2,list);
if (err)
return err;
! err = stack_get_val(stack,&lst1,list);
! if (err) {
! list_delete(lst2);
! return err;
! }
switch (func->num) {
***************
*** 1113,1121 ****
return c_syntax;
! for(k=1;k<func->paramcount;k++){
! err = stack_get_val2(stack,&lst1,&lst2,list);
if (err)
return err;
m=lst1->size;
--- 1129,1142 ----
return c_syntax;
! for(k=1;k<func->paramcount && !err;k++){
! err = stack_get_val(stack,&lst2,list);
if (err)
return err;
+ err = stack_get_val(stack,&lst1,list);
+ if (err) {
+ list_delete(lst2);
+ return err;
+ }
m=lst1->size;
|