The branch, master has been updated
       via  f141e9b37a8d8a0c89c4f74137df9e5088b4b7af (commit)
       via  3fba377ddd6fd234c614b53d5402153c6489b505 (commit)
      from  01a47525030ec6fa4f53dc2c0cb6786f63881679 (commit)

- Log -----------------------------------------------------------------
commit f141e9b37a8d8a0c89c4f74137df9e5088b4b7af
Author: Nicholas Marriott <[email protected]>
Commit: Nicholas Marriott <[email protected]>

    Instead of fixed size buffers for some messages, send only the string 
length.
---
 client.c        |   66 +++++++++++++++++++++++++-----------------------------
 server-client.c |   14 ++---------
 server-fn.c     |   10 +++-----
 tmux.h          |   12 ----------
 4 files changed, 38 insertions(+), 64 deletions(-)

diff --git a/client.c b/client.c
index 13c9ca9..de9ec52 100644
--- a/client.c
+++ b/client.c
@@ -488,33 +488,33 @@ client_write(int fd, const char *data, size_t size)
 
 /* Dispatch imsgs when in wait state (before MSG_READY). */
 int
-client_dispatch_wait(void *data)
+client_dispatch_wait(void *data0)
 {
-       struct imsg             imsg;
-       ssize_t                 n, datalen;
-       struct msg_shell_data   shelldata;
-       struct msg_exit_data    exitdata;
-       struct msg_stdout_data  stdoutdata;
-       struct msg_stderr_data  stderrdata;
-       const char             *shellcmd = data;
+       struct imsg              imsg;
+       char                    *data;
+       ssize_t                  n, datalen;
+       struct msg_stdout_data   stdoutdata;
+       struct msg_stderr_data   stderrdata;
+       int                      retval;
 
        for (;;) {
                if ((n = imsg_get(&client_ibuf, &imsg)) == -1)
                        fatalx("imsg_get failed");
                if (n == 0)
                        return (0);
+
+               data = imsg.data;
                datalen = imsg.hdr.len - IMSG_HEADER_SIZE;
 
                log_debug("got %d from server", imsg.hdr.type);
                switch (imsg.hdr.type) {
                case MSG_EXIT:
                case MSG_SHUTDOWN:
-                       if (datalen != sizeof exitdata) {
-                               if (datalen != 0)
-                                       fatalx("bad MSG_EXIT size");
-                       } else {
-                               memcpy(&exitdata, imsg.data, sizeof exitdata);
-                               client_exitval = exitdata.retcode;
+                       if (datalen != sizeof retval && datalen != 0)
+                               fatalx("bad MSG_EXIT size");
+                       if (datalen == sizeof retval) {
+                               memcpy(&retval, data, sizeof retval);
+                               client_exitval = retval;
                        }
                        imsg_free(&imsg);
                        return (-1);
@@ -534,15 +534,15 @@ client_dispatch_wait(void *data)
                        break;
                case MSG_STDOUT:
                        if (datalen != sizeof stdoutdata)
-                               fatalx("bad MSG_STDOUT");
-                       memcpy(&stdoutdata, imsg.data, sizeof stdoutdata);
+                               fatalx("bad MSG_STDOUT size");
+                       memcpy(&stdoutdata, data, sizeof stdoutdata);
 
                        client_write(STDOUT_FILENO, stdoutdata.data, 
stdoutdata.size);
                        break;
                case MSG_STDERR:
                        if (datalen != sizeof stderrdata)
-                               fatalx("bad MSG_STDERR");
-                       memcpy(&stderrdata, imsg.data, sizeof stderrdata);
+                               fatalx("bad MSG_STDERR size");
+                       memcpy(&stderrdata, data, sizeof stderrdata);
 
                        client_write(STDERR_FILENO, stderrdata.data, 
stderrdata.size);
                        break;
@@ -558,14 +558,11 @@ client_dispatch_wait(void *data)
                        imsg_free(&imsg);
                        return (-1);
                case MSG_SHELL:
-                       if (datalen != sizeof shelldata)
-                               fatalx("bad MSG_SHELL size");
-                       memcpy(&shelldata, imsg.data, sizeof shelldata);
-                       shelldata.shell[(sizeof shelldata.shell) - 1] = '\0';
+                       if (data[datalen - 1] != '\0')
+                               fatalx("bad MSG_SHELL string");
 
                        clear_signals(0);
-
-                       shell_exec(shelldata.shell, shellcmd);
+                       shell_exec(data, data0);
                        /* NOTREACHED */
                case MSG_DETACH:
                        client_write_server(MSG_EXITING, NULL, 0);
@@ -585,16 +582,18 @@ client_dispatch_wait(void *data)
 int
 client_dispatch_attached(void)
 {
-       struct imsg             imsg;
-       struct msg_lock_data    lockdata;
-       struct sigaction        sigact;
-       ssize_t                 n, datalen;
+       struct imsg              imsg;
+       struct sigaction         sigact;
+       char                    *data;
+       ssize_t                  n, datalen;
 
        for (;;) {
                if ((n = imsg_get(&client_ibuf, &imsg)) == -1)
                        fatalx("imsg_get failed");
                if (n == 0)
                        return (0);
+
+               data = imsg.data;
                datalen = imsg.hdr.len - IMSG_HEADER_SIZE;
 
                log_debug("got %d from server", imsg.hdr.type);
@@ -612,8 +611,7 @@ client_dispatch_attached(void)
                        client_write_server(MSG_EXITING, NULL, 0);
                        break;
                case MSG_EXIT:
-                       if (datalen != 0 &&
-                           datalen != sizeof (struct msg_exit_data))
+                       if (datalen != 0 && datalen != sizeof (int))
                                fatalx("bad MSG_EXIT size");
 
                        client_write_server(MSG_EXITING, NULL, 0);
@@ -646,12 +644,10 @@ client_dispatch_attached(void)
                        kill(getpid(), SIGTSTP);
                        break;
                case MSG_LOCK:
-                       if (datalen != sizeof lockdata)
-                               fatalx("bad MSG_LOCK size");
-                       memcpy(&lockdata, imsg.data, sizeof lockdata);
+                       if (data[datalen - 1] != '\0')
+                               fatalx("bad MSG_LOCK string");
 
-                       lockdata.cmd[(sizeof lockdata.cmd) - 1] = '\0';
-                       system(lockdata.cmd);
+                       system(data);
                        client_write_server(MSG_UNLOCK, NULL, 0);
                        break;
                default:
diff --git a/server-client.c b/server-client.c
index 41d1bb2..31a286b 100644
--- a/server-client.c
+++ b/server-client.c
@@ -695,8 +695,6 @@ server_client_repeat_timer(unused int fd, unused short 
events, void *data)
 void
 server_client_check_exit(struct client *c)
 {
-       struct msg_exit_data    exitdata;
-
        if (!(c->flags & CLIENT_EXIT))
                return;
 
@@ -707,9 +705,7 @@ server_client_check_exit(struct client *c)
        if (EVBUFFER_LENGTH(c->stderr_data) != 0)
                return;
 
-       exitdata.retcode = c->retval;
-       server_write_client(c, MSG_EXIT, &exitdata, sizeof exitdata);
-
+       server_write_client(c, MSG_EXIT, &c->retval, sizeof c->retval);
        c->flags &= ~CLIENT_EXIT;
 }
 
@@ -995,16 +991,12 @@ server_client_msg_identify(
 void
 server_client_msg_shell(struct client *c)
 {
-       struct msg_shell_data    data;
-       const char              *shell;
+       const char      *shell;
 
        shell = options_get_string(&global_s_options, "default-shell");
-
        if (*shell == '\0' || areshell(shell))
                shell = _PATH_BSHELL;
-       if (strlcpy(data.shell, shell, sizeof data.shell) >= sizeof data.shell)
-               strlcpy(data.shell, _PATH_BSHELL, sizeof data.shell);
+       server_write_client(c, MSG_SHELL, shell, strlen(shell) + 1);
 
-       server_write_client(c, MSG_SHELL, &data, sizeof data);
        c->flags |= CLIENT_BAD; /* it will die after exec */
 }
diff --git a/server-fn.c b/server-fn.c
index 738a61d..f025b3a 100644
--- a/server-fn.c
+++ b/server-fn.c
@@ -235,9 +235,8 @@ server_lock_session(struct session *s)
 void
 server_lock_client(struct client *c)
 {
-       const char              *cmd;
-       size_t                   cmdlen;
-       struct msg_lock_data     lockdata;
+       const char      *cmd;
+       size_t           cmdlen;
 
        if (c->flags & CLIENT_CONTROL)
                return;
@@ -246,8 +245,7 @@ server_lock_client(struct client *c)
                return;
 
        cmd = options_get_string(&c->session->options, "lock-command");
-       cmdlen = strlcpy(lockdata.cmd, cmd, sizeof lockdata.cmd);
-       if (cmdlen >= sizeof lockdata.cmd)
+       if (strlen(cmd) + 1 > MAX_IMSGSIZE - IMSG_HEADER_SIZE)
                return;
 
        tty_stop_tty(&c->tty);
@@ -256,7 +254,7 @@ server_lock_client(struct client *c)
        tty_raw(&c->tty, tty_term_string(c->tty.term, TTYC_E3));
 
        c->flags |= CLIENT_SUSPENDED;
-       server_write_client(c, MSG_LOCK, &lockdata, sizeof lockdata);
+       server_write_client(c, MSG_LOCK, cmd, strlen(cmd) + 1);
 }
 
 void
diff --git a/tmux.h b/tmux.h
index 7d08279..96ce0c6 100644
--- a/tmux.h
+++ b/tmux.h
@@ -487,22 +487,10 @@ struct msg_identify_data {
        int             flags;
 };
 
-struct msg_lock_data {
-       char            cmd[COMMAND_LENGTH];
-};
-
 struct msg_environ_data {
        char            var[ENVIRON_LENGTH];
 };
 
-struct msg_shell_data {
-       char            shell[MAXPATHLEN];
-};
-
-struct msg_exit_data {
-       int             retcode;
-};
-
 struct msg_stdin_data {
        ssize_t size;
        char    data[BUFSIZ];


commit 3fba377ddd6fd234c614b53d5402153c6489b505
Author: Nicholas Marriott <[email protected]>
Commit: Nicholas Marriott <[email protected]>

    retcode -> retval for exit message.
---
 cmd-queue.c     |    2 +-
 server-client.c |    2 +-
 tmux.h          |    3 ++-
 3 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/cmd-queue.c b/cmd-queue.c
index bbc9971..7feb25e 100644
--- a/cmd-queue.c
+++ b/cmd-queue.c
@@ -143,7 +143,7 @@ cmdq_error(struct cmd_q *cmdq, const char *fmt, ...)
                evbuffer_add(c->stderr_data, "\n", 1);
 
                server_push_stderr(c);
-               c->retcode = 1;
+               c->retval = 1;
        } else {
                *msg = toupper((u_char) *msg);
                status_message_set(c, "%s", msg);
diff --git a/server-client.c b/server-client.c
index 7a9f911..41d1bb2 100644
--- a/server-client.c
+++ b/server-client.c
@@ -707,7 +707,7 @@ server_client_check_exit(struct client *c)
        if (EVBUFFER_LENGTH(c->stderr_data) != 0)
                return;
 
-       exitdata.retcode = c->retcode;
+       exitdata.retcode = c->retval;
        server_write_client(c, MSG_EXIT, &exitdata, sizeof exitdata);
 
        c->flags &= ~CLIENT_EXIT;
diff --git a/tmux.h b/tmux.h
index 3b4f815..7d08279 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1295,8 +1295,9 @@ RB_HEAD(status_out_tree, status_out);
 /* Client connection. */
 struct client {
        struct imsgbuf   ibuf;
+
        struct event     event;
-       int              retcode;
+       int              retval;
 
        struct timeval   creation_time;
        struct timeval   activity_time;


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

Summary of changes:
 client.c        |   66 +++++++++++++++++++++++++-----------------------------
 cmd-queue.c     |    2 +-
 server-client.c |   14 ++---------
 server-fn.c     |   10 +++-----
 tmux.h          |   15 +----------
 5 files changed, 41 insertions(+), 66 deletions(-)


hooks/post-receive
-- 
tmux

------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134791&iu=/4140/ostg.clktrk
_______________________________________________
tmux-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to