aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2013-07-12 22:21:42 +0100
committerNicholas Marriott <nicholas.marriott@gmail.com>2013-07-12 22:21:42 +0100
commite8567098a4eaa81306effeaef430d9d74f603f7a (patch)
treefa21f9295cf88217e055b4029e31befb413a7820
parentbdea2f9eda1abc8f4a6c423af62ef7538b2ad249 (diff)
downloadrtmux-e8567098a4eaa81306effeaef430d9d74f603f7a.tar.gz
rtmux-e8567098a4eaa81306effeaef430d9d74f603f7a.tar.bz2
rtmux-e8567098a4eaa81306effeaef430d9d74f603f7a.zip
Add support for Cgywin, apparently it is enough just to open the tty again in
the server and fd passing is not necessary. Needs some ifdefs unfortunately but no way around that and some of them can go next time we're willing to do a protocol bump. Patch from J Raynor jxraynor at gmail dot com.
-rw-r--r--client.c5
-rw-r--r--compat.h5
-rw-r--r--server-client.c5
-rw-r--r--tmux.h4
4 files changed, 18 insertions, 1 deletions
diff --git a/client.c b/client.c
index 691ace31..b9e3b30a 100644
--- a/client.c
+++ b/client.c
@@ -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();
diff --git a/compat.h b/compat.h
index d3973797..b84ff400 100644
--- a/compat.h
+++ b/compat.h
@@ -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;
diff --git a/tmux.h b/tmux.h
index eb53d3b4..cc1c79e8 100644
--- a/tmux.h
+++ b/tmux.h
@@ -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 */