if (isdigit (name[0])) for (cp = name;; ++cp) { if (*cp == '\0') { char *bp;  if (*--cp == '.') break;  if (inet_pton (af, name, host_data->host_addr) <= 0) { *h_errnop = HOST_NOT_FOUND; return NSS_STATUS_NOTFOUND; }  bp = __stpncpy (host_data->linebuffer, name, linebuflen); host_data->linebuffer[linebuflen - 1] = '\0'; linebuflen -= bp - host_data->linebuffer;  result->h_name = host_data->linebuffer; result->h_aliases = host_data->aliases; host_data->aliases[0] = NULL; host_data->h_addr_ptrs[0] = (char *) host_data->host_addr; host_data->h_addr_ptrs[1] = NULL; result->h_addr_list = host_data->h_addr_ptrs;  if (_res.options & RES_USE_INET6) map_v4v6_hostent (result, &bp, &linebuflen); *h_errnop = NETDB_SUCCESS; return NSS_STATUS_SUCCESS; } if (!isdigit (*cp) && *cp != '.') break; } if (isxdigit (name[0]) || name[0] == ':') for (cp = name;; ++cp) { if (*cp == '\0') { char *bp;  if (*--cp == '.') break;  if (inet_pton (af, name, host_data->host_addr) <= 0) { *h_errnop = HOST_NOT_FOUND; return NSS_STATUS_NOTFOUND; }  bp = __stpncpy (host_data->linebuffer, name, linebuflen); host_data->linebuffer[linebuflen - 1] = '\0'; linebuflen -= bp - host_data->linebuffer;  result->h_name = host_data->linebuffer; result->h_aliases = host_data->aliases; host_data->aliases[0] = NULL; host_data->h_addr_ptrs[0] = (char *) host_data->host_addr; host_data->h_addr_ptrs[1] = NULL; result->h_addr_list = host_data->h_addr_ptrs; *h_errnop = NETDB_SUCCESS; return NSS_STATUS_SUCCESS; } if (!isxdigit (*cp) && *cp != ':' && *cp != '.') break; }
_nss_dns_gethostbyname2_r (const char *name, int af, struct hostent *result,			   char *buffer, size_t buflen, int *h_errnop){  struct host_data  {    char *aliases[MAX_NR_ALIASES];    unsigned char host_addr[16];	/* IPv4 or IPv6 */    char *h_addr_ptrs[MAX_NR_ADDRS + 1];    char linebuffer[0];  } *host_data = (struct host_data *) buffer;  int linebuflen = buflen - offsetof (struct host_data, linebuffer);  querybuf host_buffer;  int size, type, n;  const char *cp;  switch (af) {  case AF_INET:    size = INADDRSZ;    type = T_A;    break;  case AF_INET6:    size = IN6ADDRSZ;    type = T_AAAA;    break;  default:    *h_errnop = NETDB_INTERNAL;    __set_errno (EAFNOSUPPORT);    return NSS_STATUS_UNAVAIL;  }  result->h_addrtype = af;  result->h_length = size;  /*   * if there aren't any dots, it could be a user-level alias.   * this is also done in res_query() since we are not the only   * function that looks up host names.   */  if (strchr (name, '.') == NULL && (cp = __hostalias (name)) != NULL)    name = cp;  /*   * disallow names consisting only of digits/dots, unless   * they end in a dot.   */  if (isdigit (name[0]))    for (cp = name;; ++cp)      {	if (*cp == '\0')	  {	    char *bp;	    if (*--cp == '.')	      break;	    /*	     * All-numeric, no dot at the end.  Fake up a hostent	     * as if we'd actually done a lookup.	     */	    if (inet_pton (af, name, host_data->host_addr) <= 0)	      {		*h_errnop = HOST_NOT_FOUND;		return NSS_STATUS_NOTFOUND;	      }	    bp = __stpncpy (host_data->linebuffer, name, linebuflen);	    host_data->linebuffer[linebuflen - 1] = '\0';	    linebuflen -= bp - host_data->linebuffer;	    result->h_name = host_data->linebuffer;	    result->h_aliases = host_data->aliases;	    host_data->aliases[0] = NULL;	    host_data->h_addr_ptrs[0] = (char *) host_data->host_addr;	    host_data->h_addr_ptrs[1] = NULL;	    result->h_addr_list = host_data->h_addr_ptrs;	    if (_res.options & RES_USE_INET6)	      map_v4v6_hostent (result, &bp, &linebuflen);	    *h_errnop = NETDB_SUCCESS;	    return NSS_STATUS_SUCCESS;	  }	if (!isdigit (*cp) && *cp != '.')	  break;      }  if (isxdigit (name[0]) || name[0] == ':')    for (cp = name;; ++cp)      {	if (*cp == '\0')	  {	    char *bp;	    if (*--cp == '.')	      break;	    /*	     * All-IPv6-legal, no dot at the end.  Fake up a hostent	     * as if we'd actually done a lookup.	     */	    if (inet_pton (af, name, host_data->host_addr) <= 0)	      {		*h_errnop = HOST_NOT_FOUND;		return NSS_STATUS_NOTFOUND;	      }	    bp = __stpncpy (host_data->linebuffer, name, linebuflen);	    host_data->linebuffer[linebuflen - 1] = '\0';	    linebuflen -= bp - host_data->linebuffer;	    result->h_name = host_data->linebuffer;	    result->h_aliases = host_data->aliases;	    host_data->aliases[0] = NULL;	    host_data->h_addr_ptrs[0] = (char *) host_data->host_addr;	    host_data->h_addr_ptrs[1] = NULL;	    result->h_addr_list = host_data->h_addr_ptrs;	    *h_errnop = NETDB_SUCCESS;	    return NSS_STATUS_SUCCESS;	  }	if (!isxdigit (*cp) && *cp != ':' && *cp != '.')	  break;      }  n = res_search (name, C_IN, type, host_buffer.buf, sizeof (host_buffer));  if (n < 0)    return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;  return getanswer_r (&host_buffer, n, name, type, result, buffer, buflen,		      h_errnop);}