From bec6c807cd580b003cd94b52a20caa2cbc7a0753 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 24 Apr 2014 09:14:43 +0000 Subject: [PATCH] There is no longer a need for a paste_stack struct or for global_buffers to be global. Move to paste.c. --- cmd-capture-pane.c | 4 ++-- cmd-choose-buffer.c | 4 ++-- cmd-delete-buffer.c | 4 ++-- cmd-list-buffers.c | 2 +- cmd-load-buffer.c | 8 ++++---- cmd-paste-buffer.c | 8 ++++---- cmd-save-buffer.c | 4 ++-- cmd-set-buffer.c | 8 ++++---- input-keys.c | 2 +- paste.c | 50 +++++++++++++++++++++++---------------------- server.c | 3 --- status.c | 2 +- tmux.h | 16 +++++++-------- window-copy.c | 14 ++++++------- 14 files changed, 63 insertions(+), 66 deletions(-) diff --git a/cmd-capture-pane.c b/cmd-capture-pane.c index cf9a2f49..759063d1 100644 --- a/cmd-capture-pane.c +++ b/cmd-capture-pane.c @@ -194,7 +194,7 @@ cmd_capture_pane_exec(struct cmd *self, struct cmd_q *cmdq) } else { limit = options_get_number(&global_options, "buffer-limit"); if (!args_has(args, 'b')) { - paste_add(&global_buffers, buf, len, limit); + paste_add(buf, len, limit); return (CMD_RETURN_NORMAL); } @@ -206,7 +206,7 @@ cmd_capture_pane_exec(struct cmd *self, struct cmd_q *cmdq) return (CMD_RETURN_ERROR); } - if (paste_replace(&global_buffers, buffer, buf, len) != 0) { + if (paste_replace(buffer, buf, len) != 0) { cmdq_error(cmdq, "no buffer %d", buffer); free(buf); return (CMD_RETURN_ERROR); diff --git a/cmd-choose-buffer.c b/cmd-choose-buffer.c index 1e0edaa6..c6c70a0d 100644 --- a/cmd-choose-buffer.c +++ b/cmd-choose-buffer.c @@ -63,7 +63,7 @@ cmd_choose_buffer_exec(struct cmd *self, struct cmd_q *cmdq) return (CMD_RETURN_ERROR); utf8flag = options_get_number(&wl->window->options, "utf8"); - if (paste_get_top(&global_buffers) == NULL) + if (paste_get_top() == NULL) return (CMD_RETURN_NORMAL); if (window_pane_set_mode(wl->window->active, &window_choose_mode) != 0) @@ -75,7 +75,7 @@ cmd_choose_buffer_exec(struct cmd *self, struct cmd_q *cmdq) action = xstrdup("paste-buffer -b '%%'"); idx = 0; - while ((pb = paste_walk_stack(&global_buffers, &idx)) != NULL) { + while ((pb = paste_walk_stack(&idx)) != NULL) { cdata = window_choose_data_create(TREE_OTHER, c, c->session); cdata->idx = idx - 1; diff --git a/cmd-delete-buffer.c b/cmd-delete-buffer.c index 32fb243b..464d2b78 100644 --- a/cmd-delete-buffer.c +++ b/cmd-delete-buffer.c @@ -45,7 +45,7 @@ cmd_delete_buffer_exec(struct cmd *self, struct cmd_q *cmdq) int buffer; if (!args_has(args, 'b')) { - paste_free_top(&global_buffers); + paste_free_top(); return (CMD_RETURN_NORMAL); } @@ -56,7 +56,7 @@ cmd_delete_buffer_exec(struct cmd *self, struct cmd_q *cmdq) return (CMD_RETURN_ERROR); } - if (paste_free_index(&global_buffers, buffer) != 0) { + if (paste_free_index(buffer) != 0) { cmdq_error(cmdq, "no buffer %d", buffer); return (CMD_RETURN_ERROR); } diff --git a/cmd-list-buffers.c b/cmd-list-buffers.c index 7051eae8..2363c806 100644 --- a/cmd-list-buffers.c +++ b/cmd-list-buffers.c @@ -52,7 +52,7 @@ cmd_list_buffers_exec(unused struct cmd *self, struct cmd_q *cmdq) template = LIST_BUFFERS_TEMPLATE; idx = 0; - while ((pb = paste_walk_stack(&global_buffers, &idx)) != NULL) { + while ((pb = paste_walk_stack(&idx)) != NULL) { ft = format_create(); format_add(ft, "line", "%u", idx - 1); format_paste_buffer(ft, pb, 0); diff --git a/cmd-load-buffer.c b/cmd-load-buffer.c index 636f0fcd..5e9b6748 100644 --- a/cmd-load-buffer.c +++ b/cmd-load-buffer.c @@ -119,10 +119,10 @@ cmd_load_buffer_exec(struct cmd *self, struct cmd_q *cmdq) limit = options_get_number(&global_options, "buffer-limit"); if (buffer == -1) { - paste_add(&global_buffers, pdata, psize, limit); + paste_add(pdata, psize, limit); return (CMD_RETURN_NORMAL); } - if (paste_replace(&global_buffers, buffer, pdata, psize) != 0) { + if (paste_replace(buffer, pdata, psize) != 0) { cmdq_error(cmdq, "no buffer %d", buffer); free(pdata); return (CMD_RETURN_ERROR); @@ -164,8 +164,8 @@ cmd_load_buffer_callback(struct client *c, int closed, void *data) limit = options_get_number(&global_options, "buffer-limit"); if (*buffer == -1) - paste_add(&global_buffers, pdata, psize, limit); - else if (paste_replace(&global_buffers, *buffer, pdata, psize) != 0) { + paste_add(pdata, psize, limit); + else if (paste_replace(*buffer, pdata, psize) != 0) { /* No context so can't use server_client_msg_error. */ evbuffer_add_printf(c->stderr_data, "no buffer %d\n", *buffer); server_push_stderr(c); diff --git a/cmd-paste-buffer.c b/cmd-paste-buffer.c index 8f7530a2..c3837c6d 100644 --- a/cmd-paste-buffer.c +++ b/cmd-paste-buffer.c @@ -69,9 +69,9 @@ cmd_paste_buffer_exec(struct cmd *self, struct cmd_q *cmdq) } if (buffer == -1) - pb = paste_get_top(&global_buffers); + pb = paste_get_top(); else { - pb = paste_get_index(&global_buffers, buffer); + pb = paste_get_index(buffer); if (pb == NULL) { cmdq_error(cmdq, "no buffer %d", buffer); return (CMD_RETURN_ERROR); @@ -93,9 +93,9 @@ cmd_paste_buffer_exec(struct cmd *self, struct cmd_q *cmdq) /* Delete the buffer if -d. */ if (args_has(args, 'd')) { if (buffer == -1) - paste_free_top(&global_buffers); + paste_free_top(); else - paste_free_index(&global_buffers, buffer); + paste_free_index(buffer); } return (CMD_RETURN_NORMAL); diff --git a/cmd-save-buffer.c b/cmd-save-buffer.c index b6ee2e49..0a1853d4 100644 --- a/cmd-save-buffer.c +++ b/cmd-save-buffer.c @@ -66,7 +66,7 @@ cmd_save_buffer_exec(struct cmd *self, struct cmd_q *cmdq) FILE *f; if (!args_has(args, 'b')) { - if ((pb = paste_get_top(&global_buffers)) == NULL) { + if ((pb = paste_get_top()) == NULL) { cmdq_error(cmdq, "no buffers"); return (CMD_RETURN_ERROR); } @@ -78,7 +78,7 @@ cmd_save_buffer_exec(struct cmd *self, struct cmd_q *cmdq) return (CMD_RETURN_ERROR); } - pb = paste_get_index(&global_buffers, buffer); + pb = paste_get_index(buffer); if (pb == NULL) { cmdq_error(cmdq, "no buffer %d", buffer); return (CMD_RETURN_ERROR); diff --git a/cmd-set-buffer.c b/cmd-set-buffer.c index a206760c..5dabc1ee 100644 --- a/cmd-set-buffer.c +++ b/cmd-set-buffer.c @@ -66,13 +66,13 @@ cmd_set_buffer_exec(struct cmd *self, struct cmd_q *cmdq) free(cause); return (CMD_RETURN_ERROR); } - pb = paste_get_index(&global_buffers, buffer); + pb = paste_get_index(buffer); if (pb == NULL) { cmdq_error(cmdq, "no buffer %d", buffer); return (CMD_RETURN_ERROR); } } else if (args_has(args, 'a')) { - pb = paste_get_top(&global_buffers); + pb = paste_get_top(); if (pb != NULL) buffer = 0; } @@ -88,9 +88,9 @@ cmd_set_buffer_exec(struct cmd *self, struct cmd_q *cmdq) psize += newsize; if (buffer == -1) - paste_add(&global_buffers, pdata, psize, limit); + paste_add(pdata, psize, limit); else - paste_replace(&global_buffers, buffer, pdata, psize); + paste_replace(buffer, pdata, psize); return (CMD_RETURN_NORMAL); } diff --git a/input-keys.c b/input-keys.c index 0370a684..6e21cc0c 100644 --- a/input-keys.c +++ b/input-keys.c @@ -240,7 +240,7 @@ input_mouse(struct window_pane *wp, struct session *s, struct mouse_event *m) if (m->button == 1 && (m->event & MOUSE_EVENT_CLICK) && options_get_number(&wp->window->options, "mode-mouse") == 1) { - pb = paste_get_top(&global_buffers); + pb = paste_get_top(); if (pb != NULL) { paste_send_pane(pb, wp, "\r", wp->screen->mode & MODE_BRACKETPASTE); diff --git a/paste.c b/paste.c index 98d71a07..9492fd91 100644 --- a/paste.c +++ b/paste.c @@ -30,46 +30,48 @@ * string! */ +ARRAY_DECL(, struct paste_buffer *) paste_buffers = ARRAY_INITIALIZER; + /* Return each item of the stack in turn. */ struct paste_buffer * -paste_walk_stack(struct paste_stack *ps, u_int *idx) +paste_walk_stack(u_int *idx) { struct paste_buffer *pb; - pb = paste_get_index(ps, *idx); + pb = paste_get_index(*idx); (*idx)++; return (pb); } /* Get the top item on the stack. */ struct paste_buffer * -paste_get_top(struct paste_stack *ps) +paste_get_top(void) { - if (ARRAY_LENGTH(ps) == 0) + if (ARRAY_LENGTH(&paste_buffers) == 0) return (NULL); - return (ARRAY_FIRST(ps)); + return (ARRAY_FIRST(&paste_buffers)); } /* Get an item by its index. */ struct paste_buffer * -paste_get_index(struct paste_stack *ps, u_int idx) +paste_get_index(u_int idx) { - if (idx >= ARRAY_LENGTH(ps)) + if (idx >= ARRAY_LENGTH(&paste_buffers)) return (NULL); - return (ARRAY_ITEM(ps, idx)); + return (ARRAY_ITEM(&paste_buffers, idx)); } /* Free the top item on the stack. */ int -paste_free_top(struct paste_stack *ps) +paste_free_top(void) { struct paste_buffer *pb; - if (ARRAY_LENGTH(ps) == 0) + if (ARRAY_LENGTH(&paste_buffers) == 0) return (-1); - pb = ARRAY_FIRST(ps); - ARRAY_REMOVE(ps, 0); + pb = ARRAY_FIRST(&paste_buffers); + ARRAY_REMOVE(&paste_buffers, 0); free(pb->data); free(pb); @@ -79,15 +81,15 @@ paste_free_top(struct paste_stack *ps) /* Free an item by index. */ int -paste_free_index(struct paste_stack *ps, u_int idx) +paste_free_index(u_int idx) { struct paste_buffer *pb; - if (idx >= ARRAY_LENGTH(ps)) + if (idx >= ARRAY_LENGTH(&paste_buffers)) return (-1); - pb = ARRAY_ITEM(ps, idx); - ARRAY_REMOVE(ps, idx); + pb = ARRAY_ITEM(&paste_buffers, idx); + ARRAY_REMOVE(&paste_buffers, idx); free(pb->data); free(pb); @@ -100,22 +102,22 @@ paste_free_index(struct paste_stack *ps, u_int idx) * that the caller is responsible for allocating data. */ void -paste_add(struct paste_stack *ps, char *data, size_t size, u_int limit) +paste_add(char *data, size_t size, u_int limit) { struct paste_buffer *pb; if (size == 0) return; - while (ARRAY_LENGTH(ps) >= limit) { - pb = ARRAY_LAST(ps); + while (ARRAY_LENGTH(&paste_buffers) >= limit) { + pb = ARRAY_LAST(&paste_buffers); free(pb->data); free(pb); - ARRAY_TRUNC(ps, 1); + ARRAY_TRUNC(&paste_buffers, 1); } pb = xmalloc(sizeof *pb); - ARRAY_INSERT(ps, 0, pb); + ARRAY_INSERT(&paste_buffers, 0, pb); pb->data = data; pb->size = size; @@ -127,7 +129,7 @@ paste_add(struct paste_stack *ps, char *data, size_t size, u_int limit) * allocating data. */ int -paste_replace(struct paste_stack *ps, u_int idx, char *data, size_t size) +paste_replace(u_int idx, char *data, size_t size) { struct paste_buffer *pb; @@ -136,10 +138,10 @@ paste_replace(struct paste_stack *ps, u_int idx, char *data, size_t size) return (0); } - if (idx >= ARRAY_LENGTH(ps)) + if (idx >= ARRAY_LENGTH(&paste_buffers)) return (-1); - pb = ARRAY_ITEM(ps, idx); + pb = ARRAY_ITEM(&paste_buffers, idx); free(pb->data); pb->data = data; diff --git a/server.c b/server.c index ea8b77f1..0d6c4f15 100644 --- a/server.c +++ b/server.c @@ -51,8 +51,6 @@ int server_shutdown; struct event server_ev_accept; struct event server_ev_second; -struct paste_stack global_buffers; - int server_create_socket(void); void server_loop(void); int server_should_shutdown(void); @@ -147,7 +145,6 @@ server_start(int lockfd, char *lockfile) RB_INIT(&sessions); RB_INIT(&dead_sessions); TAILQ_INIT(&session_groups); - ARRAY_INIT(&global_buffers); mode_key_init_trees(); key_bindings_init(); utf8_build(); diff --git a/status.c b/status.c index acbf278e..4ea42f1c 100644 --- a/status.c +++ b/status.c @@ -1157,7 +1157,7 @@ status_prompt_key(struct client *c, int key) c->flags |= CLIENT_STATUS; break; case MODEKEYEDIT_PASTE: - if ((pb = paste_get_top(&global_buffers)) == NULL) + if ((pb = paste_get_top()) == NULL) break; for (n = 0; n < pb->size; n++) { ch = (u_char) pb->data[n]; diff --git a/tmux.h b/tmux.h index ed0f2e44..68a8517b 100644 --- a/tmux.h +++ b/tmux.h @@ -1037,7 +1037,6 @@ struct paste_buffer { char *data; size_t size; }; -ARRAY_DECL(paste_stack, struct paste_buffer *); /* Environment variable. */ struct environ_entry { @@ -1709,13 +1708,13 @@ void tty_keys_free(struct tty *); int tty_keys_next(struct tty *); /* paste.c */ -struct paste_buffer *paste_walk_stack(struct paste_stack *, u_int *); -struct paste_buffer *paste_get_top(struct paste_stack *); -struct paste_buffer *paste_get_index(struct paste_stack *, u_int); -int paste_free_top(struct paste_stack *); -int paste_free_index(struct paste_stack *, u_int); -void paste_add(struct paste_stack *, char *, size_t, u_int); -int paste_replace(struct paste_stack *, u_int, char *, size_t); +struct paste_buffer *paste_walk_stack(u_int *); +struct paste_buffer *paste_get_top(void); +struct paste_buffer *paste_get_index(u_int); +int paste_free_top(void); +int paste_free_index(u_int); +void paste_add(char *, size_t, u_int); +int paste_replace(u_int, char *, size_t); char *paste_make_sample(struct paste_buffer *, int); void paste_send_pane(struct paste_buffer *, struct window_pane *, const char *, int); @@ -1886,7 +1885,6 @@ const char *key_string_lookup_key(int); /* server.c */ extern struct clients clients; extern struct clients dead_clients; -extern struct paste_stack global_buffers; int server_start(int, char *); void server_update_socket(void); void server_add_accept(int); diff --git a/window-copy.c b/window-copy.c index ef99ed9a..296443a2 100644 --- a/window-copy.c +++ b/window-copy.c @@ -776,7 +776,7 @@ window_copy_key_input(struct window_pane *wp, int key) *data->inputstr = '\0'; break; case MODEKEYEDIT_PASTE: - if ((pb = paste_get_top(&global_buffers)) == NULL) + if ((pb = paste_get_top()) == NULL) break; for (n = 0; n < pb->size; n++) { ch = (u_char) pb->data[n]; @@ -1465,8 +1465,8 @@ window_copy_copy_buffer(struct window_pane *wp, int idx, void *buf, size_t len) if (idx == -1) { limit = options_get_number(&global_options, "buffer-limit"); - paste_add(&global_buffers, buf, len, limit); - } else if (paste_replace(&global_buffers, idx, buf, len) != 0) + paste_add(buf, len, limit); + } else if (paste_replace(idx, buf, len) != 0) free(buf); } @@ -1524,13 +1524,13 @@ window_copy_append_selection(struct window_pane *wp, int idx) if (idx == -1) idx = 0; - if (idx == 0 && paste_get_top(&global_buffers) == NULL) { + if (idx == 0 && paste_get_top() == NULL) { limit = options_get_number(&global_options, "buffer-limit"); - paste_add(&global_buffers, buf, len, limit); + paste_add(buf, len, limit); return; } - pb = paste_get_index(&global_buffers, idx); + pb = paste_get_index(idx); if (pb != NULL) { buf = xrealloc(buf, 1, len + pb->size); memmove(buf + pb->size, buf, len); @@ -1538,7 +1538,7 @@ window_copy_append_selection(struct window_pane *wp, int idx) len += pb->size; } - if (paste_replace(&global_buffers, idx, buf, len) != 0) + if (paste_replace(idx, buf, len) != 0) free(buf); }