version 1.328, 2020/04/20 09:07:55 |
version 1.329, 2020/04/20 13:25:36 |
|
|
if (c->flags & CLIENT_TERMINAL) |
if (c->flags & CLIENT_TERMINAL) |
tty_free(&c->tty); |
tty_free(&c->tty); |
free(c->ttyname); |
free(c->ttyname); |
free(c->term); |
free(c->term_name); |
|
|
status_free(c); |
status_free(c); |
|
|
|
|
datalen = imsg->hdr.len - IMSG_HEADER_SIZE; |
datalen = imsg->hdr.len - IMSG_HEADER_SIZE; |
|
|
switch (imsg->hdr.type) { |
switch (imsg->hdr.type) { |
|
case MSG_IDENTIFY_FEATURES: |
case MSG_IDENTIFY_FLAGS: |
case MSG_IDENTIFY_FLAGS: |
case MSG_IDENTIFY_TERM: |
case MSG_IDENTIFY_TERM: |
case MSG_IDENTIFY_TTYNAME: |
case MSG_IDENTIFY_TTYNAME: |
|
|
{ |
{ |
const char *data, *home; |
const char *data, *home; |
size_t datalen; |
size_t datalen; |
int flags; |
int flags, feat; |
char *name; |
char *name; |
|
|
if (c->flags & CLIENT_IDENTIFIED) |
if (c->flags & CLIENT_IDENTIFIED) |
|
|
datalen = imsg->hdr.len - IMSG_HEADER_SIZE; |
datalen = imsg->hdr.len - IMSG_HEADER_SIZE; |
|
|
switch (imsg->hdr.type) { |
switch (imsg->hdr.type) { |
|
case MSG_IDENTIFY_FEATURES: |
|
if (datalen != sizeof feat) |
|
fatalx("bad MSG_IDENTIFY_FEATURES size"); |
|
memcpy(&feat, data, sizeof feat); |
|
c->term_features |= feat; |
|
log_debug("client %p IDENTIFY_FEATURES %s", c, |
|
tty_get_features(feat)); |
|
break; |
case MSG_IDENTIFY_FLAGS: |
case MSG_IDENTIFY_FLAGS: |
if (datalen != sizeof flags) |
if (datalen != sizeof flags) |
fatalx("bad MSG_IDENTIFY_FLAGS size"); |
fatalx("bad MSG_IDENTIFY_FLAGS size"); |
|
|
case MSG_IDENTIFY_TERM: |
case MSG_IDENTIFY_TERM: |
if (datalen == 0 || data[datalen - 1] != '\0') |
if (datalen == 0 || data[datalen - 1] != '\0') |
fatalx("bad MSG_IDENTIFY_TERM string"); |
fatalx("bad MSG_IDENTIFY_TERM string"); |
c->term = xstrdup(data); |
if (*data == '\0') |
|
c->term_name = xstrdup("unknown"); |
|
else |
|
c->term_name = xstrdup(data); |
log_debug("client %p IDENTIFY_TERM %s", c, data); |
log_debug("client %p IDENTIFY_TERM %s", c, data); |
break; |
break; |
case MSG_IDENTIFY_TTYNAME: |
case MSG_IDENTIFY_TTYNAME: |
|
|
control_start(c); |
control_start(c); |
c->tty.fd = -1; |
c->tty.fd = -1; |
} else if (c->fd != -1) { |
} else if (c->fd != -1) { |
if (tty_init(&c->tty, c, c->fd, c->term) != 0) { |
if (tty_init(&c->tty, c, c->fd) != 0) { |
close(c->fd); |
close(c->fd); |
c->fd = -1; |
c->fd = -1; |
} else { |
} else { |
if (c->flags & CLIENT_UTF8) |
|
c->tty.term_flags |= TERM_UTF8; |
|
if (c->flags & CLIENT_256COLOURS) |
|
c->tty.term_flags |= TERM_256COLOURS; |
|
tty_resize(&c->tty); |
tty_resize(&c->tty); |
c->flags |= CLIENT_TERMINAL; |
c->flags |= CLIENT_TERMINAL; |
} |
} |