version 1.60, 2015/10/28 09:51:55 |
version 1.61, 2015/10/31 08:13:58 |
|
|
struct window *w; |
struct window *w; |
struct window_pane *wp, *new_wp = NULL; |
struct window_pane *wp, *new_wp = NULL; |
struct environ *env; |
struct environ *env; |
const char *cmd, *path, *shell, *template; |
const char *cmd, *path, *shell, *template, *cwd, *to_free; |
char **argv, *cause, *new_cause, *cp; |
char **argv, *cause, *new_cause, *cp; |
u_int hlimit; |
u_int hlimit; |
int argc, size, percentage, cwd, fd = -1; |
int argc, size, percentage; |
enum layout_type type; |
enum layout_type type; |
struct layout_cell *lc; |
struct layout_cell *lc; |
struct format_tree *ft; |
struct format_tree *ft; |
|
|
argv = args->argv; |
argv = args->argv; |
} |
} |
|
|
|
to_free = NULL; |
if (args_has(args, 'c')) { |
if (args_has(args, 'c')) { |
ft = format_create(); |
ft = format_create(); |
format_defaults(ft, cmd_find_client(cmdq, NULL, 1), s, NULL, |
format_defaults(ft, cmd_find_client(cmdq, NULL, 1), s, NULL, |
NULL); |
NULL); |
cp = format_expand(ft, args_get(args, 'c')); |
to_free = cwd = format_expand(ft, args_get(args, 'c')); |
format_free(ft); |
format_free(ft); |
|
|
if (cp != NULL && *cp != '\0') { |
if (access(cwd, X_OK) != 0) { |
fd = open(cp, O_RDONLY|O_DIRECTORY); |
free((void *)cwd); |
free(cp); |
cmdq_error(cmdq, "bad working directory: %s", |
if (fd == -1) { |
strerror(errno)); |
cmdq_error(cmdq, "bad working directory: %s", |
return (CMD_RETURN_ERROR); |
strerror(errno)); |
} |
return (CMD_RETURN_ERROR); |
|
} |
|
} else |
|
free(cp); |
|
cwd = fd; |
|
} else if (cmdq->client != NULL && cmdq->client->session == NULL) |
} else if (cmdq->client != NULL && cmdq->client->session == NULL) |
cwd = cmdq->client->cwd; |
cwd = cmdq->client->cwd; |
else |
else |
|
|
} |
} |
notify_window_layout_changed(w); |
notify_window_layout_changed(w); |
|
|
if (fd != -1) |
if (to_free != NULL) |
close(fd); |
free((void *)to_free); |
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
|
|
error: |
error: |
|
|
} |
} |
cmdq_error(cmdq, "create pane failed: %s", cause); |
cmdq_error(cmdq, "create pane failed: %s", cause); |
free(cause); |
free(cause); |
if (fd != -1) |
|
close(fd); |
if (to_free != NULL) |
|
free((void *)to_free); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |