Fixed to use the new HAVE_GETHOSTBYxxxx_R_x defines, now trying to support

the AIX-style as well. The AIX-stuff is *NOT* verified to work.
This commit is contained in:
Daniel Stenberg 2000-08-04 11:27:17 +00:00
parent f0ced0110f
commit 02f994a715
2 changed files with 47 additions and 17 deletions

View File

@ -770,16 +770,32 @@ CURLcode _ftp(struct connectdata *conn)
# endif # endif
address = inet_addr(newhost); address = inet_addr(newhost);
# if defined(HAVE_GETHOSTBYADDR_R) # ifdef HAVE_GETHOSTBYADDR_R
# if (GETHOSTBYADDR_R_NARGS < 8) # ifdef HAVE_GETHOSTBYADDR_R_5
/* AIX, Digital Unix style:
extern int gethostbyaddr_r(char *addr, size_t len, int type,
struct hostent *htent, struct hostent_data *ht_data); */
/* Daniel: this implementation is really just guessing, please
verify this before trusting this. I don't have access to any
such system to try out! */
if(gethostbyaddr_r((char *) &address,
sizeof(address), AF_INET,
(struct hostent *)hostent_buf,
hostent_buf + sizeof(*answer))
answer=NULL;
# endif
# ifdef HAVE_GETHOSTBYADDR_R_7
/* Solaris and IRIX */ /* 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 # endif
# ifdef HAVE_GETHOSTBYADDR_R_8
/* Linux style */ /* Linux style */
if(gethostbyaddr_r((char *) &address, sizeof(address), AF_INET, if(gethostbyaddr_r((char *) &address, sizeof(address), AF_INET,
(struct hostent *)hostent_buf, (struct hostent *)hostent_buf,

View File

@ -116,31 +116,45 @@ struct hostent *GetHost(struct UrlData *data,
h->h_name = *(h->h_addr_list) + h->h_length; h->h_name = *(h->h_addr_list) + h->h_length;
/* bad one h->h_name = (char*)(h->h_addr_list + h->h_length); */ /* bad one h->h_name = (char*)(h->h_addr_list + h->h_length); */
MakeIP(ntohl(in),h->h_name,buf_size - (long)(h->h_name) + (long)buf); MakeIP(ntohl(in),h->h_name,buf_size - (long)(h->h_name) + (long)buf);
#if defined(HAVE_GETHOSTBYNAME_R)
} }
#if defined(HAVE_GETHOSTBYNAME_R)
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) #ifdef HAVE_GETHOSTBYNAME_R_5
/* Solaris, IRIX and more */ /* Solaris, IRIX and more */
if ((h = gethostbyname_r(hostname, if ((h = gethostbyname_r(hostname,
(struct hostent *)buf,buf + (struct hostent *)buf,
sizeof(struct hostent),buf_size - buf + sizeof(struct hostent),
sizeof(struct hostent),&h_errnop)) == NULL ) buf_size - sizeof(struct hostent),
#else &h_errnop)) == NULL )
/* Linux */ #endif
if( gethostbyname_r(hostname, #ifdef HAVE_GETHOSTBYNAME_R_6
(struct hostent *)buf,buf + /* Linux */
sizeof(struct hostent),buf_size - if( gethostbyname_r(hostname,
sizeof(struct hostent), (struct hostent *)buf,
&h, /* DIFFERENCE */ buf + sizeof(struct hostent),
&h_errnop)) buf_size - sizeof(struct hostent),
&h, /* DIFFERENCE */
&h_errnop))
#endif
#ifdef HAVE_GETHOSTBYNAME_R_3
/* AIX, Digital Unix, more? */
/* August 4th, 2000. I don't have any such system around so I write this
blindly in hope it might work or that someone else will help me fix
this. */
h = gethostbyname_r(hostname,
(struct hostent *)buf,
(struct hostent_data *) buf + sizeof(struct hostent));
*h_errnop= errno; /* we don't deal with this, but set it anyway */
if(NULL == h)
#endif #endif
{ {
infof(data, "gethostbyname_r(2) failed for %s\n", hostname); infof(data, "gethostbyname_r(2) failed for %s\n", hostname);
} }
#else #else
}
else { else {
if ((h = gethostbyname(hostname)) == NULL ) { if ((h = gethostbyname(hostname)) == NULL ) {
infof(data, "gethostbyname(2) failed for %s\n", hostname); infof(data, "gethostbyname(2) failed for %s\n", hostname);