[gnumeric] lpsolve: fix problem with parsing input range.
- From: Morten Welinder <mortenw src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnumeric] lpsolve: fix problem with parsing input range.
- Date: Tue, 27 Oct 2009 23:01:13 +0000 (UTC)
commit 092ab881e720975ea7699fb4b9ba1ba0b6f8739c
Author: Morten Welinder <terra gnome org>
Date: Tue Oct 27 19:00:46 2009 -0400
lpsolve: fix problem with parsing input range.
plugins/lpsolve/lpsolve-write.c | 29 +++++++++++++++++++++++------
1 files changed, 23 insertions(+), 6 deletions(-)
---
diff --git a/plugins/lpsolve/lpsolve-write.c b/plugins/lpsolve/lpsolve-write.c
index 54ce554..217fdd9 100644
--- a/plugins/lpsolve/lpsolve-write.c
+++ b/plugins/lpsolve/lpsolve-write.c
@@ -26,6 +26,7 @@
#include <cell.h>
#include <solver.h>
#include <ranges.h>
+#include <expr.h>
#include <parse-util.h>
#include <gutils.h>
#include <goffice/goffice.h>
@@ -157,17 +158,33 @@ lpsolve_create_program (Sheet *sheet, GError **err)
/* This is insane -- why do we keep a string? */
{
GnmEvalPos ep;
- GnmRange r;
- GnmValue *vr;
+ GnmParsePos pp;
+ GnmValue *vr = NULL;
+ GnmExprTop const *texpr;
+ GnmExprParseFlags flags =
+ GNM_EXPR_PARSE_FORCE_ABSOLUTE_REFERENCES |
+ GNM_EXPR_PARSE_UNKNOWN_NAMES_ARE_INVALID;
g_slist_free (sp->input_cells);
sp->input_cells = NULL;
- if (!range_parse (&r, sp->input_entry_str,
- gnm_sheet_get_size (sheet)))
+ parse_pos_init_sheet (&pp, sheet);
+ texpr = gnm_expr_parse_str (sp->input_entry_str, &pp,
+ flags, sheet->convs,
+ NULL);
+ if (texpr) {
+ vr = gnm_expr_top_get_range (texpr);
+ gnm_expr_top_unref (texpr);
+ }
+
+ if (!vr) {
+ g_set_error (err,
+ go_error_invalid (),
+ 0,
+ _("Invalid solver input range."));
goto fail;
+ }
- vr = value_new_cellrange_r (sheet, &r);
eval_pos_init_sheet (&ep, sheet);
workbook_foreach_cell_in_range (&ep, vr, CELL_ITER_ALL,
cb_grab_cells,
@@ -332,7 +349,7 @@ lpsolve_file_save (GOFileSaver const *fs, GOIOContext *io_context,
if (!prg) {
go_cmd_context_error_import (GO_CMD_CONTEXT (io_context),
- err->message);
+ err ? err->message : "?");
g_error_free (err);
return;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]