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.
This commit is contained in:
nicm
2015-02-18 15:32:37 +00:00
parent 4d05d88304
commit 568f5ef3c6
2 changed files with 28 additions and 16 deletions

View File

@ -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);
}