runsvd: shrink by Vladimir
[oweals/busybox.git] / networking / nc.c
index b2f590adf42c0528b5f7d5332755cab2a5768b10..1a99f91ccf387109b9a29291363f2c396e80f227 100644 (file)
@@ -17,7 +17,7 @@
  * when compared to "standard" nc
  */
 
-static void timeout(int signum)
+static void timeout(int signum UNUSED_PARAM)
 {
        bb_error_msg_and_die("timed out");
 }
@@ -44,14 +44,17 @@ int nc_main(int argc, char **argv)
                while ((opt = getopt(argc, argv,
                        "" USE_NC_SERVER("lp:") USE_NC_EXTRA("w:i:f:e:") )) > 0
                ) {
-                       if (ENABLE_NC_SERVER && opt=='l')      USE_NC_SERVER(do_listen++);
-                       else if (ENABLE_NC_SERVER && opt=='p') {
+                       if (ENABLE_NC_SERVER && opt=='l')
+                               USE_NC_SERVER(do_listen++);
+                       else if (ENABLE_NC_SERVER && opt=='p')
                                USE_NC_SERVER(lport = bb_lookup_port(optarg, "tcp", 0));
-                       }
-                       else if (ENABLE_NC_EXTRA && opt=='w') USE_NC_EXTRA( wsecs = xatou(optarg));
-                       else if (ENABLE_NC_EXTRA && opt=='i') USE_NC_EXTRA( delay = xatou(optarg));
-                       else if (ENABLE_NC_EXTRA && opt=='f') USE_NC_EXTRA( cfd = xopen(optarg, O_RDWR));
-                       else if (ENABLE_NC_EXTRA && opt=='e' && optind<=argc) {
+                       else if (ENABLE_NC_EXTRA && opt=='w')
+                               USE_NC_EXTRA( wsecs = xatou(optarg));
+                       else if (ENABLE_NC_EXTRA && opt=='i')
+                               USE_NC_EXTRA( delay = xatou(optarg));
+                       else if (ENABLE_NC_EXTRA && opt=='f')
+                               USE_NC_EXTRA( cfd = xopen(optarg, O_RDWR));
+                       else if (ENABLE_NC_EXTRA && opt=='e' && optind <= argc) {
                                /* We cannot just 'break'. We should let getopt finish.
                                ** Or else we won't be able to find where
                                ** 'host' and 'port' params are
@@ -103,14 +106,14 @@ int nc_main(int argc, char **argv)
                        if (lport)
                                set_nport(lsa, htons(lport));
                        setsockopt_reuseaddr(sfd);
-                       xbind(sfd, &lsa->sa, lsa->len);
+                       xbind(sfd, &lsa->u.sa, lsa->len);
                        xlisten(sfd, do_listen); /* can be > 1 */
                        /* If we didn't specify a port number,
                         * query and print it after listen() */
                        if (!lport) {
                                socklen_t addrlen = lsa->len;
-                               getsockname(sfd, &lsa->sa, &addrlen);
-                               lport = get_nport(&lsa->sa);
+                               getsockname(sfd, &lsa->u.sa, &addrlen);
+                               lport = get_nport(&lsa->u.sa);
                                fdprintf(2, "%d\n", ntohs(lport));
                        }
                        close_on_exec_on(sfd);
@@ -147,12 +150,9 @@ int nc_main(int argc, char **argv)
                        goto accept_again;
                }
                /* child (or main thread if no multiple -l) */
-               if (cfd) {
-                       dup2(cfd, 0);
-                       close(cfd);
-               }
-               dup2(0, 1);
-               dup2(0, 2);
+               xmove_fd(cfd, 0);
+               xdup2(0, 1);
+               xdup2(0, 2);
                USE_NC_EXTRA(BB_EXECVP(execparam[0], execparam);)
                /* Don't print stuff or it will go over the wire.... */
                _exit(127);
@@ -180,7 +180,7 @@ int nc_main(int argc, char **argv)
                                nread = safe_read(fd, iobuf, sizeof(iobuf));
                                if (fd == cfd) {
                                        if (nread < 1)
-                                               exit(0);
+                                               exit(EXIT_SUCCESS);
                                        ofd = STDOUT_FILENO;
                                } else {
                                        if (nread<1) {