summaryrefslogtreecommitdiffstats
path: root/cmd-new-session.c
diff options
context:
space:
mode:
Diffstat (limited to 'cmd-new-session.c')
-rw-r--r--cmd-new-session.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/cmd-new-session.c b/cmd-new-session.c
index 3815f468..66bf6a9f 100644
--- a/cmd-new-session.c
+++ b/cmd-new-session.c
@@ -1,4 +1,4 @@
-/* $Id: cmd-new-session.c,v 1.22 2008-06-02 21:36:51 nicm Exp $ */
+/* $Id: cmd-new-session.c,v 1.23 2008-06-03 05:35:51 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -31,6 +31,7 @@ void cmd_new_session_exec(void *, struct cmd_ctx *);
void cmd_new_session_send(void *, struct buffer *);
void cmd_new_session_recv(void **, struct buffer *);
void cmd_new_session_free(void *);
+void cmd_new_session_init(void **, int);
struct cmd_new_session_data {
char *name;
@@ -47,21 +48,31 @@ const struct cmd_entry cmd_new_session_entry = {
cmd_new_session_exec,
cmd_new_session_send,
cmd_new_session_recv,
- cmd_new_session_free
+ cmd_new_session_free,
+ cmd_new_session_init
};
-int
-cmd_new_session_parse(
- struct cmd *self, void **ptr, int argc, char **argv, char **cause)
+void
+cmd_new_session_init(void **ptr, unused int arg)
{
- struct cmd_new_session_data *data;
- int opt;
+ struct cmd_new_session_data *data;
*ptr = data = xmalloc(sizeof *data);
data->flag_detached = 0;
data->name = NULL;
data->winname = NULL;
data->cmd = NULL;
+}
+
+int
+cmd_new_session_parse(
+ struct cmd *self, void **ptr, int argc, char **argv, char **cause)
+{
+ struct cmd_new_session_data *data;
+ int opt;
+
+ self->entry->init(ptr, 0);
+ data = *ptr;
while ((opt = getopt(argc, argv, "ds:n:")) != EOF) {
switch (opt) {
@@ -99,15 +110,11 @@ void
cmd_new_session_exec(void *ptr, struct cmd_ctx *ctx)
{
struct cmd_new_session_data *data = ptr;
- struct cmd_new_session_data std = { NULL, NULL, NULL, 0 };
struct client *c = ctx->cmdclient;
struct session *s;
char *cmd, *cause;
u_int sx, sy;
- if (data == NULL)
- data = &std;
-
if (ctx->flags & CMD_KEY)
return;