svn commit: r299473 - head/usr.bin/whois

Conrad Meyer cem at FreeBSD.org
Wed May 11 17:54:46 UTC 2016


This commit message should have said: "No functional change."  (As
opposed to the follow-up commit which will come shortly.)

Thanks,
Conrad

On Wed, May 11, 2016 at 10:52 AM, Conrad E. Meyer <cem at freebsd.org> wrote:
> Author: cem
> Date: Wed May 11 17:52:06 2016
> New Revision: 299473
> URL: https://svnweb.freebsd.org/changeset/base/299473
>
> Log:
>   whois(1): Pull out async multiple host connection code into a routine
>
>   This logic was added to the whois() function in r281959, but could easily be
>   its own routine.  In this case, I think the abstraction makes both functions
>   easier to reason about.
>
>   This precedes some Coverity-suggested cleanup.
>
>   Sponsored by: EMC / Isilon Storage Division
>
> Modified:
>   head/usr.bin/whois/whois.c
>
> Modified: head/usr.bin/whois/whois.c
> ==============================================================================
> --- head/usr.bin/whois/whois.c  Wed May 11 17:40:51 2016        (r299472)
> +++ head/usr.bin/whois/whois.c  Wed May 11 17:52:06 2016        (r299473)
> @@ -285,19 +285,15 @@ s_asprintf(char **ret, const char *forma
>         va_end(ap);
>  }
>
> -static void
> -whois(const char *query, const char *hostname, int flags)
> +static int
> +connect_to_any_host(struct addrinfo *hostres)
>  {
> -       FILE *fp;
> -       struct addrinfo *hostres, *res;
> -       char *buf, *host, *nhost, *p;
> -       int s = -1, f;
> +       struct addrinfo *res;
>         nfds_t i, j;
> -       size_t len, count;
> +       size_t count;
>         struct pollfd *fds;
> -       int timeout = 180;
> +       int timeout = 180, s = -1;
>
> -       hostres = gethostinfo(hostname, 1);
>         for (res = hostres, count = 0; res; res = res->ai_next)
>                 count++;
>         fds = calloc(count, sizeof(*fds));
> @@ -401,15 +397,29 @@ whois(const char *query, const char *hos
>         s = -1;
>         if (count == 0)
>                 errno = ETIMEDOUT;
> -done:
> -       if (s == -1)
> -               err(EX_OSERR, "connect()");
>
> +done:
>         /* Close all watched fds except the succeeded one */
>         for (j = 0; j < i; j++)
>                 if (fds[j].fd != s && fds[j].fd != -1)
>                         close(fds[j].fd);
>         free(fds);
> +       return (s);
> +}
> +
> +static void
> +whois(const char *query, const char *hostname, int flags)
> +{
> +       FILE *fp;
> +       struct addrinfo *hostres;
> +       char *buf, *host, *nhost, *p;
> +       int s, f;
> +       size_t len, i;
> +
> +       hostres = gethostinfo(hostname, 1);
> +       s = connect_to_any_host(hostres);
> +       if (s == -1)
> +               err(EX_OSERR, "connect()");
>
>         /* Restore default blocking behavior.  */
>         if ((f = fcntl(s, F_GETFL)) == -1)
>


More information about the svn-src-all mailing list