Unify option checking and simply logic.

F_HDRINCL and F_ROUTE are mutually exclusive, thus check the latter only
if the former one is not set.

Index: ping.c
===================================================================
RCS file: /cvs/src/sbin/ping/ping.c,v
retrieving revision 1.218
diff -u -p -r1.218 ping.c
--- ping.c      22 Feb 2017 13:43:35 -0000      1.218
+++ ping.c      13 Jun 2017 17:38:22 -0000
@@ -562,17 +562,17 @@ main(int argc, char *argv[])
                (void)setsockopt(s, SOL_SOCKET, SO_DEBUG, &optval,
                    sizeof(optval));

-       if ((options & F_FLOOD) && (options & F_INTERVAL))
+       if (options & (F_FLOOD | F_INTERVAL))
                errx(1, "-f and -i options are incompatible");

-       if ((options & F_FLOOD) && (options & (F_AUD_RECV | F_AUD_MISS)))
+       if (options & (F_FLOOD | F_AUD_RECV | F_AUD_MISS))
                warnx("No audible output for flood pings");

        if (datalen >= sizeof(struct payload))       /* can we time transfer */
                timing = 1;

        if (v6flag) {
-               /* in F_VERBOSE case, we may get non-echoreply packets*/
+               /* in F_VERBOSE case, we may get non-echoreply packets */
                if (options & F_VERBOSE && datalen < 2048) /* XXX 2048? */
                        packlen = 2048 + IP6LEN + ECHOLEN + EXTRA;
                else
@@ -621,7 +621,7 @@ main(int argc, char *argv[])
                 * let the kernel pass extension headers of incoming packets,
                 * for privileged socket options
                 */
-               if ((options & F_VERBOSE) != 0) {
+               if (options & F_VERBOSE) {
                        int opton = 1;

                        if (setsockopt(s, IPPROTO_IPV6, IPV6_RECVHOPOPTS,
@@ -696,7 +696,7 @@ main(int argc, char *argv[])
                                options |= F_HDRINCL;
                }

-               if (options & F_RROUTE && options & F_HDRINCL)
+               if (options & (F_RROUTE | F_HDRINCL))
                        errx(1, "-R option and -D or -T, or -t to unicast"
                            " destinations are incompatible");

@@ -717,10 +717,8 @@ main(int argc, char *argv[])
                        else
                                ip->ip_src.s_addr = INADDR_ANY;
                        ip->ip_dst = dst4.sin_addr;
-               }
-
                /* record route option */
-               if (options & F_RROUTE) {
+               } else if (options & F_RROUTE) {
                        if (IN_MULTICAST(ntohl(dst4.sin_addr.s_addr)))
                                errx(1, "record route not valid to multicast"
                                    " destinations");
@@ -773,7 +771,7 @@ main(int argc, char *argv[])
        (void)signal(SIGINT, onsignal);
        (void)signal(SIGINFO, onsignal);

-       if ((options & F_FLOOD) == 0) {
+       if (!(options & F_FLOOD)) {
                (void)signal(SIGALRM, onsignal);
                itimer.it_interval = interval;
                itimer.it_value = interval;
@@ -861,8 +859,8 @@ main(int argc, char *argv[])
                         * a path MTU notification.)
                         */
                        if ((mtu = get_pathmtu(&m, &dst6)) > 0) {
-                               if ((options & F_VERBOSE) != 0) {
-                                       printf("new path MTU (%d) is "
+                               if (options & F_VERBOSE) {
+                                       (void)printf("new path MTU (%d) is "
                                            "notified\n", mtu);
                                }
                        }
@@ -961,7 +959,7 @@ pr_addr(struct sockaddr *addr, socklen_t
        static char buf[NI_MAXHOST];
        int flag = 0;

-       if ((options & F_HOSTNAME) == 0)
+       if (!(options & F_HOSTNAME))
                flag |= NI_NUMERICHOST;

        if (getnameinfo(addr, addrlen, buf, sizeof(buf), NULL, 0, flag) == 0)
@@ -1892,7 +1890,7 @@ get_pathmtu(struct msghdr *mhdr, struct dst->sin6_scope_id &&
                            mtuctl->ip6m_addr.sin6_scope_id !=
                            dst->sin6_scope_id)) {
-                               if ((options & F_VERBOSE) != 0) {
+                               if (options & F_VERBOSE) {
                                        printf("path MTU for %s is notified. "
                                            "(ignored)\n",
                                            pr_addr((struct sockaddr *)

Reply via email to