test, tcpsvd, tcpsvd: shrink
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 13 Jun 2009 20:49:08 +0000 (22:49 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 13 Jun 2009 20:49:08 +0000 (22:49 +0200)
function                                             old     new   delta
nexpr                                                825     826      +1
tcpudpsvd_main                                      1830    1822      -8
test_main                                            257     247     -10
binop                                                584     525     -59
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 1/-77)             Total: -76 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/test.c
networking/tcpudp.c
testsuite/makedevs.device_table.txt

index ae40192a2155961a99aac01695b57679ae1edadb..cfaf4ca5dbb4ce9cba9f0b2aac319aa84c232b0d 100644 (file)
 
 enum token {
        EOI,
-       FILRD,
+
+       FILRD, /* file access */
        FILWR,
        FILEX,
+
        FILEXIST,
-       FILREG,
+
+       FILREG, /* file type */
        FILDIR,
        FILCDEV,
        FILBDEV,
        FILFIFO,
        FILSOCK,
+
        FILSYM,
        FILGZ,
        FILTT,
-       FILSUID,
+
+       FILSUID, /* file bit */
        FILSGID,
        FILSTCK,
-       FILNT,
+
+       FILNT, /* file ops */
        FILOT,
        FILEQ,
+
        FILUID,
        FILGID,
-       STREZ,
+
+       STREZ, /* str ops */
        STRNZ,
        STREQ,
        STRNE,
        STRLT,
        STRGT,
-       INTEQ,
+
+       INTEQ, /* int ops */
        INTNE,
        INTGE,
        INTGT,
        INTLE,
        INTLT,
+
        UNOT,
        BAND,
        BOR,
@@ -385,8 +395,8 @@ static int binop(void)
                        return val1 >  val2;
                if (op->op_num == INTLE)
                        return val1 <= val2;
-               if (op->op_num == INTLT)
-                       return val1 <  val2;
+               /*if (op->op_num == INTLT)*/
+               return val1 <  val2;
        }
        if (is_str_op(op->op_num)) {
                val1 = strcmp(opnd1, opnd2);
@@ -396,8 +406,8 @@ static int binop(void)
                        return val1 != 0;
                if (op->op_num == STRLT)
                        return val1 < 0;
-               if (op->op_num == STRGT)
-                       return val1 > 0;
+               /*if (op->op_num == STRGT)*/
+               return val1 > 0;
        }
        /* We are sure that these three are by now the only binops we didn't check
         * yet, so we do not check if the class is correct:
@@ -412,25 +422,29 @@ static int binop(void)
                        return b1.st_mtime > b2.st_mtime;
                if (op->op_num == FILOT)
                        return b1.st_mtime < b2.st_mtime;
-               if (op->op_num == FILEQ)
-                       return b1.st_dev == b2.st_dev && b1.st_ino == b2.st_ino;
+               /*if (op->op_num == FILEQ)*/
+               return b1.st_dev == b2.st_dev && b1.st_ino == b2.st_ino;
        }
-       return 1; /* NOTREACHED */
+       /*return 1; - NOTREACHED */
 }
 
 
 static void initialize_group_array(void)
 {
-       ngroups = getgroups(0, NULL);
-       if (ngroups > 0) {
+       int n;
+
+       /* getgroups may be expensive, try to use it only once */
+       ngroups = 32;
+       do {
                /* FIXME: ash tries so hard to not die on OOM,
                 * and we spoil it with just one xrealloc here */
                /* We realloc, because test_main can be entered repeatedly by shell.
                 * Testcase (ash): 'while true; do test -x some_file; done'
                 * and watch top. (some_file must have owner != you) */
-               group_array = xrealloc(group_array, ngroups * sizeof(gid_t));
-               getgroups(ngroups, group_array);
-       }
+               n = ngroups;
+               group_array = xrealloc(group_array, n * sizeof(gid_t));
+               ngroups = getgroups(n, group_array);
+       } while (ngroups > n);
 }
 
 
@@ -717,7 +731,7 @@ int test_main(int argc, char **argv)
         * isn't likely in the case of a shell.  paranoia
         * prevails...
         */
-       ngroups = 0;
+       /*ngroups = 0; - done by INIT_S() */
 
        //argc--;
        argv++;
index 55a3e0899ca3ad2931e80749e7aab141b2496bbc..a5be192fba4309e3c7f04954c32917547c876a63 100644 (file)
@@ -276,10 +276,12 @@ int tcpudpsvd_main(int argc UNUSED_PARAM, char **argv)
        setsockopt_reuseaddr(sock);
        sa_len = lsa->len; /* I presume sockaddr len stays the same */
        xbind(sock, &lsa->u.sa, sa_len);
-       if (tcp)
+       if (tcp) {
                xlisten(sock, backlog);
-       else /* udp: needed for recv_from_to to work: */
+               close_on_exec_on(sock);
+       } else { /* udp: needed for recv_from_to to work: */
                socket_want_pktinfo(sock);
+       }
        /* ndelay_off(sock); - it is the default I think? */
 
 #ifndef SSLSVD
@@ -410,10 +412,6 @@ int tcpudpsvd_main(int argc UNUSED_PARAM, char **argv)
 
        /* Child: prepare env, log, and exec prog */
 
-       /* Closing tcp listening socket */
-       if (tcp)
-               close(sock);
-
        { /* vfork alert! every xmalloc in this block should be freed! */
                char *local_hostname = local_hostname; /* for compiler */
                char *local_addr = NULL;
index 4400083f83906d6e4bcfda79bc0005e1f6d134c7..88ac2092f3d9488028609cc98714fb77a8edee7d 100644 (file)
@@ -8,7 +8,7 @@
 # you can just add an entry like:
 #   /sbin/foobar        f       2755    0       0       -       -       -       -       -
 # and (assuming the file /sbin/foobar exists) it will be made setuid
-# root (regardless of what its permissions are on the host filesystem.
+# root (regardless of what its permissions are on the host filesystem).
 # Furthermore, you can use a single table entry to create a many device
 # minors.  For example, if I wanted to create /dev/hda and /dev/hda[0-15]
 # I could just use the following two table entries: