diff options
| author | Eric Andersen <andersen@codepoet.org> | 2003-09-06 06:09:51 +0000 | 
|---|---|---|
| committer | Eric Andersen <andersen@codepoet.org> | 2003-09-06 06:09:51 +0000 | 
| commit | b9c0292271ea5e4dc583137d6c74dda605d1ae04 (patch) | |
| tree | 463654b2b2dbb1287d9f3df5677575928f7391cd /libc | |
| parent | f763ad5a3646b8b88ad34474b81594e591ee3332 (diff) | |
Running ltp 20030905 showed that tcsendbreak was broken.
This fixes it.
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/termios/termios.c | 24 | 
1 files changed, 13 insertions, 11 deletions
diff --git a/libc/termios/termios.c b/libc/termios/termios.c index c6d74f2b3..cf3bd9bc6 100644 --- a/libc/termios/termios.c +++ b/libc/termios/termios.c @@ -70,21 +70,23 @@ int tcflush ( int fd, int queue_selector)  /* Send zero bits on FD.  */  int tcsendbreak( int fd, int duration)  { -	/* -	 * The break lasts 0.25 to 0.5 seconds if DURATION is zero, and an -	 * implementation-defined period if DURATION is nonzero. We define a -	 * positive DURATION to be number of milliseconds to break. -	 */ +	/* The break lasts 0.25 to 0.5 seconds if DURATION is zero, +	   and an implementation-defined period if DURATION is nonzero. +	   We define a positive DURATION to be number of milliseconds to break.  */  	if (duration <= 0)  		return ioctl(fd, TCSBRK, 0); -	/* -	 * ioctl can't send a break of any other duration for us. This could be -	 * changed to use trickery (e.g. lower speed and send a '\0') to send -	 * the break, but for now just return an error. -	 */ -	__set_errno(EINVAL); +#ifdef TCSBRKP +	/* Probably Linux-specific: a positive third TCSBRKP ioctl argument is +	   defined to be the number of 100ms units to break.  */ +	return ioctl(fd, TCSBRKP, (duration + 99) / 100); +#else +	/* ioctl can't send a break of any other duration for us. +	   This could be changed to use trickery (e.g. lower speed and +	   send a '\0') to send the break, but for now just return an error.  */ +	__set_errno (EINVAL);  	return -1; +#endif  }  #endif  | 
