Skip to content

Commit

Permalink
First, revert my changes from yesterday to make Jeff Trawick's sugge…
Browse files Browse the repository at this point in the history
…stions

  simpler to follow.


git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@63920 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
wrowe committed Oct 13, 2002
1 parent 06c8383 commit 56e2dbe
Showing 1 changed file with 44 additions and 36 deletions.
80 changes: 44 additions & 36 deletions network_io/unix/sa_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,16 @@ struct apr_ipsubnet_t {
#endif
};

#ifndef NETWARE
#ifdef HAVE_SET_H_ERRNO
#define SET_H_ERRNO(newval) set_h_errno(newval)
#else
#define SET_H_ERRNO(newval) h_errno = (newval)
#endif
#else
#define SET_H_ERRNO(newval)
#endif

#if APR_HAS_THREADS && !defined(GETHOSTBYNAME_IS_THREAD_SAFE) && \
defined(HAVE_GETHOSTBYNAME_R)
/* This is the maximum size that may be returned from the reentrant
Expand Down Expand Up @@ -326,12 +336,8 @@ static apr_status_t call_resolver(apr_sockaddr_t **sa,
hints.ai_socktype = SOCK_STREAM;
error = getaddrinfo(hostname, NULL, &hints, &ai_list);
if (error) {
#ifdef WIN32
/* XXX Netware also??? */
return apr_get_netos_error();
#else
if (error == EAI_SYSTEM) {
return apr_get_os_error();
return errno;
}
else {
/* issues with representing this with APR's error scheme:
Expand All @@ -344,7 +350,6 @@ static apr_status_t call_resolver(apr_sockaddr_t **sa,
#endif
return error + APR_OS_START_EAIERR;
}
#endif
}

prev_sa = NULL;
Expand Down Expand Up @@ -418,8 +423,6 @@ static apr_status_t find_addresses(apr_sockaddr_t **sa,
#ifdef GETHOSTBYNAME_R_HOSTENT_DATA
struct hostent_data hd;
#else
/* If you see ERANGE, that means GETHOSBYNAME_BUFLEN needs to be
* bumped. */
char tmp[GETHOSTBYNAME_BUFLEN];
#endif
int hosterror;
Expand Down Expand Up @@ -448,23 +451,30 @@ static apr_status_t find_addresses(apr_sockaddr_t **sa,
/* Linux glibc2+ */
gethostbyname_r(hostname, &hs, tmp, GETHOSTBYNAME_BUFLEN - 1,
&hp, &hosterror);
if (!hp) {
return (hosterror + APR_OS_START_SYSERR);
}
#else
/* Solaris, Irix et alia */
hp = gethostbyname_r(hostname, &hs, tmp, GETHOSTBYNAME_BUFLEN - 1,
&hosterror);
if (!hp) {
return (hosterror + APR_OS_START_SYSERR);
}
#endif
#else
hp = gethostbyname(hostname);
#endif

if (!hp) {
#ifdef WIN32
return apr_get_netos_error();
#elif APR_HAS_THREADS && !defined(GETHOSTBYNAME_IS_THREAD_SAFE) && \
defined(HAVE_GETHOSTBYNAME_R) && !defined(BEOS)
#ifdef GETHOSTBYNAME_R_HOSTENT_DATA
return (h_errno + APR_OS_START_SYSERR);
#else
/* If you see ERANGE, that means GETHOSBYNAME_BUFLEN needs to be
* bumped. */
return (hosterror + APR_OS_START_SYSERR);
#endif
#else
return (h_errno + APR_OS_START_SYSERR);
#endif
}
}

Expand Down Expand Up @@ -546,7 +556,7 @@ APR_DECLARE(apr_status_t) apr_getnameinfo(char **hostname,

/* don't know if it is portable for getnameinfo() to set h_errno;
* clear it then see if it was set */
apr_set_netos_error(0);
SET_H_ERRNO(0);
/* default flags are NI_NAMREQD; otherwise, getnameinfo() will return
* a numeric address string if it fails to resolve the host name;
* that is *not* what we want here
Expand All @@ -556,10 +566,7 @@ APR_DECLARE(apr_status_t) apr_getnameinfo(char **hostname,
flags != 0 ? flags : NI_NAMEREQD);
if (rc != 0) {
*hostname = NULL;
#ifdef WIN32
/* XXX and Netware? */
return apr_get_netos_error();
#else

/* something went wrong. Look at the EAI_ error code */
if (rc != EAI_SYSTEM) {
#if defined(NEGATIVE_EAI)
Expand All @@ -570,14 +577,13 @@ APR_DECLARE(apr_status_t) apr_getnameinfo(char **hostname,
else {
/* EAI_SYSTEM System error returned in errno. */
/* IMHO, Implementations that set h_errno a simply broken. */
if (apr_get_netos_error()) { /* for broken implementations which set h_errno */
return apr_get_netos_error();
if (h_errno) { /* for broken implementations which set h_errno */
return h_errno + APR_OS_START_SYSERR;
}
else { /* "normal" case */
return apr_get_os_error();
return errno + APR_OS_START_SYSERR;
}
}
#endif
}
*hostname = sockaddr->hostname = apr_pstrdup(sockaddr->pool,
tmphostname);
Expand All @@ -603,32 +609,34 @@ APR_DECLARE(apr_status_t) apr_getnameinfo(char **hostname,
gethostbyaddr_r((char *)&sockaddr->sa.sin.sin_addr,
sizeof(struct in_addr), AF_INET,
&hs, tmp, GETHOSTBYNAME_BUFLEN - 1, &hptr, &hosterror);
if (!hptr) {
*hostname = NULL;
return hosterror + APR_OS_START_SYSERR;
}
#else
/* Solaris, Irix et alia */
hptr = gethostbyaddr_r((char *)&sockaddr->sa.sin.sin_addr,
sizeof(struct in_addr), AF_INET,
&hs, tmp, GETHOSTBYNAME_BUFLEN, &hosterror);
if (!hptr) {
*hostname = NULL;
return hosterror + APR_OS_START_SYSERR;
}
#endif
#else
struct hostent *hptr;
hptr = gethostbyaddr((char *)&sockaddr->sa.sin.sin_addr,
sizeof(struct in_addr), AF_INET);
#endif

if (!hptr) {
*hostname = NULL;
return apr_get_netos_error();
if (hptr) {
*hostname = sockaddr->hostname = apr_pstrdup(sockaddr->pool, hptr->h_name);
return APR_SUCCESS;
}
*hostname = sockaddr->hostname = apr_pstrdup(sockaddr->pool, hptr->h_name);
return APR_SUCCESS;
*hostname = NULL;
#if APR_HAS_THREADS && !defined(GETHOSTBYADDR_IS_THREAD_SAFE) && \
defined(HAVE_GETHOSTBYADDR_R) && !defined(BEOS) && \
!defined(GETHOSTBYNAME_R_HOSTENT_DATA)
return hosterror + APR_OS_START_SYSERR;
#elif defined(WIN32)
return apr_get_netos_error();
#elif defined(OS2)
return h_errno;
#else
return h_errno + APR_OS_START_SYSERR;
#endif
#endif
}

Expand Down

0 comments on commit 56e2dbe

Please sign in to comment.