components/tmux/patches/client.c.patch
branchs11-update
changeset 3954 7e6addf418e2
parent 3952 746ec6382a1f
child 3962 ae7ad323827c
equal deleted inserted replaced
3952:746ec6382a1f 3954:7e6addf418e2
     1 In-House Patch. Submitted to upstream, but not accepted yet.
       
     2 Check for flock(), which is available on BSD and not on Solaris. 
       
     3 Instead use fnctl() on Solaris. Also check if cfmakeraw(), which
       
     4 is not available on Solaris, so manually change the termios 
       
     5 structure, the same way cfmakeraw does.
       
     6 
       
     7 --- tmux-1.8/client.c.orig	2013-08-13 12:42:26.447337127 -0700
       
     8 +++ tmux-1.8/client.c	2013-08-13 12:44:09.044164126 -0700
       
     9 @@ -74,16 +74,30 @@
       
    10  client_get_lock(char *lockfile)
       
    11  {
       
    12  	int lockfd;
       
    13 +#ifdef F_SETLK
       
    14 +        struct flock lock;
       
    15 +#endif
       
    16  
       
    17  	if ((lockfd = open(lockfile, O_WRONLY|O_CREAT, 0600)) == -1)
       
    18  		fatal("open failed");
       
    19  
       
    20 +#ifdef F_SETLK
       
    21 +        if (fcntl(lockfd, F_SETLK, &lock) == -1 && errno == EAGAIN) {
       
    22 +		while (fcntl(lockfd, F_SETLKW, &lock) == -1 && errno == EINTR)
       
    23 +			/* nothing */;
       
    24 +		close(lockfd);
       
    25 +		return(-1);
       
    26 +	}
       
    27 +#elif LOCK_EX
       
    28  	if (flock(lockfd, LOCK_EX|LOCK_NB) == -1 && errno == EWOULDBLOCK) {
       
    29  		while (flock(lockfd, LOCK_EX) == -1 && errno == EINTR)
       
    30  			/* nothing */;
       
    31  		close(lockfd);
       
    32  		return (-1);
       
    33  	}
       
    34 +#else
       
    35 +#error  "You need locking support."
       
    36 +#endif
       
    37  
       
    38  	return (lockfd);
       
    39  }
       
    40 @@ -244,7 +258,15 @@
       
    41  			    strerror(errno));
       
    42  			return (1);
       
    43  		}
       
    44 -		cfmakeraw(&tio);
       
    45 +#ifdef HAVE_CFMAKERAW
       
    46 +                cfmakeraw(&tio);
       
    47 +#else
       
    48 +		tio.c_iflag &= ~(IMAXBEL|IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
       
    49 +		tio.c_oflag &= ~OPOST;
       
    50 +		tio.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
       
    51 +		tio.c_cflag &= ~(CSIZE|PARENB);
       
    52 +	     	tio.c_cflag |= CS8;
       
    53 +#endif
       
    54  		tio.c_iflag = ICRNL|IXANY;
       
    55  		tio.c_oflag = OPOST|ONLCR;
       
    56  #ifdef NOKERNINFO