mirror of
https://github.com/tmux/tmux.git
synced 2024-10-31 22:58:49 +00:00
Rewrite options_array_set to be clearer and remove a spurious warning
with newer GCC. From Ben Boeckel.
This commit is contained in:
parent
0c5e9c6efa
commit
9fd62efcf0
51
options.c
51
options.c
@ -321,6 +321,17 @@ options_array_item(struct options_entry *o, u_int idx)
|
||||
return (RB_FIND(options_array, &o->value.array, &a));
|
||||
}
|
||||
|
||||
static struct options_array_item *
|
||||
options_array_new(struct options_entry *o, u_int idx)
|
||||
{
|
||||
struct options_array_item *a;
|
||||
|
||||
a = xcalloc(1, sizeof *a);
|
||||
a->index = idx;
|
||||
RB_INSERT(options_array, &o->value.array, a);
|
||||
return (a);
|
||||
}
|
||||
|
||||
static void
|
||||
options_array_free(struct options_entry *o, struct options_array_item *a)
|
||||
{
|
||||
@ -368,7 +379,14 @@ options_array_set(struct options_entry *o, u_int idx, const char *value,
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (OPTIONS_IS_COMMAND(o) && value != NULL) {
|
||||
if (value == NULL) {
|
||||
a = options_array_item(o, idx);
|
||||
if (a != NULL)
|
||||
options_array_free(o, a);
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (OPTIONS_IS_COMMAND(o)) {
|
||||
pr = cmd_parse_from_string(value, NULL);
|
||||
switch (pr->status) {
|
||||
case CMD_PARSE_EMPTY:
|
||||
@ -384,34 +402,33 @@ options_array_set(struct options_entry *o, u_int idx, const char *value,
|
||||
case CMD_PARSE_SUCCESS:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
a = options_array_item(o, idx);
|
||||
if (value == NULL) {
|
||||
if (a != NULL)
|
||||
options_array_free(o, a);
|
||||
if (a == NULL)
|
||||
a = options_array_new(o, idx);
|
||||
else
|
||||
options_value_free(o, &a->value);
|
||||
a->value.cmdlist = pr->cmdlist;
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (OPTIONS_IS_STRING(o)) {
|
||||
a = options_array_item(o, idx);
|
||||
if (a != NULL && append)
|
||||
xasprintf(&new, "%s%s", a->value.string, value);
|
||||
else
|
||||
new = xstrdup(value);
|
||||
if (a == NULL)
|
||||
a = options_array_new(o, idx);
|
||||
else
|
||||
options_value_free(o, &a->value);
|
||||
a->value.string = new;
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (a == NULL) {
|
||||
a = xcalloc(1, sizeof *a);
|
||||
a->index = idx;
|
||||
RB_INSERT(options_array, &o->value.array, a);
|
||||
} else
|
||||
options_value_free(o, &a->value);
|
||||
|
||||
if (OPTIONS_IS_STRING(o))
|
||||
a->value.string = new;
|
||||
else if (OPTIONS_IS_COMMAND(o))
|
||||
a->value.cmdlist = pr->cmdlist;
|
||||
return (0);
|
||||
if (cause != NULL)
|
||||
*cause = xstrdup("wrong array type");
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -191,7 +191,7 @@ window_tree_cmp_session(const void *a0, const void *b0)
|
||||
const struct session *const *b = b0;
|
||||
const struct session *sa = *a;
|
||||
const struct session *sb = *b;
|
||||
int result;
|
||||
int result = 0;
|
||||
|
||||
switch (window_tree_sort->field) {
|
||||
case WINDOW_TREE_BY_INDEX:
|
||||
@ -226,7 +226,7 @@ window_tree_cmp_window(const void *a0, const void *b0)
|
||||
const struct winlink *wlb = *b;
|
||||
struct window *wa = wla->window;
|
||||
struct window *wb = wlb->window;
|
||||
int result;
|
||||
int result = 0;
|
||||
|
||||
switch (window_tree_sort->field) {
|
||||
case WINDOW_TREE_BY_INDEX:
|
||||
|
Loading…
Reference in New Issue
Block a user