From 568f5ef3c6263004c5f6f1278346e18c66d02be3 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 18 Feb 2015 15:32:37 +0000 Subject: When given an invalid style, don't set the option to the default. Fix from J Raynor. Also make style_parse not alter the grid_cell when it fails. --- options.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'options.c') diff --git a/options.c b/options.c index 67f8abde..030cfd51 100644 --- a/options.c +++ b/options.c @@ -167,20 +167,26 @@ options_set_style(struct options *oo, const char *name, const char *value, int append) { struct options_entry *o; + struct grid_cell tmpgc; - if ((o = options_find1(oo, name)) == NULL) { + o = options_find1(oo, name); + if (o == NULL || !append) + memcpy(&tmpgc, &grid_default_cell, sizeof tmpgc); + else + memcpy(&tmpgc, &o->style, sizeof tmpgc); + + if (style_parse(&grid_default_cell, &tmpgc, value) == -1) + return (NULL); + + if (o == NULL) { o = xmalloc(sizeof *o); o->name = xstrdup(name); RB_INSERT(options_tree, &oo->tree, o); } else if (o->type == OPTIONS_STRING) free(o->str); - if (!append) - memcpy(&o->style, &grid_default_cell, sizeof o->style); - o->type = OPTIONS_STYLE; - if (style_parse(&grid_default_cell, &o->style, value) == -1) - return (NULL); + memcpy(&o->style, &tmpgc, sizeof o->style); return (o); } -- cgit