bin/153052: [patch] watch(8) breaks tty on error

Jilles Tjoelker jilles at stack.nl
Sun Sep 1 16:00:02 UTC 2013


The following reply was made to PR bin/153052; it has been noted by GNATS.

From: Jilles Tjoelker <jilles at stack.nl>
To: bug-followup at FreeBSD.org, demelier.david at gmail.com
Cc:  
Subject: Re: bin/153052: [patch] watch(8) breaks tty on error
Date: Sun, 1 Sep 2013 17:56:56 +0200

 In PR bin/153052, you wrote:
 > When you run watch and snp module is not loaded (or probably any other
 > error) watch breaks the terminal
 
 > I have removed unset_tty() and seems to work in my case, but I can't
 > test for the others fatal() calls.
 
 Your patch prevents restoring the terminal state if watch(8) is exited
 using Ctrl+G while watching.
 
 I think it is better to record the initial state earlier, so it is
 always safe to restore it, like this:
 
 Index: usr.sbin/watch/watch.c
 ===================================================================
 --- usr.sbin/watch/watch.c	(revision 255093)
 +++ usr.sbin/watch/watch.c	(working copy)
 @@ -110,7 +110,6 @@ set_tty(void)
  {
  	struct termios	ntty;
  
 -	tcgetattr(std_in, &otty);
  	ntty = otty;
  	ntty.c_lflag &= ~ICANON;	/* disable canonical operation */
  	ntty.c_lflag &= ~ECHO;
 @@ -324,6 +323,8 @@ main(int ac, char *av[])
  			usage();
  		}
  
 +	tcgetattr(std_in, &otty);
 +
  	if (modfind("snp") == -1)
  		if (kldload("snp") == -1 || modfind("snp") == -1)
  			warn("snp module not available");


More information about the freebsd-bugs mailing list