fakeidentd: simplify ndelay manipulations
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 10 Jan 2014 16:12:54 +0000 (17:12 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 10 Jan 2014 16:12:54 +0000 (17:12 +0100)
function                                             old     new   delta
new_peer                                              91      79     -12
do_rd                                                197     152     -45

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/isrv_identd.c

index c6b0f6528487c92f9fdc7f6fa63f3a81c2b48eee..252c8aba9b7ab879392e9499834ecbc197f18249 100644 (file)
@@ -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);
 }