version 1.42, 2014/01/22 14:00:08 |
version 1.43, 2014/04/17 13:02:59 |
|
|
|
|
/* Create a new session. */ |
/* Create a new session. */ |
struct session * |
struct session * |
session_create(const char *name, const char *cmd, int cwd, struct environ *env, |
session_create(const char *name, const char *cmd, const char *path, int cwd, |
struct termios *tio, int idx, u_int sx, u_int sy, char **cause) |
struct environ *env, struct termios *tio, int idx, u_int sx, u_int sy, |
|
char **cause) |
{ |
{ |
struct session *s; |
struct session *s; |
|
|
|
|
RB_INSERT(sessions, &sessions, s); |
RB_INSERT(sessions, &sessions, s); |
|
|
if (cmd != NULL) { |
if (cmd != NULL) { |
if (session_new(s, NULL, cmd, cwd, idx, cause) == NULL) { |
if (session_new(s, NULL, cmd, path, cwd, idx, cause) == NULL) { |
session_destroy(s); |
session_destroy(s); |
return (NULL); |
return (NULL); |
} |
} |
|
|
|
|
/* Create a new window on a session. */ |
/* Create a new window on a session. */ |
struct winlink * |
struct winlink * |
session_new(struct session *s, const char *name, const char *cmd, int cwd, |
session_new(struct session *s, const char *name, const char *cmd, |
int idx, char **cause) |
const char *path, int cwd, int idx, char **cause) |
{ |
{ |
struct window *w; |
struct window *w; |
struct winlink *wl; |
struct winlink *wl; |
|
|
shell = _PATH_BSHELL; |
shell = _PATH_BSHELL; |
|
|
hlimit = options_get_number(&s->options, "history-limit"); |
hlimit = options_get_number(&s->options, "history-limit"); |
w = window_create(name, cmd, shell, cwd, &env, s->tio, s->sx, s->sy, |
w = window_create(name, cmd, path, shell, cwd, &env, s->tio, s->sx, |
hlimit, cause); |
s->sy, hlimit, cause); |
if (w == NULL) { |
if (w == NULL) { |
winlink_remove(&s->windows, wl); |
winlink_remove(&s->windows, wl); |
environ_free(&env); |
environ_free(&env); |