diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2014-01-10 17:12:54 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2014-01-10 17:12:54 +0100 |
commit | 604b7b6cc03bab020f03d35f0064ab0e87845616 (patch) | |
tree | a6d4fc56ce883a01a0a89260c0291466a03c8a40 | |
parent | 1bdbf264540892a20d07cd81d2918dd5519f4bb3 (diff) | |
download | busybox-604b7b6cc03bab020f03d35f0064ab0e87845616.tar.gz |
fakeidentd: simplify ndelay manipulations
function old new delta
new_peer 91 79 -12
do_rd 197 152 -45
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/isrv_identd.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/networking/isrv_identd.c b/networking/isrv_identd.c index c6b0f6528..252c8aba9 100644 --- a/networking/isrv_identd.c +++ b/networking/isrv_identd.c @@ -25,8 +25,7 @@ enum { TIMEOUT = 20 }; typedef struct identd_buf_t { int pos; - int fd_flag; - char buf[64 - 2*sizeof(int)]; + char buf[64 - sizeof(int)]; } identd_buf_t; #define bogouser bb_common_bufsiz1 @@ -42,7 +41,7 @@ static int new_peer(isrv_state_t *state, int fd) if (isrv_register_fd(state, peer, fd) < 0) return peer; /* failure, unregister peer */ - buf->fd_flag = fcntl(fd, F_GETFL) | O_NONBLOCK; + ndelay_on(fd); isrv_want_rd(state, fd); return 0; } @@ -55,8 +54,6 @@ static int do_rd(int fd, void **paramp) cur = buf->buf + buf->pos; - if (buf->fd_flag & O_NONBLOCK) - fcntl(fd, F_SETFL, buf->fd_flag); sz = safe_read(fd, cur, sizeof(buf->buf) - 1 - buf->pos); if (sz < 0) { @@ -70,7 +67,7 @@ static int do_rd(int fd, void **paramp) p = strpbrk(cur, "\r\n"); if (p) *p = '\0'; - if (!p && sz && buf->pos < (int)sizeof(buf->buf)) + if (!p && sz) return 0; /* "session is ok" */ /* Terminate session. If we are in server mode, then @@ -78,8 +75,11 @@ static int do_rd(int fd, void **paramp) if (fd == 0) fd++; /* inetd mode? then write to fd 1 */ fdprintf(fd, "%s : USERID : UNIX : %s\r\n", buf->buf, bogouser); - if (buf->fd_flag & O_NONBLOCK) - fcntl(fd, F_SETFL, buf->fd_flag & ~O_NONBLOCK); + /* + * Why bother if we are going to close fd now anyway? + * if (server) + * ndelay_off(fd); + */ term: free(buf); return 1; /* "terminate" */ @@ -94,10 +94,9 @@ static void inetd_mode(void) { identd_buf_t *buf = xzalloc(sizeof(*buf)); /* buf->pos = 0; - xzalloc did it */ - /* We do NOT want nonblocking I/O here! */ - /* buf->fd_flag = 0; - xzalloc did it */ do alarm(TIMEOUT); + /* Note: we do NOT want nonblocking I/O here! */ while (do_rd(0, (void*)&buf) == 0); } |