=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-new-window.c,v retrieving revision 1.92 retrieving revision 1.93 diff -c -r1.92 -r1.93 *** src/usr.bin/tmux/cmd-new-window.c 2021/08/20 19:08:36 1.92 --- src/usr.bin/tmux/cmd-new-window.c 2021/08/20 19:50:16 1.93 *************** *** 1,4 **** ! /* $OpenBSD: cmd-new-window.c,v 1.92 2021/08/20 19:08:36 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: cmd-new-window.c,v 1.93 2021/08/20 19:50:16 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 55,66 **** struct client *c = cmdq_get_client(item); struct cmd_find_state *current = cmdq_get_current(item); struct cmd_find_state *target = cmdq_get_target(item); ! struct spawn_context sc; struct client *tc = cmdq_get_target_client(item); struct session *s = target->s; ! struct winlink *wl = target->wl; int idx = target->idx, before; - struct winlink *new_wl = NULL; char *cause = NULL, *cp; const char *template, *name; struct cmd_find_state fs; --- 55,65 ---- struct client *c = cmdq_get_client(item); struct cmd_find_state *current = cmdq_get_current(item); struct cmd_find_state *target = cmdq_get_target(item); ! struct spawn_context sc = { 0 }; struct client *tc = cmdq_get_target_client(item); struct session *s = target->s; ! struct winlink *wl = target->wl, *new_wl = NULL; int idx = target->idx, before; char *cause = NULL, *cp; const char *template, *name; struct cmd_find_state fs; *************** *** 101,114 **** idx = target->idx; } - memset(&sc, 0, sizeof sc); sc.item = item; sc.s = s; sc.tc = tc; sc.name = args_get(args, 'n'); ! sc.argc = args->argc; ! sc.argv = args->argv; sc.environ = environ_create(); av = args_first_value(args, 'e'); --- 100,111 ---- idx = target->idx; } sc.item = item; sc.s = s; sc.tc = tc; sc.name = args_get(args, 'n'); ! args_vector(args, &sc.argc, &sc.argv); sc.environ = environ_create(); av = args_first_value(args, 'e'); *************** *** 129,134 **** --- 126,133 ---- if ((new_wl = spawn_window(&sc, &cause)) == NULL) { cmdq_error(item, "create window failed: %s", cause); free(cause); + if (sc.argv != NULL) + cmd_free_argv(sc.argc, sc.argv); environ_free(sc.environ); return (CMD_RETURN_ERROR); } *************** *** 150,155 **** --- 149,156 ---- cmd_find_from_winlink(&fs, new_wl, 0); cmdq_insert_hook(s, item, &fs, "after-new-window"); + if (sc.argv != NULL) + cmd_free_argv(sc.argc, sc.argv); environ_free(sc.environ); return (CMD_RETURN_NORMAL); }