diff options
-rw-r--r-- | client.c | 5 | ||||
-rw-r--r-- | compat.h | 5 | ||||
-rw-r--r-- | server-client.c | 5 | ||||
-rw-r--r-- | tmux.h | 4 |
4 files changed, 18 insertions, 1 deletions
@@ -328,8 +328,13 @@ client_send_identify(int flags) strlcpy(data.term, term, sizeof data.term) >= sizeof data.term) *data.term = '\0'; +#ifdef __CYGWIN__ + snprintf(&data.ttyname, sizeof data.ttyname, "%s", + ttyname(STDIN_FILENO)); +#else if ((fd = dup(STDIN_FILENO)) == -1) fatal("dup failed"); +#endif imsg_compose(&client_ibuf, MSG_IDENTIFY, PROTOCOL_VERSION, -1, fd, &data, sizeof data); client_update_event(); @@ -30,6 +30,10 @@ #define __packed __attribute__ ((__packed__)) #endif +#ifndef ECHOPRT +#define ECHOPRT 0 +#endif + #ifndef HAVE_BSD_TYPES typedef uint8_t u_int8_t; typedef uint16_t u_int16_t; @@ -210,6 +214,7 @@ int daemon(int, int); #ifndef HAVE_B64_NTOP /* b64_ntop.c */ +#undef b64_ntop /* for Cygwin */ int b64_ntop(const char *, size_t, char *, size_t); #endif diff --git a/server-client.c b/server-client.c index 01616cbf..5923eb0e 100644 --- a/server-client.c +++ b/server-client.c @@ -825,9 +825,12 @@ server_client_msg_dispatch(struct client *c) case MSG_IDENTIFY: if (datalen != sizeof identifydata) fatalx("bad MSG_IDENTIFY size"); + memcpy(&identifydata, imsg.data, sizeof identifydata); +#ifdef __CYGWIN__ + imsg.fd = open(identifydata.ttyname, O_RDWR|O_NOCTTY); +#endif if (imsg.fd == -1) fatalx("MSG_IDENTIFY missing fd"); - memcpy(&identifydata, imsg.data, sizeof identifydata); server_client_msg_identify(c, &identifydata, imsg.fd); break; @@ -471,6 +471,10 @@ struct msg_identify_data { char term[TERMINAL_LENGTH]; +#ifdef __CYGWIN__ + char ttyname[TTY_NAME_MAX]; +#endif + #define IDENTIFY_UTF8 0x1 #define IDENTIFY_256COLOURS 0x2 /* 0x4 unused */ |