From ed3cfaafb2c04776b6452fa968715a3626d99a4a Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 12 Jul 2017 09:21:25 +0000 Subject: [PATCH] Make shell_command a global like other stuff rather than making it an exception and using callback argument. --- client.c | 18 ++++++++---------- tmux.c | 12 ++++++------ tmux.h | 3 ++- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/client.c b/client.c index f94ce996..f00b2874 100644 --- a/client.c +++ b/client.c @@ -64,7 +64,7 @@ static void client_write(int, const char *, size_t); static void client_signal(int); static void client_dispatch(struct imsg *, void *); static void client_dispatch_attached(struct imsg *); -static void client_dispatch_wait(struct imsg *, const char *); +static void client_dispatch_wait(struct imsg *); static const char *client_exit_message(void); /* @@ -215,8 +215,7 @@ client_exit_message(void) /* Client main loop. */ int -client_main(struct event_base *base, int argc, char **argv, int flags, - const char *shellcmd) +client_main(struct event_base *base, int argc, char **argv, int flags) { struct cmd *cmd; struct cmd_list *cmdlist; @@ -237,7 +236,7 @@ client_main(struct event_base *base, int argc, char **argv, int flags, /* Set up the initial command. */ cmdflags = 0; - if (shellcmd != NULL) { + if (shell_command != NULL) { msg = MSG_SHELL; cmdflags = CMD_STARTSERVER; } else if (argc == 0) { @@ -276,8 +275,7 @@ client_main(struct event_base *base, int argc, char **argv, int flags, } return (1); } - client_peer = proc_add_peer(client_proc, fd, client_dispatch, - (void *)shellcmd); + client_peer = proc_add_peer(client_proc, fd, client_dispatch, NULL); /* Save these before pledge(). */ if ((cwd = getcwd(path, sizeof path)) == NULL) { @@ -533,7 +531,7 @@ client_signal(int sig) /* Callback for client read events. */ static void -client_dispatch(struct imsg *imsg, void *arg) +client_dispatch(struct imsg *imsg, __unused void *arg) { if (imsg == NULL) { client_exitreason = CLIENT_EXIT_LOST_SERVER; @@ -545,12 +543,12 @@ client_dispatch(struct imsg *imsg, void *arg) if (client_attached) client_dispatch_attached(imsg); else - client_dispatch_wait(imsg, arg); + client_dispatch_wait(imsg); } /* Dispatch imsgs when in wait state (before MSG_READY). */ static void -client_dispatch_wait(struct imsg *imsg, const char *shellcmd) +client_dispatch_wait(struct imsg *imsg) { char *data; ssize_t datalen; @@ -630,7 +628,7 @@ client_dispatch_wait(struct imsg *imsg, const char *shellcmd) fatalx("bad MSG_SHELL string"); clear_signals(0); - client_exec(data, shellcmd); + client_exec(data, shell_command); /* NOTREACHED */ case MSG_DETACH: case MSG_DETACHKILL: diff --git a/tmux.c b/tmux.c index 07aeeaeb..b8a73fd9 100644 --- a/tmux.c +++ b/tmux.c @@ -44,6 +44,7 @@ struct hooks *global_hooks; struct timeval start_time; const char *socket_path; int ptm_fd = -1; +const char *shell_command; static __dead void usage(void); static char *make_label(const char *); @@ -190,8 +191,8 @@ find_home(void) int main(int argc, char **argv) { - char *path, *label, tmp[PATH_MAX]; - char *shellcmd = NULL, **var; + char *path, *label, **var; + char tmp[PATH_MAX]; const char *s, *shell; int opt, flags, keys; const struct options_table_entry *oe; @@ -220,8 +221,7 @@ main(int argc, char **argv) flags |= CLIENT_256COLOURS; break; case 'c': - free(shellcmd); - shellcmd = xstrdup(optarg); + shell_command = optarg; break; case 'C': if (flags & CLIENT_CONTROL) @@ -258,7 +258,7 @@ main(int argc, char **argv) argc -= optind; argv += optind; - if (shellcmd != NULL && argc != 0) + if (shell_command != NULL && argc != 0) usage(); if ((ptm_fd = getptmfd()) == -1) @@ -348,5 +348,5 @@ main(int argc, char **argv) free(label); /* Pass control to the client. */ - exit(client_main(event_init(), argc, argv, flags, shellcmd)); + exit(client_main(event_init(), argc, argv, flags)); } diff --git a/tmux.h b/tmux.h index ec926d48..18904ab9 100644 --- a/tmux.h +++ b/tmux.h @@ -1486,6 +1486,7 @@ extern struct environ *global_environ; extern struct timeval start_time; extern const char *socket_path; extern int ptm_fd; +extern const char *shell_command; int areshell(const char *); void setblocking(int, int); const char *find_home(void); @@ -1820,7 +1821,7 @@ struct cmd_list *cmd_string_parse(const char *, const char *, u_int, char **); void cmd_wait_for_flush(void); /* client.c */ -int client_main(struct event_base *, int, char **, int, const char *); +int client_main(struct event_base *, int, char **, int); /* key-bindings.c */ RB_PROTOTYPE(key_bindings, key_binding, entry, key_bindings_cmp);