svn commit: r299473 - head/usr.bin/whois
Conrad E. Meyer
cem at FreeBSD.org
Wed May 11 17:52:07 UTC 2016
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-head
mailing list