The branch, hooks has been updated
       via  a0bb0810fdc381a6669de569d9e372e3cd42ed32 (commit)
      from  cd49fe985a9a3099d6939d99953871943022313d (commit)

- Log -----------------------------------------------------------------
commit a0bb0810fdc381a6669de569d9e372e3cd42ed32
Author: Nicholas Marriott <nicholas.marri...@gmail.com>
Commit: Nicholas Marriott <nicholas.marri...@gmail.com>

    Drop error flags and just use return value, also enforce successful parsing 
of
    -c and -t for clients - if PREP_CLIENT_C or PREP_CLIENT_T is present, then a
    client but be available.
---
 cmd-list-clients.c |    4 +-
 cmd-queue.c        |    6 +---
 cmd.c              |   70 +++++++++++++++++++++++++++++-----------------------
 hooks.c            |    4 +-
 tmux.h             |    4 +--
 5 files changed, 46 insertions(+), 42 deletions(-)

diff --git a/cmd-list-clients.c b/cmd-list-clients.c
index e71acb1..6182928 100644
--- a/cmd-list-clients.c
+++ b/cmd-list-clients.c
@@ -54,9 +54,9 @@ cmd_list_clients_exec(struct cmd *self, struct cmd_q *cmdq)
        u_int                    i;
        char                    *line;
 
-       if (args_has(args, 't')) {
+       if (args_has(args, 't'))
                s = cmdq->state.tflag.s;
-       } else
+       else
                s = NULL;
 
        if ((template = args_get(args, 'F')) == NULL)
diff --git a/cmd-queue.c b/cmd-queue.c
index fb8eeaa..d63e219 100644
--- a/cmd-queue.c
+++ b/cmd-queue.c
@@ -199,8 +199,7 @@ cmdq_continue(struct cmd_q *cmdq)
 
        do {
                while (cmdq->cmd != NULL) {
-                       cmd_prepare_state(cmdq->cmd, cmdq);
-                       if (cmdq->state.tflag.error || cmdq->state.sflag.error)
+                       if (cmd_prepare_state(cmdq->cmd, cmdq) != 0)
                                break;
 
                        if (cmdq->state.tflag.s != NULL)
@@ -227,8 +226,7 @@ cmdq_continue(struct cmd_q *cmdq)
                         * it needs to be restored afterwards. XXX not very
                         * obvious how this works from here...
                         */
-                       cmd_prepare_state(cmdq->cmd, cmdq);
-                       if (cmdq->state.tflag.error || cmdq->state.sflag.error)
+                       if (cmd_prepare_state(cmdq->cmd, cmdq) != 0)
                                break;
 
                        retval = cmdq->cmd->entry->exec(cmdq->cmd, cmdq);
diff --git a/cmd.c b/cmd.c
index 13cef41..17c1b4c 100644
--- a/cmd.c
+++ b/cmd.c
@@ -119,8 +119,8 @@ const struct cmd_entry *cmd_table[] = {
 
 void            cmd_clear_state(struct cmd_state *);
 struct client  *cmd_get_state_client(struct cmd_q *);
-void            cmd_set_state_tflag(struct cmd *, struct cmd_q *, int);
-void            cmd_set_state_sflag(struct cmd *, struct cmd_q *, int);
+int             cmd_set_state_tflag(struct cmd *, struct cmd_q *, int);
+int             cmd_set_state_sflag(struct cmd *, struct cmd_q *, int);
 int             cmd_session_better(struct session *, struct session *, int);
 struct session *cmd_choose_session_list(struct sessionslist *);
 struct session *cmd_choose_session(int);
@@ -323,13 +323,11 @@ cmd_clear_state(struct cmd_state *state)
 {
        state->c = NULL;
 
-       state->tflag.error = 0;
        state->tflag.s = NULL;
        state->tflag.wl = NULL;
        state->tflag.wp = NULL;
        state->tflag.idx = -1;
 
-       state->sflag.error = 0;
        state->sflag.s = NULL;
        state->sflag.wl = NULL;
        state->sflag.wp = NULL;
@@ -354,7 +352,7 @@ cmd_get_state_client(struct cmd_q *cmdq)
        }
 }
 
-void
+int
 cmd_set_state_tflag(struct cmd *cmd, struct cmd_q *cmdq, int everything)
 {
        struct cmd_state        *state = &cmdq->state;
@@ -363,7 +361,7 @@ cmd_set_state_tflag(struct cmd *cmd, struct cmd_q *cmdq, 
int everything)
 
        tflag = args_get(args, 't');
        if (tflag == NULL && !everything)
-               return;
+               return (0);
 
        switch (cmd->entry->flags & CMD_PREP_ALL_T) {
        case 0:
@@ -371,29 +369,29 @@ cmd_set_state_tflag(struct cmd *cmd, struct cmd_q *cmdq, 
int everything)
        case CMD_PREP_SESSION_T:
                state->tflag.s = cmd_find_session(cmdq, tflag, 0);
                if (state->tflag.s == NULL)
-                       state->tflag.error = 1;
+                       return (-1);
                break;
        case CMD_PREP_WINDOW_T:
                state->tflag.wl = cmd_find_window(cmdq, tflag, &state->tflag.s);
                if (state->tflag.wl == NULL)
-                       state->tflag.error = 1;
+                       return (-1);
                break;
        case CMD_PREP_PANE_T:
                state->tflag.wl = cmd_find_pane(cmdq, tflag, &state->tflag.s,
                    &state->tflag.wp);
                if (state->tflag.wl == NULL)
-                       state->tflag.error = 1;
+                       return (-1);
                break;
        case CMD_PREP_INDEX_T:
                state->tflag.idx = cmd_find_index(cmdq, tflag, &state->tflag.s);
                if (state->tflag.idx == -2)
-                       state->tflag.error = 1;
+                       return (-1);
                break;
        default:
                log_fatalx("too many -t for %s", cmd->entry->name);
        }
 
-       if (!state->tflag.error && everything) {
+       if (everything) {
                if (state->tflag.s == NULL)
                        state->tflag.s = state->c->session;
                if (state->tflag.wl == NULL)
@@ -401,9 +399,10 @@ cmd_set_state_tflag(struct cmd *cmd, struct cmd_q *cmdq, 
int everything)
                if (state->tflag.wp == NULL)
                        state->tflag.wp = state->tflag.wl->window->active;
        }
+       return (0);
 }
 
-void
+int
 cmd_set_state_sflag(struct cmd *cmd, struct cmd_q *cmdq, int everything)
 {
        struct cmd_state        *state = &cmdq->state;
@@ -412,7 +411,7 @@ cmd_set_state_sflag(struct cmd *cmd, struct cmd_q *cmdq, 
int everything)
 
        sflag = args_get(args, 's');
        if (sflag == NULL && !everything)
-               return;
+               return (0);
 
        switch (cmd->entry->flags & CMD_PREP_ALL_S) {
        case 0:
@@ -420,29 +419,29 @@ cmd_set_state_sflag(struct cmd *cmd, struct cmd_q *cmdq, 
int everything)
        case CMD_PREP_SESSION_S:
                state->sflag.s = cmd_find_session(cmdq, sflag, 0);
                if (state->sflag.s == NULL)
-                       state->sflag.error = 1;
+                       return (-1);
                break;
        case CMD_PREP_WINDOW_S:
                state->sflag.wl = cmd_find_window(cmdq, sflag, &state->sflag.s);
                if (state->sflag.wl == NULL)
-                       state->sflag.error = 1;
+                       return (-1);
                break;
        case CMD_PREP_PANE_S:
                state->sflag.wl = cmd_find_pane(cmdq, sflag, &state->sflag.s,
                    &state->sflag.wp);
                if (state->sflag.wl == NULL)
-                       state->sflag.error = 1;
+                       return (-1);
                break;
        case CMD_PREP_INDEX_S:
                state->sflag.idx = cmd_find_index(cmdq, sflag, &state->sflag.s);
                if (state->sflag.idx == -2)
-                       state->sflag.error = 1;
+                       return (-1);
                break;
        default:
                log_fatalx("too many -s for %s", cmd->entry->name);
        }
 
-       if (!state->sflag.error && everything) {
+       if (everything) {
                if (state->sflag.s == NULL)
                        state->sflag.s = state->c->session;
                if (state->sflag.wl == NULL)
@@ -450,9 +449,10 @@ cmd_set_state_sflag(struct cmd *cmd, struct cmd_q *cmdq, 
int everything)
                if (state->sflag.wp == NULL)
                        state->sflag.wp = state->sflag.wl->window->active;
        }
+       return (0);
 }
 
-void
+int
 cmd_prepare_state(struct cmd *cmd, struct cmd_q *cmdq)
 {
        struct cmd_state        *state = &cmdq->state;
@@ -461,6 +461,7 @@ cmd_prepare_state(struct cmd *cmd, struct cmd_q *cmdq)
        const char              *tflag;
        const char              *sflag;
        char                     tmp[BUFSIZ];
+       int                      error;
 
        cmd_print(cmd, tmp, sizeof tmp);
        log_debug("preparing state for: %s (client %p)", tmp, cmdq->client);
@@ -470,7 +471,7 @@ cmd_prepare_state(struct cmd *cmd, struct cmd_q *cmdq)
 
        /* FIXME:  Handle this!  What should happen during cfg_load? */
        if (cfg_finished == 0)
-               return;
+               return (0);
 
        /*
         * If the command wants a client and provides -c or -t, use it. If not,
@@ -479,6 +480,13 @@ cmd_prepare_state(struct cmd *cmd, struct cmd_q *cmdq)
        switch (cmd->entry->flags & (CMD_PREP_CLIENT_C|CMD_PREP_CLIENT_T)) {
        case 0:
                state->c = cmd_get_state_client(cmdq);
+               if (state->c == NULL) {
+                       if ((cmd->entry->flags & CMD_PREP_ALL_T) != 0)
+                               return (-1);
+                       if ((cmd->entry->flags & CMD_PREP_ALL_S) != 0)
+                               return (-1);
+                       return (0);
+               }
                break;
        case CMD_PREP_CLIENT_C:
                cflag = args_get(args, 'c');
@@ -486,6 +494,8 @@ cmd_prepare_state(struct cmd *cmd, struct cmd_q *cmdq)
                        state->c = cmd_get_state_client(cmdq);
                else
                        state->c = cmd_find_client(cmdq, cflag, 0);
+               if (state->c == NULL)
+                       return (-1);
                break;
        case CMD_PREP_CLIENT_T:
                tflag = args_get(args, 't');
@@ -493,17 +503,12 @@ cmd_prepare_state(struct cmd *cmd, struct cmd_q *cmdq)
                        state->c = cmd_get_state_client(cmdq);
                else
                        state->c = cmd_find_client(cmdq, tflag, 0);
+               if (state->c == NULL)
+                       return (-1);
                break;
        default:
                log_fatalx("both -c and -t for %s", cmd->entry->name);
        }
-       if (state->c == NULL) {
-               if ((cmd->entry->flags & CMD_PREP_ALL_T) != 0)
-                       state->tflag.error = 1;
-               if ((cmd->entry->flags & CMD_PREP_ALL_S) != 0)
-                       state->sflag.error = 1;
-               return;
-       }
 
        /*
         * If the command wants something for -t and no -t argument is present,
@@ -511,14 +516,17 @@ cmd_prepare_state(struct cmd *cmd, struct cmd_q *cmdq)
         */
        tflag = args_get(args, 't');
        if (tflag == NULL && (cmd->entry->flags & CMD_PREP_ALL_T) != 0)
-               cmd_set_state_tflag(cmdq->cmd, cmdq, 1);
+               error = cmd_set_state_tflag(cmdq->cmd, cmdq, 1);
        else
-               cmd_set_state_tflag(cmd, cmdq, 0);
+               error = cmd_set_state_tflag(cmd, cmdq, 0);
+       if (error != 0)
+               return (error);
        sflag = args_get(args, 's');
        if (sflag == NULL && (cmd->entry->flags & CMD_PREP_ALL_S) != 0)
-               cmd_set_state_sflag(cmdq->cmd, cmdq, 1);
+               error = cmd_set_state_sflag(cmdq->cmd, cmdq, 1);
        else
-               cmd_set_state_sflag(cmd, cmdq, 0);
+               error = cmd_set_state_sflag(cmd, cmdq, 0);
+       return (error);
 }
 
 size_t
diff --git a/hooks.c b/hooks.c
index 5f60dba..d485ae0 100644
--- a/hooks.c
+++ b/hooks.c
@@ -110,8 +110,8 @@ hooks_run(struct hook *hook, struct cmd_q *cmdq)
 
        TAILQ_FOREACH(cmd, &hook->cmdlist->list, qentry) {
                /* TA:  FIXME:  How do we handle errors here, if at all??? */
-               cmd_prepare_state(cmd, cmdq);
-               cmd->entry->exec(cmd, cmdq);
+               if (cmd_prepare_state(cmd, cmdq) == 0)
+                       cmd->entry->exec(cmd, cmdq);
        }
 
        log_debug("exiting hook %s", hook->name);
diff --git a/tmux.h b/tmux.h
index a4281ef..e586ce5 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1365,7 +1365,6 @@ struct cmd_state {
        struct client                   *c;
 
        struct {
-               int                      error;
                struct session          *s;
                struct winlink          *wl;
                struct window_pane      *wp;
@@ -1373,7 +1372,6 @@ struct cmd_state {
        } tflag;
 
        struct {
-               int                      error;
                struct session          *s;
                struct winlink          *wl;
                struct window_pane      *wp;
@@ -1775,7 +1773,7 @@ char             **cmd_copy_argv(int, char **);
 void            cmd_free_argv(int, char **);
 char           *cmd_stringify_argv(int, char **);
 struct cmd     *cmd_parse(int, char **, const char *, u_int, char **);
-void            cmd_prepare_state(struct cmd *, struct cmd_q *);
+int             cmd_prepare_state(struct cmd *, struct cmd_q *);
 size_t          cmd_print(struct cmd *, char *, size_t);
 struct session *cmd_current_session(struct cmd_q *, int);
 struct client  *cmd_current_client(struct cmd_q *);


-----------------------------------------------------------------------

Summary of changes:
 cmd-list-clients.c |    4 +-
 cmd-queue.c        |    6 +---
 cmd.c              |   70 +++++++++++++++++++++++++++++-----------------------
 hooks.c            |    4 +-
 tmux.h             |    4 +--
 5 files changed, 46 insertions(+), 42 deletions(-)


hooks/post-receive
-- 
tmux

------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
tmux-cvs mailing list
tmux-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to