version 1.26, 2017/04/22 10:22:39 |
version 1.27, 2018/03/01 12:53:08 |
|
|
static enum cmd_retval |
static enum cmd_retval |
cmd_rename_session_exec(struct cmd *self, struct cmdq_item *item) |
cmd_rename_session_exec(struct cmd *self, struct cmdq_item *item) |
{ |
{ |
struct args *args = self->args; |
struct args *args = self->args; |
struct session *s = item->target.s; |
struct client *c = cmd_find_client(item, NULL, 0); |
const char *newname; |
struct session *s = item->target.s; |
|
char *newname; |
|
|
newname = args->argv[0]; |
newname = format_single(item, args->argv[0], c, s, NULL, NULL); |
if (strcmp(newname, s->name) == 0) |
if (strcmp(newname, s->name) == 0) { |
|
free(newname); |
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
|
} |
|
|
if (!session_check_name(newname)) { |
if (!session_check_name(newname)) { |
cmdq_error(item, "bad session name: %s", newname); |
cmdq_error(item, "bad session name: %s", newname); |
|
free(newname); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
if (session_find(newname) != NULL) { |
if (session_find(newname) != NULL) { |
cmdq_error(item, "duplicate session: %s", newname); |
cmdq_error(item, "duplicate session: %s", newname); |
|
free(newname); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
|
|
RB_REMOVE(sessions, &sessions, s); |
RB_REMOVE(sessions, &sessions, s); |
free(s->name); |
free(s->name); |
s->name = xstrdup(newname); |
s->name = newname; |
RB_INSERT(sessions, &sessions, s); |
RB_INSERT(sessions, &sessions, s); |
|
|
server_status_session(s); |
server_status_session(s); |