From 79c92bf5f6e7ae09b84a0c0c2518d3283af3336a Mon Sep 17 00:00:00 2001 From: Morten Welinder Date: Mon, 15 Apr 2002 21:56:13 +0000 Subject: [PATCH] Fix error handling, I hope. 2002-04-15 Morten Welinder * fn-math.c (gnumeric_subtotal): Fix error handling, I hope. 2002-04-15 Morten Welinder * *.c: Include as needed. 2002-04-15 Morten Welinder * *.c: Include as needed. --- plugins/fn-math/functions.c | 21 +++++++------------ src/functions/ChangeLog | 4 ++++ src/functions/fn-math.c | 21 +++++++------------ src/tools/solver/lp_solve/ChangeLog | 4 ++++ src/tools/solver/lp_solve/lp-solve-debug.c | 1 + src/tools/solver/lp_solve/lpkit.c | 1 + src/tools/solver/lp_solve/solve.c | 1 + src/widgets/ChangeLog | 4 ++++ .../gnumeric-cell-renderer-expr-entry.c | 1 + src/widgets/gnumeric-cell-renderer-text.c | 1 + src/widgets/gnumeric-cell-renderer-toggle.c | 1 + 11 files changed, 32 insertions(+), 28 deletions(-) diff --git a/plugins/fn-math/functions.c b/plugins/fn-math/functions.c index aa0f76195..e3299914b 100644 --- a/plugins/fn-math/functions.c +++ b/plugins/fn-math/functions.c @@ -2818,28 +2818,22 @@ static const char *help_subtotal = { static Value * gnumeric_subtotal (FunctionEvalInfo *ei, GnmExprList *expr_node_list) { - GnmExpr *tree; - Value *val; - int fun_nbr; + const GnmExpr *tree; + Value *val; + int fun_nbr; if (expr_node_list == NULL) return value_new_error (ei->pos, gnumeric_err_NUM); - tree = (GnmExpr *) expr_node_list->data; + tree = expr_node_list->data; if (tree == NULL) return value_new_error (ei->pos, gnumeric_err_NUM); val = gnm_expr_eval (tree, ei->pos, GNM_EXPR_EVAL_STRICT); - if (!val) return NULL; - if (!VALUE_IS_NUMBER (val)) { - value_release (val); - return value_new_error (ei->pos, gnumeric_err_VALUE); - } - + if (val->type == VALUE_ERROR) + return val; fun_nbr = value_get_as_int (val); value_release (val); - if (fun_nbr < 1 || fun_nbr > 11) - return value_new_error (ei->pos, gnumeric_err_NUM); /* Skip the first node */ expr_node_list = expr_node_list->next; @@ -2856,9 +2850,8 @@ gnumeric_subtotal (FunctionEvalInfo *ei, GnmExprList *expr_node_list) case 9: return gnumeric_sum (ei, expr_node_list); case 10: return gnumeric_var (ei, expr_node_list); case 11: return gnumeric_varp (ei, expr_node_list); + default: return value_new_error (ei->pos, gnumeric_err_NUM); } - - return NULL; } /***************************************************************************/ diff --git a/src/functions/ChangeLog b/src/functions/ChangeLog index 5d4a6e74d..3064b6e1b 100644 --- a/src/functions/ChangeLog +++ b/src/functions/ChangeLog @@ -1,3 +1,7 @@ +2002-04-15 Morten Welinder + + * fn-math.c (gnumeric_subtotal): Fix error handling, I hope. + 2002-04-04 Jody Goldberg * fn-date.c (gnumeric_date2unix) : unix serials are integers. diff --git a/src/functions/fn-math.c b/src/functions/fn-math.c index aa0f76195..e3299914b 100644 --- a/src/functions/fn-math.c +++ b/src/functions/fn-math.c @@ -2818,28 +2818,22 @@ static const char *help_subtotal = { static Value * gnumeric_subtotal (FunctionEvalInfo *ei, GnmExprList *expr_node_list) { - GnmExpr *tree; - Value *val; - int fun_nbr; + const GnmExpr *tree; + Value *val; + int fun_nbr; if (expr_node_list == NULL) return value_new_error (ei->pos, gnumeric_err_NUM); - tree = (GnmExpr *) expr_node_list->data; + tree = expr_node_list->data; if (tree == NULL) return value_new_error (ei->pos, gnumeric_err_NUM); val = gnm_expr_eval (tree, ei->pos, GNM_EXPR_EVAL_STRICT); - if (!val) return NULL; - if (!VALUE_IS_NUMBER (val)) { - value_release (val); - return value_new_error (ei->pos, gnumeric_err_VALUE); - } - + if (val->type == VALUE_ERROR) + return val; fun_nbr = value_get_as_int (val); value_release (val); - if (fun_nbr < 1 || fun_nbr > 11) - return value_new_error (ei->pos, gnumeric_err_NUM); /* Skip the first node */ expr_node_list = expr_node_list->next; @@ -2856,9 +2850,8 @@ gnumeric_subtotal (FunctionEvalInfo *ei, GnmExprList *expr_node_list) case 9: return gnumeric_sum (ei, expr_node_list); case 10: return gnumeric_var (ei, expr_node_list); case 11: return gnumeric_varp (ei, expr_node_list); + default: return value_new_error (ei->pos, gnumeric_err_NUM); } - - return NULL; } /***************************************************************************/ diff --git a/src/tools/solver/lp_solve/ChangeLog b/src/tools/solver/lp_solve/ChangeLog index d7ed5b29d..66d0b2475 100644 --- a/src/tools/solver/lp_solve/ChangeLog +++ b/src/tools/solver/lp_solve/ChangeLog @@ -1,3 +1,7 @@ +2002-04-15 Morten Welinder + + * *.c: Include as needed. + 2002-03-29 Jukka-Pekka Iivonen * lpkit.h: Added #ifndef. diff --git a/src/tools/solver/lp_solve/lp-solve-debug.c b/src/tools/solver/lp_solve/lp-solve-debug.c index c50c6d503..072e6c9ca 100644 --- a/src/tools/solver/lp_solve/lp-solve-debug.c +++ b/src/tools/solver/lp_solve/lp-solve-debug.c @@ -1,3 +1,4 @@ +#include #include "lpkit.h" #include "lpglob.h" #include diff --git a/src/tools/solver/lp_solve/lpkit.c b/src/tools/solver/lp_solve/lpkit.c index adf4061e1..1d33c5abb 100644 --- a/src/tools/solver/lp_solve/lpkit.c +++ b/src/tools/solver/lp_solve/lpkit.c @@ -21,6 +21,7 @@ * 02111-1307, USA. */ +#include #include #include "lpkit.h" #include "lpglob.h" diff --git a/src/tools/solver/lp_solve/solve.c b/src/tools/solver/lp_solve/solve.c index 77bef3fb5..99778b4e7 100644 --- a/src/tools/solver/lp_solve/solve.c +++ b/src/tools/solver/lp_solve/solve.c @@ -20,6 +20,7 @@ * 02111-1307, USA. */ +#include #include #include #include "lpkit.h" diff --git a/src/widgets/ChangeLog b/src/widgets/ChangeLog index 2d5ad60b7..8b6931bd3 100644 --- a/src/widgets/ChangeLog +++ b/src/widgets/ChangeLog @@ -1,3 +1,7 @@ +2002-04-15 Morten Welinder + + * *.c: Include as needed. + 2002-04-12 Morten Welinder * gnumeric-cell-renderer-text.c diff --git a/src/widgets/gnumeric-cell-renderer-expr-entry.c b/src/widgets/gnumeric-cell-renderer-expr-entry.c index 657c4a2bc..d50139818 100644 --- a/src/widgets/gnumeric-cell-renderer-expr-entry.c +++ b/src/widgets/gnumeric-cell-renderer-expr-entry.c @@ -16,6 +16,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include #include #include #include "gnumeric-cell-renderer-expr-entry.h" diff --git a/src/widgets/gnumeric-cell-renderer-text.c b/src/widgets/gnumeric-cell-renderer-text.c index c4b4f9ed1..a1de94b4a 100644 --- a/src/widgets/gnumeric-cell-renderer-text.c +++ b/src/widgets/gnumeric-cell-renderer-text.c @@ -16,6 +16,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include #include #include #include "gnumeric-cell-renderer-text.h" diff --git a/src/widgets/gnumeric-cell-renderer-toggle.c b/src/widgets/gnumeric-cell-renderer-toggle.c index d44d8564b..e943f8c7a 100644 --- a/src/widgets/gnumeric-cell-renderer-toggle.c +++ b/src/widgets/gnumeric-cell-renderer-toggle.c @@ -20,6 +20,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include #include #include #include "gnumeric-cell-renderer-toggle.h" -- GitLab