introduce safe_poll (fixes a problem in top)

function                                             old     new   delta
safe_poll                                              -      77     +77
svlogd_main                                         1470    1466      -4
zcip_main                                           1530    1524      -6
forkexec                                            1345    1338      -7
decode_format_string                                 795     788      -7
collect_blk                                          474     467      -7
buffer_pread                                         540     532      -8
tftp                                                1182    1172     -10
microcom_main                                        763     749     -14
arpping                                              441     424     -17
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/9 up/down: 77/-80)             Total: -3 bytes
   text    data     bss     dec     hex filename
 770162    1034   10404  781600   bed20 busybox_old
 770158    1034   10404  781596   bed1c busybox_unstripped
This commit is contained in:
Denis Vlasenko
2007-09-27 10:09:59 +00:00
parent c9dc2ac578
commit 5d61e71c3a
13 changed files with 65 additions and 30 deletions

View File

@@ -665,7 +665,7 @@ static ssize_t ndelay_read(int fd, void *buf, size_t count)
}
/* Used for reading stdin */
static int buffer_pread(int fd, char *s, unsigned len)
static int buffer_pread(/*int fd, */char *s, unsigned len)
{
unsigned now;
struct pollfd input;
@@ -709,7 +709,7 @@ static int buffer_pread(int fd, char *s, unsigned len)
poll(&input, 1, i * 1000);
sigprocmask(SIG_BLOCK, blocked_sigset, NULL);
i = ndelay_read(fd, s, len);
i = ndelay_read(0, s, len);
if (i >= 0)
break;
if (errno == EINTR)
@@ -909,7 +909,7 @@ int svlogd_main(int argc, char **argv)
if (!np && !exitasap) {
i = linemax - stdin_cnt; /* avail. bytes at tail */
if (i >= 128) {
i = buffer_pread(0, lineptr + stdin_cnt, i);
i = buffer_pread(/*0, */lineptr + stdin_cnt, i);
if (i <= 0) /* EOF or error on stdin */
exitasap = 1;
else {
@@ -966,7 +966,7 @@ int svlogd_main(int argc, char **argv)
/* read/write repeatedly until we see it */
while (ch != '\n') {
/* lineptr is emptied now, safe to use as buffer */
stdin_cnt = exitasap ? -1 : buffer_pread(0, lineptr, linemax);
stdin_cnt = exitasap ? -1 : buffer_pread(/*0, */lineptr, linemax);
if (stdin_cnt <= 0) { /* EOF or error on stdin */
exitasap = 1;
lineptr[0] = ch = '\n';