From cb5e681ef6f238a69ee6d366dd9760a49e28887b Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 20 Jun 2019 18:13:04 +0000 Subject: [PATCH] FIx return of options_scope_from_name on error. --- options.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/options.c b/options.c index bbb6af98..21ac82f9 100644 --- a/options.c +++ b/options.c @@ -741,7 +741,7 @@ options_scope_from_name(struct args *args, int window, struct window_pane *wp = fs->wp; const char *target = args_get(args, 't'); const struct options_table_entry *oe; - int scope; + int scope = OPTIONS_TABLE_NONE; if (*name == '@') return (options_scope_from_flags(args, window, fs, oo, cause)); @@ -754,21 +754,23 @@ options_scope_from_name(struct args *args, int window, xasprintf(cause, "unknown option: %s", name); return (OPTIONS_TABLE_NONE); } - scope = oe->scope; - - switch (scope) { + switch (oe->scope) { case OPTIONS_TABLE_SERVER: *oo = global_options; + scope = OPTIONS_TABLE_SERVER; break; case OPTIONS_TABLE_SESSION: - if (args_has(args, 'g')) + if (args_has(args, 'g')) { *oo = global_s_options; - else if (s == NULL && target != NULL) + scope = OPTIONS_TABLE_SESSION; + } else if (s == NULL && target != NULL) xasprintf(cause, "no such session: %s", target); else if (s == NULL) xasprintf(cause, "no current session"); - else + else { *oo = s->options; + scope = OPTIONS_TABLE_SESSION; + } break; case OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE: if (args_has(args, 'p')) { @@ -776,21 +778,26 @@ options_scope_from_name(struct args *args, int window, xasprintf(cause, "no such pane: %s", target); else if (wp == NULL) xasprintf(cause, "no current pane"); - else + else { *oo = wp->options; + scope = OPTIONS_TABLE_PANE; + } break; } scope = OPTIONS_TABLE_WINDOW; /* FALLTHROUGH */ case OPTIONS_TABLE_WINDOW: - if (args_has(args, 'g')) + if (args_has(args, 'g')) { *oo = global_w_options; - else if (wl == NULL && target != NULL) + scope = OPTIONS_TABLE_WINDOW; + } else if (wl == NULL && target != NULL) xasprintf(cause, "no such window: %s", target); else if (wl == NULL) xasprintf(cause, "no current window"); - else + else { *oo = wl->window->options; + scope = OPTIONS_TABLE_WINDOW; + } break; } return (scope);