Adjusted to the GETHOSTBYADDR_R_NARGS style

This commit is contained in:
Daniel Stenberg 2000-05-30 22:27:39 +00:00
parent 784c29c6c5
commit 8d76ad6c8e
2 changed files with 32 additions and 6 deletions

View File

@ -692,20 +692,34 @@ CURLcode _ftp(struct connectdata *conn)
#if defined(HAVE_INET_ADDR) #if defined(HAVE_INET_ADDR)
unsigned long address; unsigned long address;
#if defined(HAVE_GETHOSTBYADDR_R) # if defined(HAVE_GETHOSTBYADDR_R)
int h_errnop; int h_errnop;
#endif # endif
address = inet_addr(newhost); address = inet_addr(newhost);
#if defined(HAVE_GETHOSTBYADDR_R) # if defined(HAVE_GETHOSTBYADDR_R)
# if (GETHOSTBYADDR_R_NARGS < 8)
/* Solaris and IRIX */
answer = gethostbyaddr_r((char *) &address, sizeof(address), AF_INET, answer = gethostbyaddr_r((char *) &address, sizeof(address), AF_INET,
(struct hostent *)hostent_buf, (struct hostent *)hostent_buf,
hostent_buf + sizeof(*answer), hostent_buf + sizeof(*answer),
sizeof(hostent_buf) - sizeof(*answer), sizeof(hostent_buf) - sizeof(*answer),
&h_errnop); &h_errnop);
#else # else
/* Linux style */
if(gethostbyaddr_r((char *) &address, sizeof(address), AF_INET,
(struct hostent *)hostent_buf,
hostent_buf + sizeof(*answer),
sizeof(hostent_buf) - sizeof(*answer),
&answer,
&h_errnop))
answer=NULL; /* error */
# endif
# else
answer = gethostbyaddr((char *) &address, sizeof(address), AF_INET); answer = gethostbyaddr((char *) &address, sizeof(address), AF_INET);
#endif # endif
#else #else
answer = NULL; answer = NULL;
#endif #endif

View File

@ -120,10 +120,22 @@ struct hostent *GetHost(struct UrlData *data,
else { else {
int h_errnop; int h_errnop;
memset(buf,0,buf_size); /* workaround for gethostbyname_r bug in qnx nto */ memset(buf,0,buf_size); /* workaround for gethostbyname_r bug in qnx nto */
#if (GETHOSTBYNAME_R_NARGS < 6)
/* Solaris, IRIX and more */
if ((h = gethostbyname_r(hostname, if ((h = gethostbyname_r(hostname,
(struct hostent *)buf,buf + (struct hostent *)buf,buf +
sizeof(struct hostent),buf_size - sizeof(struct hostent),buf_size -
sizeof(struct hostent),&h_errnop)) == NULL ) { sizeof(struct hostent),&h_errnop)) == NULL )
#else
/* Linux */
if( gethostbyname_r(hostname,
(struct hostent *)buf,buf +
sizeof(struct hostent),buf_size -
sizeof(struct hostent),
&h, /* DIFFERENCE */
&h_errnop))
#endif
{
infof(data, "gethostbyname_r(2) failed for %s\n", hostname); infof(data, "gethostbyname_r(2) failed for %s\n", hostname);
} }
#else #else