summaryrefslogtreecommitdiffstats
path: root/server-client.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2021-08-27 20:01:11 +0100
committerThomas Adam <thomas@xteddy.org>2021-08-27 20:01:11 +0100
commit609baea95e30201919a173ea1de1f750a15a9f8c (patch)
tree68225d4bd3ba7e258cddb8e6b40f0764408a6e32 /server-client.c
parentc6375a0d4003d1008bb64e96e9c0c4433e4a5d13 (diff)
parentdaec63e5e6eb3390d53f4bf7f8a327df77e46c95 (diff)
Merge branch 'obsd-master' into master
Diffstat (limited to 'server-client.c')
-rw-r--r--server-client.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/server-client.c b/server-client.c
index 3efee844..1290c2a6 100644
--- a/server-client.c
+++ b/server-client.c
@@ -2121,6 +2121,7 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg)
int argc;
char **argv, *cause;
struct cmd_parse_result *pr;
+ struct args_value *values;
if (c->flags & CLIENT_EXIT)
return;
@@ -2146,7 +2147,8 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg)
*argv = xstrdup("new-session");
}
- pr = cmd_parse_from_arguments(argc, argv, NULL);
+ values = args_from_vector(argc, argv);
+ pr = cmd_parse_from_arguments(values, argc, NULL);
switch (pr->status) {
case CMD_PARSE_ERROR:
cause = pr->error;
@@ -2154,6 +2156,8 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg)
case CMD_PARSE_SUCCESS:
break;
}
+ args_free_values(values, argc);
+ free(values);
cmd_free_argv(argc, argv);
cmdq_append(c, cmdq_get_command(pr->cmdlist, NULL));
@@ -2444,7 +2448,7 @@ server_client_get_flags(struct client *c)
}
/* Get client window. */
-static struct client_window *
+struct client_window *
server_client_get_client_window(struct client *c, u_int id)
{
struct client_window cw = { .window = id };
@@ -2452,6 +2456,21 @@ server_client_get_client_window(struct client *c, u_int id)
return (RB_FIND(client_windows, &c->windows, &cw));
}
+/* Add client window. */
+struct client_window *
+server_client_add_client_window(struct client *c, u_int id)
+{
+ struct client_window *cw;
+
+ cw = server_client_get_client_window(c, id);
+ if (cw == NULL) {
+ cw = xcalloc(1, sizeof *cw);
+ cw->window = id;
+ RB_INSERT(client_windows, &c->windows, cw);
+ }
+ return cw;
+}
+
/* Get client active pane. */
struct window_pane *
server_client_get_pane(struct client *c)
@@ -2480,12 +2499,7 @@ server_client_set_pane(struct client *c, struct window_pane *wp)
if (s == NULL)
return;
- cw = server_client_get_client_window(c, s->curw->window->id);
- if (cw == NULL) {
- cw = xcalloc(1, sizeof *cw);
- cw->window = s->curw->window->id;
- RB_INSERT(client_windows, &c->windows, cw);
- }
+ cw = server_client_add_client_window(c, s->curw->window->id);
cw->pane = wp;
log_debug("%s pane now %%%u", c->name, wp->id);
}