From: Jorge G. <cl...@us...> - 2006-09-22 17:59:58
|
Update of /cvsroot/easycalc/easycalc/mlib In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv10171 Modified Files: cmatrix.c matrix.c Log Message: bug fixed Index: cmatrix.c =================================================================== RCS file: /cvsroot/easycalc/easycalc/mlib/cmatrix.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** cmatrix.c 22 Sep 2006 15:06:32 -0000 1.25 --- cmatrix.c 22 Sep 2006 17:59:53 -0000 1.26 *************** *** 1091,1119 **** case MATRIX_ECHELON: r = cmatrix_echelon(m); - cmatrix_delete(m); - m = r; break; case FUNC_CONJ: /* Transpose */ r = cmatrix_transpose(m); - cmatrix_delete(m); - m = r; break; case MATRIX_QRQ: r = cmatrix_qrq(m); ! if (r == NULL) { err = c_singular; - break; - } - cmatrix_delete(m); - m = r; break; case MATRIX_QRR: r = cmatrix_qrr(m); ! if (r == NULL) { err = c_singular; - break; - } - cmatrix_delete(m); - m = r; break; case MATRIX_QRS: --- 1091,1107 ---- case MATRIX_ECHELON: r = cmatrix_echelon(m); break; case FUNC_CONJ: /* Transpose */ r = cmatrix_transpose(m); break; case MATRIX_QRQ: r = cmatrix_qrq(m); ! if (r == NULL) err = c_singular; break; case MATRIX_QRR: r = cmatrix_qrr(m); ! if (r == NULL) err = c_singular; break; case MATRIX_QRS: *************** *** 1123,1141 **** } r = cmatrix_qrs(m); ! if (r == NULL){ err = c_singular; - break; - } - cmatrix_delete(m); - m = r; break; default: ! return c_internal; } - if (!err) - err = stack_add_val(stack,&m,cmatrix); - cmatrix_delete(m); return err; } --- 1111,1128 ---- } r = cmatrix_qrs(m); ! if (r == NULL) err = c_singular; break; default: ! err = c_internal; ! break; } cmatrix_delete(m); + + if (!err){ + err = stack_add_val(stack,&r,cmatrix); + cmatrix_delete(r); + } return err; } *************** *** 1172,1176 **** break; default: ! return c_internal; } cmatrix_delete(m); --- 1159,1164 ---- break; default: ! err = c_internal; ! break; } cmatrix_delete(m); *************** *** 1252,1257 **** return err; ! if (col > m->cols || row > m->rows || col == 0 || row == 0) return c_baddim; if (func->paramcount == 2){ --- 1240,1247 ---- return err; ! if (col > m->cols || row > m->rows || col == 0 || row == 0){ ! cmatrix_delete(m); return c_baddim; + } if (func->paramcount == 2){ *************** *** 1260,1276 **** lresult = list_new(m->cols); for(i=0;i<m->cols;i++){ lresult->item[i] = MATRIX(m,row-1,i); } ! stack_add_val(stack,&lresult,list); list_delete(lresult); } else{ result = MATRIX(m,row-1,col-1); ! stack_add_val(stack, &result, complex); } cmatrix_delete(m); ! return c_noerror; ! } \ No newline at end of file --- 1250,1270 ---- lresult = list_new(m->cols); + if(!lresult){ + cmatrix_delete(m); + return c_memory; + } + for(i=0;i<m->cols;i++){ lresult->item[i] = MATRIX(m,row-1,i); } ! err = stack_add_val(stack,&lresult,list); list_delete(lresult); } else{ result = MATRIX(m,row-1,col-1); ! err = stack_add_val(stack, &result, complex); } cmatrix_delete(m); ! return err; } \ No newline at end of file Index: matrix.c =================================================================== RCS file: /cvsroot/easycalc/easycalc/mlib/matrix.c,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** matrix.c 22 Sep 2006 15:06:33 -0000 1.29 --- matrix.c 22 Sep 2006 17:59:53 -0000 1.30 *************** *** 791,819 **** case MATRIX_ECHELON: r = matrix_echelon(m); - matrix_delete(m); - m = r; break; case FUNC_CONJ: /* Transpose */ r = matrix_transpose(m); - matrix_delete(m); - m = r; break; case MATRIX_QRQ: r = matrix_qrq(m); ! if (r == NULL) { err = c_singular; - break; - } - matrix_delete(m); - m = r; break; case MATRIX_QRR: r = matrix_qrr(m); ! if (r == NULL) { err = c_singular; - break; - } - matrix_delete(m); - m = r; break; case MATRIX_QRS: --- 791,807 ---- case MATRIX_ECHELON: r = matrix_echelon(m); break; case FUNC_CONJ: /* Transpose */ r = matrix_transpose(m); break; case MATRIX_QRQ: r = matrix_qrq(m); ! if (r == NULL) err = c_singular; break; case MATRIX_QRR: r = matrix_qrr(m); ! if (r == NULL) err = c_singular; break; case MATRIX_QRS: *************** *** 823,841 **** } r = matrix_qrs(m); ! if (r == NULL){ err = c_singular; - break; - } - matrix_delete(m); - m = r; break; default: ! return c_internal; } - if (!err) - err = stack_add_val(stack,&m,matrix); - matrix_delete(m); return err; } --- 811,828 ---- } r = matrix_qrs(m); ! if (r == NULL) err = c_singular; break; default: ! err = c_internal; ! break; } matrix_delete(m); + + if (!err){ + err = stack_add_val(stack,&r,matrix); + matrix_delete(r); + } return err; } *************** *** 879,883 **** break; default: ! return c_internal; } matrix_delete(m); --- 866,871 ---- break; default: ! err = c_internal; ! break; } matrix_delete(m); *************** *** 925,930 **** return err; ! if (col > m->cols || row > m->rows || col == 0 || row == 0) return c_baddim; if (func->paramcount == 2){ --- 913,920 ---- return err; ! if (col > m->cols || row > m->rows || col == 0 || row == 0){ ! matrix_delete(m); return c_baddim; + } if (func->paramcount == 2){ *************** *** 933,951 **** lresult = list_new(m->cols); for(i=0;i<m->cols;i++){ lresult->item[i].real = MATRIX(m,row-1,i); lresult->item[i].imag = 0.0; } ! stack_add_val(stack,&lresult,list); list_delete(lresult); } else{ result = MATRIX(m,row-1,col-1); ! stack_add_val(stack, &result, real); } matrix_delete(m); ! return c_noerror; ! } --- 923,945 ---- lresult = list_new(m->cols); + if(!lresult){ + matrix_delete(m); + return c_memory; + } + for(i=0;i<m->cols;i++){ lresult->item[i].real = MATRIX(m,row-1,i); lresult->item[i].imag = 0.0; } ! err = stack_add_val(stack,&lresult,list); list_delete(lresult); } else{ result = MATRIX(m,row-1,col-1); ! err = stack_add_val(stack, &result, real); } matrix_delete(m); ! return err; } |