version 1.41, 2019/04/23 20:36:55 |
version 1.42, 2019/04/25 18:18:55 |
|
|
free(ov->string); |
free(ov->string); |
} |
} |
|
|
static const char * |
static char * |
options_value_tostring(struct options_entry *o, union options_value *ov, |
options_value_tostring(struct options_entry *o, union options_value *ov, |
int numeric) |
int numeric) |
{ |
{ |
static char s[1024]; |
char *s; |
const char *tmp; |
|
|
|
if (OPTIONS_IS_STYLE(o)) |
if (OPTIONS_IS_STYLE(o)) |
return (style_tostring(&ov->style)); |
return (xstrdup(style_tostring(&ov->style))); |
if (OPTIONS_IS_NUMBER(o)) { |
if (OPTIONS_IS_NUMBER(o)) { |
tmp = NULL; |
|
switch (o->tableentry->type) { |
switch (o->tableentry->type) { |
case OPTIONS_TABLE_NUMBER: |
case OPTIONS_TABLE_NUMBER: |
xsnprintf(s, sizeof s, "%lld", ov->number); |
xasprintf(&s, "%lld", ov->number); |
break; |
break; |
case OPTIONS_TABLE_KEY: |
case OPTIONS_TABLE_KEY: |
tmp = key_string_lookup_key(ov->number); |
s = xstrdup(key_string_lookup_key(ov->number)); |
break; |
break; |
case OPTIONS_TABLE_COLOUR: |
case OPTIONS_TABLE_COLOUR: |
tmp = colour_tostring(ov->number); |
s = xstrdup(colour_tostring(ov->number)); |
break; |
break; |
case OPTIONS_TABLE_FLAG: |
case OPTIONS_TABLE_FLAG: |
if (numeric) |
if (numeric) |
xsnprintf(s, sizeof s, "%lld", ov->number); |
xasprintf(&s, "%lld", ov->number); |
else |
else |
tmp = (ov->number ? "on" : "off"); |
s = xstrdup(ov->number ? "on" : "off"); |
break; |
break; |
case OPTIONS_TABLE_CHOICE: |
case OPTIONS_TABLE_CHOICE: |
tmp = o->tableentry->choices[ov->number]; |
s = xstrdup(o->tableentry->choices[ov->number]); |
break; |
break; |
case OPTIONS_TABLE_STRING: |
case OPTIONS_TABLE_STRING: |
case OPTIONS_TABLE_STYLE: |
case OPTIONS_TABLE_STYLE: |
break; |
fatalx("not a number option type"); |
} |
} |
if (tmp != NULL) |
|
xsnprintf(s, sizeof s, "%s", tmp); |
|
return (s); |
return (s); |
} |
} |
if (OPTIONS_IS_STRING(o)) |
if (OPTIONS_IS_STRING(o)) |
return (ov->string); |
return (xstrdup(ov->string)); |
return (""); |
return (xstrdup("")); |
} |
} |
|
|
struct options * |
struct options * |
|
|
o = options_add(oo, oe->name); |
o = options_add(oo, oe->name); |
o->tableentry = oe; |
o->tableentry = oe; |
|
|
if (oe->flags & OPTIONS_TABLE_IS_ARRAY) { |
if (oe->flags & OPTIONS_TABLE_IS_ARRAY) |
if (oe->type != OPTIONS_TABLE_STRING) |
|
fatalx("arrays can only be strings"); |
|
RB_INIT(&o->value.array); |
RB_INIT(&o->value.array); |
} |
|
|
|
return (o); |
return (o); |
} |
} |
|
|
return (OPTIONS_IS_STRING(o)); |
return (OPTIONS_IS_STRING(o)); |
} |
} |
|
|
const char * |
char * |
options_tostring(struct options_entry *o, int idx, int numeric) |
options_tostring(struct options_entry *o, int idx, int numeric) |
{ |
{ |
struct options_array_item *a; |
struct options_array_item *a; |
|
|
if (OPTIONS_IS_ARRAY(o)) { |
if (OPTIONS_IS_ARRAY(o)) { |
if (idx == -1) |
if (idx == -1) |
return (NULL); |
return (xstrdup("")); |
a = options_array_item(o, idx); |
a = options_array_item(o, idx); |
if (a == NULL) |
if (a == NULL) |
return (""); |
return (xstrdup("")); |
return (options_value_tostring(o, &a->value, numeric)); |
return (options_value_tostring(o, &a->value, numeric)); |
} |
} |
return (options_value_tostring(o, &o->value, numeric)); |
return (options_value_tostring(o, &o->value, numeric)); |