inetd: small shrink for NOMMU case
authorDenis Vlasenko <vda.linux@googlemail.com>
Sat, 29 Mar 2008 16:00:52 +0000 (16:00 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sat, 29 Mar 2008 16:00:52 +0000 (16:00 -0000)
function                                             old     new   delta
cat_args                                               -       8      +8
echo_stream                                           64      63      -1
discard_stream                                        64      63      -1
static.args                                           32      12     -20
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/3 up/down: 8/-22)             Total: -14 bytes

networking/inetd.c

index eb19d16..d71a115 100644 (file)
@@ -1413,6 +1413,10 @@ int inetd_main(int argc ATTRIBUTE_UNUSED, char **argv)
        } /* for (;;) */
 }
 
+#if !BB_MMU
+static const char *const cat_args[] = { "cat", NULL };
+#endif
+
 /*
  * Internet services provided internally by inetd:
  */
@@ -1430,13 +1434,13 @@ static void echo_stream(int s, servtab_t *sep ATTRIBUTE_UNUSED)
        }
 #else
        /* We are after vfork here! */
-       static const char *const args[] = { "cat", NULL };
-       /* move network socket to stdin */
+       /* move network socket to stdin/stdout */
        xmove_fd(s, STDIN_FILENO);
        xdup2(STDIN_FILENO, STDOUT_FILENO);
        /* no error messages please... */
-       xmove_fd(xopen("/dev/null", O_WRONLY), STDERR_FILENO);
-       BB_EXECVP("cat", (char**)args);
+       close(STDERR_FILENO);
+       xopen("/dev/null", O_WRONLY);
+       BB_EXECVP("cat", (char**)cat_args);
        /* on failure we return to main, which does exit(1) */
 #endif
 }
@@ -1467,13 +1471,14 @@ static void discard_stream(int s, servtab_t *sep ATTRIBUTE_UNUSED)
                continue;
 #else
        /* We are after vfork here! */
-       static const char *const args[] = { "dd", "of=/dev/null", NULL };
        /* move network socket to stdin */
        xmove_fd(s, STDIN_FILENO);
-       xdup2(STDIN_FILENO, STDOUT_FILENO);
-       /* no error messages */
-       xmove_fd(xopen("/dev/null", O_WRONLY), STDERR_FILENO);
-       BB_EXECVP("dd", (char**)args);
+       /* discard output */
+       close(STDOUT_FILENO);
+       xopen("/dev/null", O_WRONLY);
+       /* no error messages please... */
+       xdup2(STDOUT_FILENO, STDERR_FILENO);
+       BB_EXECVP("cat", (char**)cat_args);
        /* on failure we return to main, which does exit(1) */
 #endif
 }