mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
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:
parent
f0ced0110f
commit
02f994a715
22
lib/ftp.c
22
lib/ftp.c
@ -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,
|
||||||
|
42
lib/hostip.c
42
lib/hostip.c
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user