The branch, master has been updated
       via  5aa54c863dad308e2ba96342be887eb59c427e42 (commit)
       via  42735d446eb08360d56e9d77bc681e88bf4fa8a3 (commit)
      from  57eb334d5b989642c84b974908c43c729983d1b8 (commit)

- Log -----------------------------------------------------------------
commit 5aa54c863dad308e2ba96342be887eb59c427e42
Merge: 42735d4 57eb334
Author: Nicholas Marriott <nicholas.marri...@gmail.com>
Commit: Nicholas Marriott <nicholas.marri...@gmail.com>

    Merge branch 'master' of ssh://git.code.sf.net/p/tmux/tmux-code

 format.c |   30 ++++++++++++++++++++++++++++--
 tmux.1   |    1 +
 2 files changed, 29 insertions(+), 2 deletions(-)


commit 42735d446eb08360d56e9d77bc681e88bf4fa8a3
Author: Nicholas Marriott <nicholas.marri...@gmail.com>
Commit: Nicholas Marriott <nicholas.marri...@gmail.com>

    Merge show-buffer into save-buffer.
---
 Makefile.am       |    1 -
 cmd-save-buffer.c |  129 +++++++++++++++++++++++++++++++++++++----------------
 cmd-show-buffer.c |  111 ---------------------------------------------
 3 files changed, 90 insertions(+), 151 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index f77c9ab..57534af 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -122,7 +122,6 @@ dist_tmux_SOURCES = \
        cmd-set-buffer.c \
        cmd-set-environment.c \
        cmd-set-option.c \
-       cmd-show-buffer.c \
        cmd-show-environment.c \
        cmd-show-messages.c \
        cmd-show-options.c \
diff --git a/cmd-save-buffer.c b/cmd-save-buffer.c
index 1d39bc9..80b5bf0 100644
--- a/cmd-save-buffer.c
+++ b/cmd-save-buffer.c
@@ -41,6 +41,16 @@ const struct cmd_entry cmd_save_buffer_entry = {
        cmd_save_buffer_exec
 };
 
+const struct cmd_entry cmd_show_buffer_entry = {
+       "show-buffer", "showb",
+       "b:", 0, 0,
+       CMD_BUFFER_USAGE,
+       0,
+       NULL,
+       NULL,
+       cmd_save_buffer_exec
+};
+
 enum cmd_retval
 cmd_save_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
 {
@@ -49,10 +59,13 @@ cmd_save_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
        struct session          *s;
        struct paste_buffer     *pb;
        const char              *path, *newpath, *wd;
-       char                    *cause;
+       char                    *cause, *start, *end;
+       size_t                   size, used;
        int                      buffer;
        mode_t                   mask;
        FILE                    *f;
+       char                    *msg;
+       size_t                   msglen;
 
        if (!args_has(args, 'b')) {
                if ((pb = paste_get_top(&global_buffers)) == NULL) {
@@ -74,50 +87,88 @@ cmd_save_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
                }
        }
 
-       path = args->argv[0];
+       if (self->entry == &cmd_show_buffer_entry)
+               path = "-";
+       else
+               path = args->argv[0];
        if (strcmp(path, "-") == 0) {
-               c = ctx->curclient;
-               if (c == NULL || !(c->flags & CLIENT_CONTROL))
-                       c = ctx->cmdclient;
-               if (c == NULL) {
-                       ctx->error(ctx, "can't write to stdout");
-                       return (CMD_RETURN_ERROR);
-               }
-               evbuffer_add(c->stdout_data, pb->data, pb->size);
-               server_push_stdout(c);
-       } else {
                c = ctx->cmdclient;
                if (c != NULL)
-                       wd = c->cwd;
-               else if ((s = cmd_current_session(ctx, 0)) != NULL) {
-                       wd = options_get_string(&s->options, "default-path");
-                       if (*wd == '\0')
-                               wd = s->cwd;
-               } else
-                       wd = NULL;
-               if (wd != NULL && *wd != '\0') {
-                       newpath = get_full_path(wd, path);
-                       if (newpath != NULL)
-                               path = newpath;
-               }
+                       goto do_stdout;
+               c = ctx->curclient;
+               if (c->flags & CLIENT_CONTROL)
+                       goto do_stdout;
+               if (c != NULL)
+                       goto do_print;
+               ctx->error(ctx, "can't write to stdout");
+               return (CMD_RETURN_ERROR);
+       }
 
-               mask = umask(S_IRWXG | S_IRWXO);
-               if (args_has(self->args, 'a'))
-                       f = fopen(path, "ab");
-               else
-                       f = fopen(path, "wb");
-               umask(mask);
-               if (f == NULL) {
-                       ctx->error(ctx, "%s: %s", path, strerror(errno));
-                       return (CMD_RETURN_ERROR);
-               }
-               if (fwrite(pb->data, 1, pb->size, f) != pb->size) {
-                       ctx->error(ctx, "%s: fwrite error", path);
-                       fclose(f);
-                       return (CMD_RETURN_ERROR);
-               }
+       c = ctx->cmdclient;
+       if (c != NULL)
+               wd = c->cwd;
+       else if ((s = cmd_current_session(ctx, 0)) != NULL) {
+               wd = options_get_string(&s->options, "default-path");
+               if (*wd == '\0')
+                       wd = s->cwd;
+       } else
+               wd = NULL;
+       if (wd != NULL && *wd != '\0') {
+               newpath = get_full_path(wd, path);
+               if (newpath != NULL)
+                       path = newpath;
+       }
+
+       mask = umask(S_IRWXG | S_IRWXO);
+       if (args_has(self->args, 'a'))
+               f = fopen(path, "ab");
+       else
+               f = fopen(path, "wb");
+       umask(mask);
+       if (f == NULL) {
+               ctx->error(ctx, "%s: %s", path, strerror(errno));
+               return (CMD_RETURN_ERROR);
+       }
+       if (fwrite(pb->data, 1, pb->size, f) != pb->size) {
+               ctx->error(ctx, "%s: fwrite error", path);
                fclose(f);
+               return (CMD_RETURN_ERROR);
+       }
+       fclose(f);
+
+       return (CMD_RETURN_NORMAL);
+
+do_stdout:
+       evbuffer_add(c->stdout_data, pb->data, pb->size);
+       server_push_stdout(c);
+       return (CMD_RETURN_NORMAL);
+
+do_print:
+       if (pb->size > (INT_MAX / 4) - 1) {
+               ctx->error(ctx, "buffer too big");
+               return (CMD_RETURN_ERROR);
+       }
+       msg = NULL;
+       msglen = 0;
+
+       used = 0;
+       while (used != pb->size) {
+               start = pb->data + used;
+               end = memchr(start, '\n', pb->size - used);
+               if (end != NULL)
+                       size = end - start;
+               else
+                       size = pb->size - used;
+
+               msglen = size * 4 + 1;
+               msg = xrealloc(msg, 1, msglen);
+
+               strvisx(msg, start, size, VIS_OCTAL|VIS_TAB);
+               ctx->print(ctx, "%s", msg);
+
+               used += size + (end != NULL);
        }
 
+       free(msg);
        return (CMD_RETURN_NORMAL);
 }
diff --git a/cmd-show-buffer.c b/cmd-show-buffer.c
deleted file mode 100644
index b345ebc..0000000
--- a/cmd-show-buffer.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/* $Id$ */
-
-/*
- * Copyright (c) 2007 Nicholas Marriott <n...@users.sourceforge.net>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <sys/types.h>
-
-#include <stdlib.h>
-
-#include "tmux.h"
-
-/*
- * Show a paste buffer.
- */
-
-enum cmd_retval         cmd_show_buffer_exec(struct cmd *, struct cmd_ctx *);
-
-const struct cmd_entry cmd_show_buffer_entry = {
-       "show-buffer", "showb",
-       "b:", 0, 0,
-       CMD_BUFFER_USAGE,
-       0,
-       NULL,
-       NULL,
-       cmd_show_buffer_exec
-};
-
-enum cmd_retval
-cmd_show_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
-{
-       struct args             *args = self->args;
-       struct session          *s;
-       struct paste_buffer     *pb;
-       int                      buffer;
-       char                    *in, *buf, *ptr, *cause;
-       size_t                   size, len;
-       u_int                    width;
-
-       if ((s = cmd_find_session(ctx, NULL, 0)) == NULL)
-               return (CMD_RETURN_ERROR);
-
-       if (!args_has(args, 'b')) {
-               if ((pb = paste_get_top(&global_buffers)) == NULL) {
-                       ctx->error(ctx, "no buffers");
-                       return (CMD_RETURN_ERROR);
-               }
-       } else {
-               buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause);
-               if (cause != NULL) {
-                       ctx->error(ctx, "buffer %s", cause);
-                       free(cause);
-                       return (CMD_RETURN_ERROR);
-               }
-
-               pb = paste_get_index(&global_buffers, buffer);
-               if (pb == NULL) {
-                       ctx->error(ctx, "no buffer %d", buffer);
-                       return (CMD_RETURN_ERROR);
-               }
-       }
-
-       size = pb->size;
-       if (size > SIZE_MAX / 4 - 1)
-               size = SIZE_MAX / 4 - 1;
-       in = xmalloc(size * 4 + 1);
-       strvisx(in, pb->data, size, VIS_OCTAL|VIS_TAB);
-
-       width = s->sx;
-       if (ctx->cmdclient != NULL)
-               width = ctx->cmdclient->tty.sx;
-
-       buf = xmalloc(width + 1);
-       len = 0;
-
-       ptr = in;
-       do {
-               buf[len++] = *ptr++;
-
-               if (len == width || buf[len - 1] == '\n') {
-                       if (buf[len - 1] == '\n')
-                               len--;
-                       buf[len] = '\0';
-
-                       ctx->print(ctx, "%s", buf);
-                       len = 0;
-               }
-       } while (*ptr != '\0');
-
-       if (len != 0) {
-               buf[len] = '\0';
-               ctx->print(ctx, "%s", buf);
-       }
-       free(buf);
-
-       free(in);
-
-       return (CMD_RETURN_NORMAL);
-}


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

Summary of changes:
 Makefile.am       |    1 -
 cmd-save-buffer.c |  129 +++++++++++++++++++++++++++++++++++++----------------
 cmd-show-buffer.c |  111 ---------------------------------------------
 3 files changed, 90 insertions(+), 151 deletions(-)
 delete mode 100644 cmd-show-buffer.c


hooks/post-receive
-- 
tmux

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
tmux-cvs mailing list
tmux-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to