components/tmux/patches/client.c.patch
author Jiri Kukacka <jiri.kukacka@oracle.com>
Mon, 09 Feb 2015 09:22:37 -0800
branchs11-update
changeset 3766 ea3ce1736b34
parent 2787 f6f36f8682b5
permissions -rw-r--r--
20344401 Make Wireshark ready for Network Observability role 20412467 Make Tcpdump ready for Network Observability role

In-House Patch. Submitted to upstream, but not accepted yet.
Check for flock(), which is available on BSD and not on Solaris. 
Instead use fnctl() on Solaris. Also check if cfmakeraw(), which
is not available on Solaris, so manually change the termios 
structure, the same way cfmakeraw does.

--- tmux-1.8/client.c.orig	2013-08-13 12:42:26.447337127 -0700
+++ tmux-1.8/client.c	2013-08-13 12:44:09.044164126 -0700
@@ -74,16 +74,30 @@
 client_get_lock(char *lockfile)
 {
 	int lockfd;
+#ifdef F_SETLK
+        struct flock lock;
+#endif
 
 	if ((lockfd = open(lockfile, O_WRONLY|O_CREAT, 0600)) == -1)
 		fatal("open failed");
 
+#ifdef F_SETLK
+        if (fcntl(lockfd, F_SETLK, &lock) == -1 && errno == EAGAIN) {
+		while (fcntl(lockfd, F_SETLKW, &lock) == -1 && errno == EINTR)
+			/* nothing */;
+		close(lockfd);
+		return(-1);
+	}
+#elif LOCK_EX
 	if (flock(lockfd, LOCK_EX|LOCK_NB) == -1 && errno == EWOULDBLOCK) {
 		while (flock(lockfd, LOCK_EX) == -1 && errno == EINTR)
 			/* nothing */;
 		close(lockfd);
 		return (-1);
 	}
+#else
+#error  "You need locking support."
+#endif
 
 	return (lockfd);
 }
@@ -244,7 +258,15 @@
 			    strerror(errno));
 			return (1);
 		}
-		cfmakeraw(&tio);
+#ifdef HAVE_CFMAKERAW
+                cfmakeraw(&tio);
+#else
+		tio.c_iflag &= ~(IMAXBEL|IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
+		tio.c_oflag &= ~OPOST;
+		tio.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
+		tio.c_cflag &= ~(CSIZE|PARENB);
+	     	tio.c_cflag |= CS8;
+#endif
 		tio.c_iflag = ICRNL|IXANY;
 		tio.c_oflag = OPOST|ONLCR;
 #ifdef NOKERNINFO