=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/Attic/cmd-copy-buffer.c,v retrieving revision 1.3 retrieving revision 1.4 diff -c -r1.3 -r1.4 *** src/usr.bin/tmux/Attic/cmd-copy-buffer.c 2009/07/26 12:58:44 1.3 --- src/usr.bin/tmux/Attic/cmd-copy-buffer.c 2009/09/07 18:50:45 1.4 *************** *** 1,4 **** ! /* $OpenBSD: cmd-copy-buffer.c,v 1.3 2009/07/26 12:58:44 nicm Exp $ */ /* * Copyright (c) 2009 Tiago Cunha --- 1,4 ---- ! /* $OpenBSD: cmd-copy-buffer.c,v 1.4 2009/09/07 18:50:45 nicm Exp $ */ /* * Copyright (c) 2009 Tiago Cunha *************** *** 16,22 **** --- 16,25 ---- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + #include + #include + #include #include "tmux.h" *************** *** 122,155 **** { struct cmd_copy_buffer_data *data = self->data; struct paste_buffer *pb; struct session *dst_session, *src_session; u_int limit; if ((dst_session = cmd_find_session(ctx, data->dst_session)) == NULL || (src_session = cmd_find_session(ctx, data->src_session)) == NULL) return (-1); if (data->src_idx == -1) { ! if ((pb = paste_get_top(&src_session->buffers)) == NULL) { ctx->error(ctx, "no buffers"); return (-1); } } else { ! if ((pb = paste_get_index(&src_session->buffers, ! data->src_idx)) == NULL) { ctx->error(ctx, "no buffer %d", data->src_idx); return (-1); } } - limit = options_get_number(&dst_session->options, "buffer-limit"); ! if (data->dst_idx == -1) { ! paste_add(&dst_session->buffers, xstrdup(pb->data), limit); ! return (0); ! } ! if (paste_replace(&dst_session->buffers, data->dst_idx, ! xstrdup(pb->data)) != 0) { ctx->error(ctx, "no buffer %d", data->dst_idx); return (-1); } --- 125,162 ---- { struct cmd_copy_buffer_data *data = self->data; struct paste_buffer *pb; + struct paste_stack *dst_ps, *src_ps; + u_char *pdata; struct session *dst_session, *src_session; u_int limit; if ((dst_session = cmd_find_session(ctx, data->dst_session)) == NULL || (src_session = cmd_find_session(ctx, data->src_session)) == NULL) return (-1); + dst_ps = &dst_session->buffers; + src_ps = &src_session->buffers; if (data->src_idx == -1) { ! if ((pb = paste_get_top(src_ps)) == NULL) { ctx->error(ctx, "no buffers"); return (-1); } } else { ! if ((pb = paste_get_index(src_ps, data->src_idx)) == NULL) { ctx->error(ctx, "no buffer %d", data->src_idx); return (-1); } } limit = options_get_number(&dst_session->options, "buffer-limit"); ! ! pdata = xmalloc(pb->size); ! memcpy(pdata, pb->data, pb->size); ! ! if (data->dst_idx == -1) ! paste_add(dst_ps, pdata, pb->size, limit); ! else if (paste_replace(dst_ps, data->dst_idx, pdata, pb->size) != 0) { ctx->error(ctx, "no buffer %d", data->dst_idx); + xfree(pdata); return (-1); }