struct driver_option *o = xmalloc (sizeof *o);
o->driver_name = xstrdup (driver_name);
o->name = xstrdup (name);
- o->value = value != NULL ? xstrdup (value) : NULL;
- o->default_value = default_value ? xstrdup (default_value) : NULL;
+ o->value = xstrdup_if_nonnull (value);
+ o->default_value = xstrdup_if_nonnull (default_value);
return o;
}
return -1;
}
-static bool
+bool
parse_color__ (const char *s, struct cell_color *color)
{
/* #rrrrggggbbbb */
struct cell_color
parse_color (struct driver_option *o)
{
+ struct cell_color color = CELL_COLOR_BLACK;
+ parse_color__ (o->default_value, &color);
if (o->value)
{
- struct cell_color color;
- if (parse_color__ (o->value, &color))
- return color;
-
- msg (MW, _("%s: `%s' is `%s', which could not be parsed as a color"),
- o->driver_name, o->name, o->value);
+ if (!parse_color__ (o->value, &color))
+ msg (MW, _("%s: `%s' is `%s', which could not be parsed as a color"),
+ o->driver_name, o->name, o->value);
}
-
- struct cell_color color;
- if (parse_color__ (o->default_value, &color))
- return color;
-
- return (struct cell_color) CELL_COLOR_BLACK;
+ driver_option_destroy (o);
+ return color;
}