tidy up O_NONBLOCK usage. use libbb functions in stty.
Added O_RDONLY where improves readability. Note: O_RDONLY == 0, so it is there even if not specified. function old new delta stty_main 1289 1235 -54 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
@@ -39,18 +39,18 @@ ssize_t FAST_FUNC safe_read(int fd, void *buf, size_t count)
|
||||
* *** BIG SURPRISE! It stays even after child exits! ***
|
||||
*
|
||||
* This is a design bug in UNIX API.
|
||||
* fcntl(0, F_SETFL, fcntl(0, F_GETFL, 0) | O_NONBLOCK);
|
||||
* fcntl(0, F_SETFL, fcntl(0, F_GETFL) | O_NONBLOCK);
|
||||
* will set nonblocking mode not only on _your_ stdin, but
|
||||
* also on stdin of your parent, etc.
|
||||
*
|
||||
* In general,
|
||||
* fd2 = dup(fd1);
|
||||
* fcntl(fd2, F_SETFL, fcntl(fd2, F_GETFL, 0) | O_NONBLOCK);
|
||||
* fcntl(fd2, F_SETFL, fcntl(fd2, F_GETFL) | O_NONBLOCK);
|
||||
* sets both fd1 and fd2 to O_NONBLOCK. This includes cases
|
||||
* where duping is done implicitly by fork() etc.
|
||||
*
|
||||
* We need
|
||||
* fcntl(fd2, F_SETFD, fcntl(fd2, F_GETFD, 0) | O_NONBLOCK);
|
||||
* fcntl(fd2, F_SETFD, fcntl(fd2, F_GETFD) | O_NONBLOCK);
|
||||
* (note SETFD, not SETFL!) but such thing doesn't exist.
|
||||
*
|
||||
* Alternatively, we need nonblocking_read(fd, ...) which doesn't
|
||||
|
@@ -27,12 +27,12 @@
|
||||
/* Turn on nonblocking I/O on a fd */
|
||||
int FAST_FUNC ndelay_on(int fd)
|
||||
{
|
||||
return fcntl(fd, F_SETFL, fcntl(fd,F_GETFL) | O_NONBLOCK);
|
||||
return fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK);
|
||||
}
|
||||
|
||||
int FAST_FUNC ndelay_off(int fd)
|
||||
{
|
||||
return fcntl(fd, F_SETFL, fcntl(fd,F_GETFL) & ~O_NONBLOCK);
|
||||
return fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) & ~O_NONBLOCK);
|
||||
}
|
||||
|
||||
int FAST_FUNC close_on_exec_on(int fd)
|
||||
|
Reference in New Issue
Block a user