I like most (all? of the correct ones), can you have another go
at trying to fix the pointed out changes in behaviour?

On Tue, Jun 13, 2017 at 08:02:13PM +0200, Klemens Nanni wrote:
> 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 *)
> 

-- 
I'm not entirely sure you are real.

Reply via email to