less: move "retry-on-EAGAIN" logic closer to read ops

This makes "G" (goto end of input) command work as well as
/search_for_nonexistent_string: both will read to EOF now
even from somewhat slow input (such as kernel's "git log").

function                                             old     new   delta
ndelay_on                                             35      43      +8
ndelay_off                                            35      43      +8
read_lines                                           695     691      -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 16/-4)              Total: 12 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2014-09-22 21:14:02 +02:00
parent 15943c886d
commit d6e7672545
3 changed files with 29 additions and 32 deletions

View File

@@ -25,20 +25,22 @@
#include "libbb.h"
/* Turn on nonblocking I/O on a fd */
void FAST_FUNC ndelay_on(int fd)
int FAST_FUNC ndelay_on(int fd)
{
int flags = fcntl(fd, F_GETFL);
if (flags & O_NONBLOCK)
return;
return flags;
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
return flags;
}
void FAST_FUNC ndelay_off(int fd)
int FAST_FUNC ndelay_off(int fd)
{
int flags = fcntl(fd, F_GETFL);
if (!(flags & O_NONBLOCK))
return;
return flags;
fcntl(fd, F_SETFL, flags & ~O_NONBLOCK);
return flags;
}
void FAST_FUNC close_on_exec_on(int fd)